C#控件数组
基本上我有3个不同类型的数组:C#控件数组,c#,C#,基本上我有3个不同类型的数组: control = new Control[2] { txtRecordDelimeter, txtFieldDelimeter }; name = new string[2] { "Record Delimiter", "Field Delimiter" }; exists = new bool[2] { false, false }; …本质上,我想创建一个循环,检查传入构造函数的对象中是否存在字符串,如果存在,则将相应索引的bool设置为true,然后使用
control = new Control[2] { txtRecordDelimeter, txtFieldDelimeter };
name = new string[2] { "Record Delimiter", "Field Delimiter" };
exists = new bool[2] { false, false };
…本质上,我想创建一个循环,检查传入构造函数的对象中是否存在字符串,如果存在,则将相应索引的bool设置为true,然后使用新值对相应控件进行ammend
最初我有一堆if语句和重复的代码,所以我想用for循环把它们删掉
但是,例如,当我尝试引用控件[0]时,无论该控件是文本框还是组合框等,我从IntelliSense获得的都是相同的列表
我猜我在这里遗漏了一些简单的东西,比如不引用控件本身的实例,但如果有人能解释我做错了什么,或者提出更好的方法来实现这一点,我将不胜感激
谢谢:您的
控件[]
数组包含控件
对象,而不是文本框
等。您必须强制转换每个特定对象才能使用其他属性。您可以尝试以下方法:
if(Control[i] is TextBox) (Control[i] as TextBox).Text = "Yeah, it's text box!";
if(Control[i] is CheckBox) (Control[i] as CheckBox).Checked = true;
您的
控件[]
数组包含控件
对象,而不是文本框
等。您必须强制转换每个特定对象才能使用其他属性。您可以尝试以下方法:
if(Control[i] is TextBox) (Control[i] as TextBox).Text = "Yeah, it's text box!";
if(Control[i] is CheckBox) (Control[i] as CheckBox).Checked = true;
您从intellisense获得相同的列表,因为数组中的所有元素都是控件类型。您需要明确地将控件强制转换为(TextBox)或(ComboBox) 谎言如下:
foreach(Control ctrl in control)
{
TextoBox tbx = ctrl as TextBox;
if(tbx != null)
{
//do processing
continue;
}
ComboBox cbx = ctrl as ComboBox;
if(cbx != null)
{
//do processing
continue;
}
//and so on
}
您从intellisense获得相同的列表,因为数组中的所有元素都是控件类型。您需要明确地将控件强制转换为(TextBox)或(ComboBox) 谎言如下:
foreach(Control ctrl in control)
{
TextoBox tbx = ctrl as TextBox;
if(tbx != null)
{
//do processing
continue;
}
ComboBox cbx = ctrl as ComboBox;
if(cbx != null)
{
//do processing
continue;
}
//and so on
}
我想你的意思是这样的:
for(int i = 0; i < control.Length; i++)
{
TextBox textBox = control[i] as TextBox;
if(textBox != null)
{
if(textBox.Text == name[i])
{
exists[i] = true;
continue;
}
}
}
for(int i=0;i
我想你的意思是这样的:
for(int i = 0; i < control.Length; i++)
{
TextBox textBox = control[i] as TextBox;
if(textBox != null)
{
if(textBox.Text == name[i])
{
exists[i] = true;
continue;
}
}
}
for(int i=0;i
hey:]您从intellisense获得相同的列表,因为您看到的是控件,而不是文本框(或其他)hey:]您从intellisense获得相同的列表,因为您看到的是控件,而不是文本框(或其他),这样做是不可能的:txtcontrol=new Control[2]{(文本框)txtRecordDelimeter,(组合框)cboSendEPC};然后执行:if控件[0].GetType==TextBox{}等?是否不可能执行以下操作:txtcontrol=new控件[2]{(TextBox)txtRecordDelimeter,(ComboBox)cboSendEPC};然后执行:if控件[0]。GetType==TextBox{}等?