如何更改comboBox.SelectedIndexChanged事件中的comboBox.Text?

时间:2009-06-26 15:29:31

标签: c# combobox selectedindexchanged

代码示例:

private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    if(some condition)
    {
        comboBox.Text = "new string"
    }
}

我的问题是comboBox文本总是显示所选索引的字符串值而不是新字符串。绕道而行吗?

8 个答案:

答案 0 :(得分:14)

此代码应该有效......

public Form1()
{
    InitializeComponent();

    comboBox1.Items.AddRange(new String[] { "Item1", "Item2", "Item3" });
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    String text = "You selected: " + comboBox1.Text;

    BeginInvoke(new Action(() => comboBox1.Text = text));
}

希望它有所帮助...... :)

答案 1 :(得分:2)

设置SelectedIndex属性时,应将Text属性重置为-1。

答案 2 :(得分:2)

将您的更改代码移到combobox事件之外:

if(some condition)
{
    BeginInvoke(new Action(() => comboBox.Text = "new string"));
}

答案 3 :(得分:1)

如果你能准确解释你想要做什么,也许会有所帮助。我发现SelectionChangeCommitted事件比你描述的目的更有用,而不是SelectedIndexChanged。除此之外,还可以从SelectionChangeCommitted再次更改所选索引(例如,如果用户的选择无效)。此外,从代码更改索引会再次触发SelectedIndexChanged,而SelectionChangeCommitted仅在响应用户操作时触发。

答案 4 :(得分:0)

ComboBox将绑定到您指定的任何对象集合,而不是简单地拥有您在DropDownLists中找到的文本/值组合。

你需要做的是进入ComboBox的Items集合,找到你想要更新的项目,更新你绑定到ComboBox本身的Text字段的任何属性,然后数据绑定应该自动刷新自己新项目。

但是,我并不是100%确定你真的想要修改被绑定的底层数据对象,所以你可能想要创建一个HashTable或其他一些集合作为绑定到你的ComboBox的引用。

答案 5 :(得分:0)

你应该使用:

  

BeginInvoke(new Action((text)=> comboBox.Text = text),“要设置的新文字”);

答案 6 :(得分:0)

虽然它是在VB中,但Changing Combobox Text in the SelectedIndexChanged Event上的这篇博文详细介绍了为什么需要使用委托作为变通方法来更改ComoboBox文本。简而言之,.NET试图阻止可能发生的无限循环,因为当发生对Text属性的更改时,.NET将尝试将该新值与当前项匹配并为您更改索引,从而触发SelectedIndexChanged事件试。

来到这里寻找代表的VB实现的人可以参考下面的代码

'Declares a delegate sub that takes no parameters
Delegate Sub ComboDelegate()

'Loads form and controls
Private Sub LoadForm(sender As System.Object, e As System.EventArgs) _
    Handles MyBase.Load
    ComboBox1.Items.Add("This is okay")
    ComboBox1.Items.Add("This is NOT okay")
    ResetComboBox()
End Sub

'Handles Selected Index Changed Event for combo Box
Private Sub ComboBoxSelectionChanged(sender As System.Object, e As System.EventArgs) _
    Handles ComboBox1.SelectedIndexChanged
    'if option 2 selected, reset control back to original
    If ComboBox1.SelectedIndex = 1 Then
        BeginInvoke(New ComboDelegate(AddressOf ResetComboBox))
    End If

End Sub

'Exits out of ComboBox selection and displays prompt text 
Private Sub ResetComboBox()
    With ComboBox1
        .SelectedIndex = -1
        .Text = "Select an option"
        .Focus()
    End With
End Sub

答案 7 :(得分:0)

// 100%工作

private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
      BeginInvoke(new Action(() => ComboBox1.Text = "Cool!");
}