从组合框中获取所选项或输入的文本的最佳方法。

4
我有一个下拉框,里面预先填充了很多可能的选择项。但是我还希望用户有手动输入不是其中之一的文本的选项。因此,我将DropDownStyle设置为DropDown,这样就可以实现这一点。
我的问题是,编写代码以返回用户选择或手动输入的值最有效(且正确)的方法是什么?
目前,我正在使用以下代码。但对于这样简单的任务来说,它似乎有些啰嗦。有没有更好(更短)的方式来获得相同的结果?
        string Code1 = comboBox_Code1.GetItemText(comboBox_Code1.SelectedItem);
        if (Code1.Length == 0) Code1 = comboBox_Code1.Text;

当用户在字段中输入信息时,SelectedIndex的值是多少?如果它是-1,您可以始终使用它来检查是否正在提取所选值还是用户输入的。 - Calvin
是的,当文本手动输入时它是-1。这是个好主意。但我不确定如何/是否可以将其用于更短的解决方案。 - Joe Gayetty
如果你正在使用Windows Forms的ComboBox,那么你可以使用comboBox_Code1.Text来获取用户输入或选择的文本。 - Siva Gopal
@SivaGopal 这真的那么简单吗?我测试了你的解决方案,它似乎起作用了。请将您的建议发布为答案,我将接受它。 - Joe Gayetty
如果它可以完美地运行并且需要更少的努力,那么它应该很容易 :) - Siva Gopal
3个回答

7

Siva Gopal在评论中发布了答案。这是迄今为止提出的最短和最简单的解决方案。我已经测试过它,当用户选择预填充值时它可以工作,而且当用户手动输入值时它也可以工作!

string Code1 = comboBox_Code1.Text;

0
comboBox_Code1.SelectedItem == null ? comboBox_Code1.Text : comboBox_Code1.SelectedItem.ToString()

代码已经测试过并且可以正常工作 ;-)


以上代码如果手动输入值会产生System.NullReferenceException异常,但对于选择的项,它是有效的。 - Joe Gayetty

0
您可以使用SelectedIndex建议与立即if建议结合使用来生成以下内容。我想知道如果用户根本没有输入值,您会怎么做。这似乎是一个疏忽。
return (comboBox_Code1.SelectedIndex == -1 
         ? comboBox_Code1.Text 
         : comboBox_Code1.SelectedItem.ToString());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接