Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#控件数组_C# - Fatal编程技术网

C#控件数组

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,然后使用

基本上我有3个不同类型的数组:

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{}等?