Dae*_*vin 2 c# controls winforms
我之前找到了类似的问题答案,但并不完全符合我的目的......
在Visual Basic中(最后我在06/07使用它),有一个"Index"属性,您可以将其分配给具有相同名称的多个控件.我主要使用它来循环控制,即:
For i = 1 to 500
picSeat(i).Print "Hello"
Next i
Run Code Online (Sandbox Code Playgroud)
有没有办法在C#中做到这一点?我知道有一个.IndexOf(),但这对我正在做的事情有帮助吗?我希望有多个具有相同名称的控件,只是不同的索引.如果我不清楚,请问,不要downvote.
编辑:这是一个Windows窗体应用程序,我使用的Visual Studio 2012年我正在谈论的控制,而不是数组/列表; 这在VB中是可能的,我想知道它是否可能在C#中.所以我想在剧院里拥有30个席位.我希望每个座位都由一个名为"picSeat"的图片框代表.VB会让我命名几个完全相同的对象,并将值赋给控件属性"Index".这样,我可以使用上面的循环在每个图片框中打印"Hello",只有3行代码.
不,这个功能在C#中不存在,并且在从经典VB到VB.Net的过渡中从未实现过.
我通常做的是将每个有问题的控件放在一个公共父容器中.表单本身可以工作,但如果您需要将它们与相同类型的其他表项区分开来,GroupBox或Panel控件也可以正常工作.然后,您可以像这样访问控件:
foreach (var picBox in parentControl.Controls.OfType<PictureBox>())
{
// do something with each picturebox
}
Run Code Online (Sandbox Code Playgroud)
如果要使用特定控件,只需按名称编写:
pictureBox6.SomeProperty = someValue;
Run Code Online (Sandbox Code Playgroud)
如果您需要更改在运行时确定的特定控件,通常这是对用户事件的响应:
void PictureBox_Click(object sender, EventArgs e)
{
var picBox = sender As PictureBox;
if (picBox == null) return;
//picBox is now whichever box was clicked
// (assuming you set all your pictureboxes to use this handler)
}
Run Code Online (Sandbox Code Playgroud)
如果你真的真的希望控制阵列功能,您可以通过添加代码来创建数组到窗体的Load事件中做到这一点:
PictureBox[] pictureBoxes = Me.Controls.OfType<PictureBox>().ToArray();
Run Code Online (Sandbox Code Playgroud)