我在哪里放置一个数组,以便 Windows 窗体控件可以访问它?

Posted

技术标签:

【中文标题】我在哪里放置一个数组,以便 Windows 窗体控件可以访问它?【英文标题】:Where do I put an array so that It is accessible to windows form controls? 【发布时间】:2022-01-10 07:24:19 【问题描述】:

我正在开发一个 C# windows 窗体应用程序交易卡游戏集合管理器

我有一个 Card 类,我正在尝试创建一个 Card 对象数组来表示集合中的每张卡片。从那里,我希望能够在表单文本框、标签、图片框等上搜索和显示卡片详细信息。

我尝试将数组放在不同类的内部和外部的 form1.cs 和 program.cs 中。数组似乎在 click 事件处理程序范围内的唯一位置是在其中声明它时。

我在哪里可以初始化这个数组,以便在整个程序和表单事件处理程序的范围内访问它?我对使用 Windows 窗体进行面向对象编程非常陌生

Card 类的构造函数接受一个 int 参数并初始化“收集器编号”

public partial class Form1 : Form

    public Form1()
    
        InitializeComponent();

        const int NumberOfCardsInSet = 3;
        Card[] Set = new Card[NumberOfCardsInSet];
        for (int iii = 0; iii < NumberOfCardsInSet; iii++)
         Set[iii] = new Card(iii + 1); 
    

Card 的构造函数接受一个 int 参数来设置集合数。在此之后,卡片对象可以访问,我可以设置它们的字段..但是在这里:

private void button1_Click(object sender, EventArgs e)

    //test button
    DisplayCard(Set[0]);   //error: name "set" doesnt exist in current context



public void DisplayCard(Card selectedCard)

    myDCollectorNoTB.Text = selectedCard.CollectorNum.ToString();
    myDNameTB.Text = selectedCard.Name.ToString();
    myDRarityTB.Text = selectedCard.CardRarity.ToString();
    myDCostTB.Text = selectedCard.Cost.ToString();    

【问题讨论】:

把它放在表单类中应该没问题。如果这对您不起作用,请在问题中引用课程的相关部分。 set 还是Set? C# 是区分大小写的语言。 对不起,即使使用“设置”也显示错误,当我试图最小化相关代码时,大小写不匹配已完成。即使大小写正确,我也会遇到此错误 如您所见,set 在到达按钮单击事件时是未知的。您需要“定义”set“外部”Form1 的构造函数。在 Form1 的构造函数中,您将“初始化”set。所以……放……Card[] set;……就在上面……public Form1()……并将构造函数行更改为……set = new Card[NumberOfCardsInSet];…… 谢谢 JohnG,成功了 【参考方案1】:

数组需要在类的范围内声明(作为成员,就像构造函数或 button1_Click 和 DisplayCard 方法一样)。基于您的代码:

public partial class Form1 : Form

    private const int NumberOfCardsInSet = 3;
    private Card[] Set = new Card[NumberOfCardsInSet];

    public Form1()
    
        InitializeComponent();
        
        for (var i = 0; i < NumberOfCardsInSet; ++i)
         
            Set[i] = new Card(i + 1); 
        
    

    //your button1_Click and DisplayCard methods go here


【讨论】:

谢谢 Flydog57!我现在在做生意!

以上是关于我在哪里放置一个数组,以便 Windows 窗体控件可以访问它?的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的 VBA 宏转换为 C# 以在 Windows 窗体应用程序中使用?

在哪里放置应用程序以便无论工作目录如何我都可以使用它们?

在 MVC 中,我在哪里放置数据库查询?

找不到 Windows 窗体应用程序 (.NET Core) 模板。它位于哪里?

Symfony 中公共数据存储的数组放置在哪里

setStatusBarHidden:YES 如果我在使用相机时不想要状态栏,在哪里放置