假设我有一个包含这些值的ComboBox:
Black
Red
Blue
我目前已选择Red
。如果用户然后点击退格并点击进入,我将捕获ComboBox的KeyDown
事件。
在这种情况下,我想从ComboBox中的项目列表中删除Red。
但是,因为在调用KeyDown
时,ComboBox的文本为空,所以SelectedIndex
为-1。
目前我的解决方法如下:
private void myComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
currentMyComboBoxIndex = myComboBox.FindStringExact(myComboBox.Text);
}
哪个有效..但我只是想知道是否有更好的方法。看起来这种方式可能会以某种方式破坏,看起来有点混乱。是否无法获取ComboBox的当前索引而无需使用成员变量跟踪它并在索引更改时更新它?
谢谢。
答案 0 :(得分:8)
你做的方式很好。您必须将所选索引保留在内存中,因为它在删除文本时返回-1作为SelectedIndex。你也可以用这种方式获取索引。
private void myComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
currentMyComboBoxIndex = myComboBox.SelectedIndex;
}
答案 1 :(得分:2)
您可以使用以下代码将组合框的选定项目作为对象:
ComboBox comboBox = new ComboBox();
// Initialize combo box
comboBox.Items.Add("Black");
comboBox.Items.Add("Red");
comboBox.Items.Add("Blue");
// Get selected one
string current = (string)comboBox.SelectedItem;
此外,可以使用以下代码行之一轻松删除所选项目:
// By item
comboBox.Items.Remove(comboBox.SelectedItem);
// By Index
comboBox.Items.RemoveAt(comboBox.SelectedIndex);
答案 2 :(得分:0)
没有内置函数来获取给定值的索引,但您可以通过此函数找到索引。
<强>用法强>:
int cmbindex = CmbIdxFindByValue("YourValue", cmbYourComboBox);
<强>功能强>:
private int CmbIdxFindByValue(string text, ComboBox cmbCd)
{
int c = 0; ;
DataTable dtx = (DataTable)cmbCd.DataSource;
if (dtx != null)
{
foreach (DataRow dx in dtx.Rows)
{
if (dx[cmbCd.ValueMember.ToString()].ToString() == text)
return c;
c++;
}
return -1;
}else
return -1;
}