如何更改comboBox.Text一个comboBox.SelectedIndexChanged事件

2019-09-17 02:27发布

代码示例:

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

我的问题是对ComboBox文本总是显示所选指标的字符串值,而不是新的字符串。 是一个解决方法吗?

Answer 1:

此代码应该工作...

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));
}

希望它能帮助... :)



Answer 2:

您应该重新设定SelectedIndex设置时属性设置为-1 Text属性。



Answer 3:

移动你改变代码组合框事件之外:

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


Answer 4:

或许,这将有助于如果你能解释一下你正在试图做什么。 我发现SelectionChangeCommitted事件是相当多有用的目的,像你描述的不是什么的SelectedIndexChanged。 除此之外,它可以从SelectionChangeCommitted再次更改所选择的指数(例如,如果用户的选择是无效的)。 此外,改变从代码火灾指数再次的SelectedIndexChanged,而SelectionChangeCommitted响应用户操作,仅启动。



Answer 5:

组合框将绑定到你指定的任何对象集合,而不是简单地为您在DropDownLists找到一个文本/值组合。

什么你需要做的就是进入了ComboBox的Items集合,发现无论财产已被绑定到文本字段在ComboBox本身,然后将数据绑定会自动与新的项目来刷新自身要更新的项目,更新。

但是,我不知道你真正想要修改底层数据对象的约束,所以你可能要创建一个哈希表或者一些其他集合作为参考绑定到你的组合框,而不是100%。



Answer 6:

你应该使用:

BeginInvoke的(新的行动((文本)=> comboBox.Text =文本), “新的文本设置”);



Answer 7:

虽然这是在VB中,这个博客帖子上的改变组合框的文本SelectedIndexChanged事件进入更详细一点,为什么你需要使用一个委托作为一种变通方法来改变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


Answer 8:

// 100%的工作

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


Answer 9:

我寻找了同一个问题的解决方案。 但是,处理格式事件解决这个问题:

cbWatchPath.Format += new System.Windows.Forms.ListControlConvertEventHandler(this.cbWatchPath_Format);

private void cbWatchPath_Format(object sender, ListControlConvertEventArgs e)
    {
        e.Value = "Your text here";
    }


文章来源: How do I Change comboBox.Text inside a comboBox.SelectedIndexChanged event?