如何用字符串Array的行填充ComboBoxes?

时间:2012-06-28 14:40:34

标签: c# arrays winforms combobox

拜托,这里有什么问题

abc = labGuns.Text;  // multiline label
string[] arr = Regex.Split(abc, "\r\n");
x = 0; 
foreach (string line in arr)
{
    MessageBox.Show(line); //works fine - shows each line of label
    x = x + 1;
    string abc = "cbGuns" + x.ToString();
    MessageBox.Show(abc); //works fine - shows "cbGuns1", "cbGuns2"...
    foreach (Control c in panPrev.Controls)
    {
        if (c.Name == abc) // five combos named cbGuns1, cbGuns2...
        {
            c.Text = line; //doesn't work. No combo changes its text
        }
    }
}

如果我将最后一行更改为 - c.Text = "323" - 也没有任何反应 所以,错误显然是在代码末尾附近。

此代码也有效(作为测试):

foreach (Control c in panPrev.Controls)
{
if (c.Name == "cbGuns1")
{
c.Text = "323";
}
}

4 个答案:

答案 0 :(得分:2)

如果你的控件是组合的,并且你想设置'Text'属性而没有项目列表,那么你的组合应该有DropDownStyle = DropDown

答案 1 :(得分:1)

尝试将c转换为DropDownList

DropDownList ddl =(DropDownList) c;<br/>
ddl.Text ="your text"

答案 2 :(得分:1)

如果我理解正确,你想在Combobox上添加一行,而不是选择当前的一行,对吗?为此,您不要将Combobox的Text值设置为字符串,您需要将新的ComboboxItem添加到Combobox中,如下所示:

c.Items.Add(line);

而不是

c.Text = line;

让我知道这是否有效!

编辑: 好的,既然您正在尝试更改Combobox的所选项目,我只想写

c.SelectedItem = line;

答案 3 :(得分:1)

尝试将c.Text = line;替换为c.Items.Add(line);

但是,在添加多个项目时,

AddRange是首选,因此请尝试以下操作代替foreach循环:

foreach (Control c in panPrev.Controls)
{
    if (c.Name.StartsWith("cbGuns"))
    {
        c.Items.AddRange(arr);
    }
}