【发布时间】:2021-05-27 05:28:30
【问题描述】:
问题
对于 WinForms 应用程序,我需要显示一个带有 DisplayMember 和 ValueMember 的 ComboBox。 完成
当用户从 ComboBox 中选择时,存储在 ValueMember 中的值(在本例中为小数)应捕获到另一个文本框。 完成
但我还需要有一个“空”的第一个值,这样我就可以知道什么时候没有选定的值。这就是问题所在。
所以这里有一个代码 sn-p,出于隐私原因而通用。
Dictionary<string, string> Dogs = new Dictionary<string, string>();
Dog.Add("-", " ");
Dog.Add("1", "German Shepard");
Dog.Add("2", "Pomeranian");
Dog.Add("3", "Terrier");
selDogs.DataSource = new BindingSource(Dogs, null)
seldogs.DisplayMember = "Value";
selDogs.ValueMember = "Key";
现在,如果在以后的代码中我要去
string myDog = selDogs.SelectedValue.ToString()
测试时,如果我选择德国牧羊犬,我会得到 1。这可行。
问题是,如果我需要进行数学运算,它不起作用。即使我尝试直接转换为小数或整数,它也会爆炸。
深入挖掘,这是因为 在用户选择了任何东西之前,SelectedValue 返回的似乎是对象的字符串表示形式,即 "[-, 0]"。这意味着我无法编写任何数学程序,因为验证失败。
然后我添加了一个 if/then 来检查这种情况以排除它,这似乎有效。
我的问题是为什么我必须这样做,以及如何用简单的代码完成我想要的事情。
- 向用户显示一个带有显示值的组合框
- ComboBox 将以空值开头,不应执行任何操作
- 一旦用户更改为显示值,它应该获取 ValueMember 并对其进行处理 - 在这种情况下支持数学 - 但它不应该仅仅因为用户访问空行而轰炸或返回错误值李>
还有很多其他内容,但我认为其余部分是通过我的 if/then 调整来解决的,但我想了解 为什么 它返回数组的字符串表示形式以及为什么我可以'不仅仅是直接访问 ValueMember,即 selDogs.SelectedValue.GetValueAsString 或其他简单的东西。
【问题讨论】:
-
什么类型的组合框? HTML?表格? WPF?这会影响答案。
-
WinForms - 抱歉
-
空字符串为什么不用0或者负数呢?所以你应该只检查 value 是否
-
这就是我所做的——我已经设置了 0,这就是它在字符串表示中显示的原因,如果我将下拉菜单从该行更改回来,它确实会正确返回 0,所以我知道设置正确。只是不是在表单第一次加载时。
-
@ReVeLaTeD: "SelectedValue 返回似乎是对象的字符串表示形式" 您可能处于代码中尚未运行
selDogs.ValueMember = "Key";的位置。例如,当您设置DataSource时,您的事件处理程序可能会提前两行触发。解决此问题的一种方法是在所有设置完成后附加您的事件处理程序,而不是在InitializeComponent()中。