我在哪里放置一个数组,以便 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 窗体应用程序中使用?