【发布时间】:2011-10-12 23:05:33
【问题描述】:
我有一个可编辑的 ComboBox,对 Text 属性进行了验证,以确保手动输入的信息有效。
编辑:我要做的就是用所选内容的ValueMember 而不是DisplayMember 填充.Text 属性
我还有.Items 填充了具有DisplayMember 和ValueMember 集的有效条目。
我的DisplayMember 是数据的标题,ValueMember 是数据本身。
所以Items 可能是:
(DisplayMember, ValueMember)
"Foo - 1ab2" , "1ab2"
"Bar - 3cd4" , "3cd4"
我对文本进行了验证,它也可以验证手动用户输入,例如“5ef6”
我遇到的问题是,如果用户从组合框中选择一个项目,它会使用 DisplayMember 属性(例如:“Foo - 1ab2”)填充文本字段,这将无法通过验证。
我尝试在三个相关的组合框事件中手动设置.Text 属性和SelectedValue 或SelectedItem.Value,但无济于事。
我希望 ComboBox 的 .Text 在选中时填充项目的 .ValueMember 而不是 .DisplayMember
编辑:我无法通过尝试从标题中推断值来进行验证。我将Text 发送到要验证的服务。
void FillMyCombo
{
KeyValuePair<string, string> listValue1 = new KeyValuePair<string, string>("Foo - 1ab2" , "1ab2")
KeyValuePair<string, string> listValue2 = new KeyValuePair<string, string>("Bar - 3cd4" , "3cd4")
myCombo.Items.Add(listValue1);
myCombo.Items.Add(listValue2);
myCombo.DisplayMember = "Key";
myCombo.ValueMember = "Value";
}
...
void myCombo_TextUpdated
{
if(!myValidationService.Validate(myCombo.Text))
{
do error stuff
}
}
用户可以手动输入诸如“5ef6”之类的内容,这将通过验证。
但是当他们从列表中选择一个项目而不是手动输入它时,.Text 属性会被 caption 而不是 value 填充......所以它会包含“Foo - 1ab2”并且验证失败。
编辑:回应发布的答案:我无法更改验证方法以“推断”标题中的值。我无法控制该服务。我所追求的只是显示的值
编辑:假设用户从下拉列表中选择“Foo - 1ab2”,我希望框中的文本显示“1ab2”
编辑:我也尝试在代码中设置.Text 属性,但我似乎无法使其在任何 ComboBox 事件中工作。如果有人可以回答如何在选择事件上以编程方式设置 .Text 属性(并使其提交!),他们也会回答这个问题。
【问题讨论】:
-
您正在放置 标题 以供选择和编辑。由于似乎存在关系,您可以修复验证。
-
@HenkHolterman 我无法验证标题,我只能验证值。但是 ComboBox 使用标题而不是值填充
Text属性。这就是我遇到的问题。 -
您的设置不允许创建或编辑值部分。为什么要验证?
-
@HenkHolterman 这是一个可编辑的组合框。除了列表中的项目外,用户还可以手动输入自己的值。这是标准组合框行为
.DropDownStyle = DropDown,因此必须验证手动输入。 -
更好地展示一些关于 Value 和 Display 类型和绑定的代码。我迷路了。
标签: c# vb.net winforms validation combobox