C# 制作索引控件数组?
是否有C#索引控件数组?我想放一个“按钮数组”,例如5个按钮,它们只使用一个事件处理程序来处理所有这5个控件的索引(就像VB6一样)。否则,我必须为这5个按钮中的每个按钮编写一个额外的事件处理程序。如果我有100个按钮,我需要100个事件处理程序?我的意思是:C# 制作索引控件数组?,c#,arrays,winforms,user-controls,C#,Arrays,Winforms,User Controls,是否有C#索引控件数组?我想放一个“按钮数组”,例如5个按钮,它们只使用一个事件处理程序来处理所有这5个控件的索引(就像VB6一样)。否则,我必须为这5个按钮中的每个按钮编写一个额外的事件处理程序。如果我有100个按钮,我需要100个事件处理程序?我的意思是: TextBox1[i].Text="Example"; 它可以让我更容易地使用控制阵列进行编码。现在我看到,C#至少在用户控件上没有可见的数组功能,在用户控件上没有“index”属性。所以我猜C#没有控件数组,或者我必须按已知名称调用每
TextBox1[i].Text="Example";
它可以让我更容易地使用控制阵列进行编码。现在我看到,C#至少在用户控件上没有可见的数组功能,在用户控件上没有“index”属性。所以我猜C#没有控件数组,或者我必须按已知名称调用每个元素
我没有在for循环中给出100个文本框,而是要写:
TextBox1.Text = Value1;
TextBox2.Text = Value2;
...
...
TextBox100.Text = Value100;
更多的工作+所有这100个事件处理程序,每个都有一个额外的文本框。只需创建一个处理程序并将所有按钮指向它
var ButtonHandler = (sender, args) => {
var clicked = (Button)sender;
if (clicked.Text == "whatever")
//do stuff
else
//do other stuff
};
button1.Click += ButtonHandler;
button2.Click += ButtonHandler;
或者,如果您在代码中创建控件,您可以使用。只需创建一个处理程序,并将所有按钮指向它
var ButtonHandler = (sender, args) => {
var clicked = (Button)sender;
if (clicked.Text == "whatever")
//do stuff
else
//do other stuff
};
button1.Click += ButtonHandler;
button2.Click += ButtonHandler;
或者,如果要在代码中创建控件,可以使用
我必须写:
for(int i=0;i
我必须写:
for(int i=0;i如果您使用的是Web窗体,而不是MVC,则可以访问页面上的控件集合,如所示。本质上,控件集合是一个树,其中页面承载第一级子控件,某些项具有自己的子控件。有关如何遵循该树的示例,请参阅
另外,请参见
只要所需签名相同,就可以对多个项目使用相同的事件处理程序
对于Windows窗体,这几乎是相同的,因为它们基于类似的体系结构模型,但您需要和。如果您使用的是Web窗体而不是MVC,则可以访问页面上的控件集合,如中所示。本质上,控件集合是一个树,其中页面承载第一级子控件和some具有自己子项的项目。有关如何遵循树的示例,请参阅
另外,请参见
只要所需签名相同,就可以对多个项目使用相同的事件处理程序
对于Windows窗体,这几乎是相同的,因为它们基于相似的体系结构模型,但您需要和。正如我在对HatSoft解决方案的评论中提到的,C#Winforms不允许您像旧的VB6允许的那样创建控件数组。我认为我们能得到的最接近的是HatSoft和Bert Evans在他们的帖子中所说的wn
我希望能够满足您的需求的一件事是事件处理程序,您可以获得一个公共事件处理程序,在事件处理程序中,当您键入“sender”时,您可以直接获得控件,就像在VB6中一样
C#
VB6
因此,您可能遇到的唯一问题是将这100个文本框连接到单个事件处理程序,如果您不是通过代码动态创建控件,而是在设计时手动创建控件,那么您可以建议将它们分组到一个容器(如Panel)中。然后在Form Load中将它们连接到单个事件处理程序,如下所示:
foreach (Control control in myTextBoxPanel.Controls)
{
if(control is TextBox)
control.TextChanged += new EventHandler(control_TextChanged);
}
正如我在HatSoft对解决方案的评论中提到的,C#Winforms不允许您像旧的VB6允许的那样创建控件数组。我认为我们能得到的最接近的是HatSoft和Bert Evans在他们的帖子中所展示的内容
我希望能够满足您的需求的一件事是事件处理程序,您可以获得一个公共事件处理程序,在事件处理程序中,当您键入“sender”时,您可以直接获得控件,就像在VB6中一样
C#
VB6
因此,您可能遇到的唯一问题是将这100个文本框连接到单个事件处理程序,如果您不是通过代码动态创建控件,而是在设计时手动创建控件,那么您可以建议将它们分组到一个容器(如Panel)中。然后在Form Load中将它们连接到单个事件处理程序,如下所示:
foreach (Control control in myTextBoxPanel.Controls)
{
if(control is TextBox)
control.TextChanged += new EventHandler(control_TextChanged);
}
另一件需要注意的事情:如果你真的需要在一个表单上编辑100个字符串,你可能应该考虑100个文本框是否真的是最好的方法。也许ListView、DataGridView或PropertyGrid更适合
这几乎适用于您认为需要大量控件的任何时候。另一件需要注意的事情:如果您真的需要在一个表单上编辑100个字符串,您可能应该考虑100个文本框是否真的是最好的方式。也许ListView、DataGridView或PropertyGrid更适合
这几乎适用于任何你认为需要大量控件的时候。我知道我参加这个聚会有点晚了,但这个解决方案会起作用:
创建全局数组:
TextBox[] myTextBox;
然后在对象的构造函数中,调用
InitializeComponent();
初始化阵列:
myTextBox = new TextBox[] {TextBox1, TextBox2, ... };
现在,您可以迭代控件数组:
for(int i = 0; i < myTextBox.Length; i++)
myTextBox[i].Text = "OMG IT WORKS!!!";
for(int i=0;i
我希望这有帮助
皮特我知道我参加这个聚会有点晚了,但这个解决方案会奏效:
创建全局数组:
TextBox[] myTextBox;
然后在对象的构造函数中,调用
InitializeComponent();
初始化阵列:
myTextBox = new TextBox[] {TextBox1, TextBox2, ... };
现在,您可以迭代控件数组:
for(int i = 0; i < myTextBox.Length; i++)
myTextBox[i].Text = "OMG IT WORKS!!!";
for(int i=0;i
我希望这有帮助
皮特保持简单:
TextBox[] keybox = new TextBox[16]; //create an array
for (int i=0; i<16; i++)
{
keybox[i] = new TextBox(); //initialize (create storage for elements)
keybox[i].Tag = i; //Tag prop = index (not available at design time)
keybox[i].KeyDown += keybox_down; //define event handler for array
}
private void keybox_down(object sender, KeyEventArgs e)
{
int index = (int)((TextBox)sender).Tag //get index of element that fired event
...
}
TextBox[]keybox=newtextbox[16];//创建一个数组
对于(int i=0;i保持简单:
TextBox[] keybox = new TextBox[16]; //create an array
for (int i=0; i<16; i++)
{
keybox[i] = new TextBox(); //initialize (create storage for elements)
keybox[i].Tag = i; //Tag prop = index (not available at design time)
keybox[i].KeyDown += keybox_down; //define event handler for array
}
private void keybox_down(object sender, KeyEventArgs e)
{
int index = (int)((TextBox)sender).Tag //get index of element that fired event
...
}
TextBox[]keybox=newtextbox[16];//创建一个数组
for(int i=0;i每个父控件都有一个属性,用于访问子控件的集合。如果将所有文本框/按钮放置在同一父控件中