【问题标题】:C# Updating Selected ComboBox Item Name from TextboxC# 从文本框中更新选定的组合框项目名称
【发布时间】:2017-05-22 14:28:02
【问题描述】:

我想通过更改文本框名称来更新组合框 selectedItem 名称。在不丢失组合框价值的情况下,我该如何实现?

private void addItem_Click(object sender, EventArgs e)
{
    nameItem.Enabled = true;
    nameItem.Text = "Item " + counter.ToString();
    nameItem.Focus();
    comboBox1.Items.Add(nameItem.Text);
    comboBox1.SelectedItem = nameItem.Text;
    counter++;

}

private void nameItem_TextChanged(object sender, EventArgs e)
{
    ????????
}

【问题讨论】:

  • 最好是更新源,然后重新绑定组合框...

标签: c# winforms combobox


【解决方案1】:

这个很简单,也很有效,但可能有点长。

这里我有一个组合框、textBox1 和用于为组合框添加值的按钮, 和 textBox2 用于编辑所选项目。

    string[] items = new string[99];
    int a = 0;
    int i = 0;
    private void button1_Click(object sender, EventArgs e)
    {
        items[i] = textBox1.Text;
        i++;
        comboBox1.Items.Clear();
        for (int n = 0; n < items.Length; n++) {
            if(items[n] != null) comboBox1.Items.Add(items[n]);
        }
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        a = comboBox1.SelectedIndex;
        MessageBox.Show(a.ToString());
    }

    private void textBox2_TextChanged(object sender, EventArgs e)
    {
        items[a] = textBox2.Text;
        comboBox1.Items.Clear();
        for (int n = 0; n < items.Length; n++)
        {
            if (items[n] != null) comboBox1.Items.Add(items[n]);
        }
    }

它是如何工作的:我们有一个项目数组和两个整数变量。一个用于添加项目的计数,另一个用于选定的项目索引 按钮 1 只是添加新项目,清除所有项目并再次更新 em 当你编辑 textbox2 的文本时,它会从 'items' 数组中更新项目,然后更新组合框,ez

【讨论】:

    【解决方案2】:

    编辑:没有看到 winform 标记 - 这不起作用 - 万一遇到任何 ASP 人员,将离开。

     public void TextBox1_OnTextChanged(object sender, EventArgs e)
            {
                ddl.DataSource = null;
                ddl.DataBind();
                ddl.DataTextField = "Text";
                ddl.DataValueField = "Value";
                ddl.DataSource = (from ListItem b in ddl.Items
                                 select b.Selected ? new ListItem(TextBox1.Text, b.Value) : b).ToList();
                ddl.DataBind();
            }
    

    ddl 是下拉框的名称 Textbox1 是文本框的名称。

    这将更改所选项目的名称。如果您需要更多代码,请在 cmets 中告诉我。

    【讨论】:

      【解决方案3】:

      感谢您的宝贵时间和友好的回答。 我解决了问题,如下所示;

       private void addItem_Click(object sender, EventArgs e)
          {
              nameItem.Enabled = true;
              comboBox1.Items.Add("Item " + counter.ToString());
              comboBox1.SelectedItem = "Item " + counter.ToString();
              nameMacro.Text = "Item " + counter.ToString();
              //comboBox1.SelectedItem = nameItem.Text;
              //nameItem.Focus();
              // Ad degistirme -> comboBox1.Items[comboBox1.FindStringExact("string value")] = "New Value";
              counter++;
          }
      
          private void textBox1_TextChanged(object sender, EventArgs e)
          {
              comboBox1.Items[comboBox1.SelectedIndex] = nameItem.Text;
          }
      

      【讨论】:

        【解决方案4】:

        最好先更新源再绑定。 也试试这个

        private void nameItem_TextChanged(object sender, EventArgs e)
        {
          string value = nameItem.Text;
          var list = (List<KeyValuePair<String, String>>)comboBox1.DataSource;
          list.Add(new KeyValuePair<string, string>(value,value));
          comboBox1.DataSource = list;
          comboBox1.DataBind();
        }
        

        【讨论】:

        • WinForms 不使用 DataBind。
        猜你喜欢
        • 2016-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多