C# 如何在c语言中动态寻址对象#

C# 如何在c语言中动态寻址对象#,c#,winforms,C#,Winforms,我需要使用用户输入的内容建立一些搜索条件 string searchText1 = ""; string searchText2 = ""; string searchText3 = ""; searchText1 = scCB1.Text + op1.Text + cr1.Text; searchText2 = scCB2.Text + op2.Text + cr2.Text; searchText3 = scCB3.Text + op3.Text + cr3.Text; 其中scCB1、

我需要使用用户输入的内容建立一些搜索条件

string searchText1 = "";
string searchText2 = "";
string searchText3 = "";

searchText1 = scCB1.Text + op1.Text + cr1.Text;
searchText2 = scCB2.Text + op2.Text + cr2.Text;
searchText3 = scCB3.Text + op3.Text + cr3.Text;
其中scCB1、op1、cr1。。。是GUI上的组合框和文本字段

有没有一种方法可以使用循环来替换硬编码语句(它们看起来很笨拙)

(i=0;i<3;i++)的

{  
//searchText(i)=scCB(i).Text+op(i).Text+cr(i).Text)
}

作为编程新手,我知道如果我在GUI上只显示和构建一组字段,那么我就能够在代码中循环。但我很好奇如何动态地命名对象。提前感谢您的帮助

假设控件位于名为选项的
GroubBox
上:

string[] searchText = new string[3];
for(int i = 1; i<=3; i++)
   {
        searchText[i - 1] = options.Control["scCB" + i.Tostring()] +
                        options.Control["ops" + i.Tostring()] +
                        options.Control["cr" + i.Tostring()];
   }
string[]searchText=新字符串[3];

对于(int i=1;i我建议创建一个包含文本框和其他元素的数组,这样您就可以在循环中轻松引用它们:

TextBox[] boxes = {scCB1, scCB2, scCB3}; // do same for op1..3 and cr1..3
for (int i = 0; i < 3; i++)
{     
  string searchText = boxes[i].Text + ops[i].Text + cr[i].Text;
}
TextBox[]box={scCB1,scCB2,scCB3};//对op1..3和cr1..3执行相同的操作
对于(int i=0;i<3;i++)
{     
字符串搜索Text=box[i]。Text+ops[i]。Text+cr[i]。Text;
}

searchText
s也必须在一个集合中。请解释为什么要使用数组而不是
List
?@Guy,我建议使用数组而不是列表,因为我假设文本框的数量要确定,并且在运行时不会更改。如果您想在过程中的某个地方添加文本框,那么请使用List或者arrayList。@Guy:array/list之间的大部分争论都消失了,因为它们都实现了
IEnumerable
,共享了它们的大部分功能。从一个选项跳到另一个选项很容易,两个选项都不会锁定您。但是,由于OP需要索引方法,数组是解决方案。请注意,您可以为列表编制索引(
myList[i]
),但在关注索引元素检索时更习惯于引用数组。对否决我答案的家伙:请解释原因。没有人否决你的答案。
scCB(i)
你考虑过使用数组吗?语法基本上就是你想要的:
scCBArray[i]
您已经走上了正确的道路,只需使用一个数组或一个列表,而不是三个不同的变量。我不太清楚为什么这会被否决。这个问题很清楚,结构良好,并且显示了合理的用法和期望。虽然解决方案相当简单,但大多数开发人员在某些时候都会问自己这个问题为了子孙后代的利益,这是一个相关的问题。@HimBromBeere我编辑了我的答案,简单地从0循环到2更容易。@HimBromBeere在这里
options.Control[“scCB”+I.Tostring()]
控件名称从1开始。因此我们应该在我使用的地方使用
i-1
,或者在通过名称
选项获取控件时使用
i+1
。控件[“scCB”+(i+1).Tostring()]
TextBox[] boxes = {scCB1, scCB2, scCB3}; // do same for op1..3 and cr1..3
for (int i = 0; i < 3; i++)
{     
  string searchText = boxes[i].Text + ops[i].Text + cr[i].Text;
}