代码示例:
private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if(some condition)
{
comboBox.Text = "new string"
}
}
我的问题是comboBox文本总是显示所选索引的字符串值而不是新字符串。绕道而行吗?
答案 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!");
}