我是c#
的新手,现在我正在学习如何基于某些表单动作触发事件。C#Winforms:基于选定的项目在组合框中设置文本
这是视图部分:
private void comboGoodsName_TextChanged(object sender, EventArgs e)
{
controller.selectName(comboGoodsName.Text);
}
public void nameChanged(object sender, MeasurementEventArgs e)
{
comboGoodsName.TextChanged -= comboGoodsName_TextChanged;
comboGoodsName.Text = e.value;
comboGoodsName.TextChanged += comboGoodsName_TextChanged;
}
这是控制器的一部分:
public void selectName(string name)
{
model.Name = name.Split('|')[0].Trim();
if (name.Contains(" | "))
{
string code = name.Split('|')[1].Trim();
model.NameCode = code;
}
}
的情况如下:
我想有它的一些项ComboBox
(无关紧要的是什么)。项目是以下格式的名称和代码的组合:NAME | CODE
。当我在ComboBox
(键入它)中输入一些文本时,将触发comboGoodsName_TextChanged
,而该comboGoodsName_TextChanged
又调用selectName
,该值设置模型的属性,这反过来引发了nameChanged
观察到的事件。如预期的那样,此工作正常(将NAME
置于ComboBox
和CODE
至TextBox
- 未显示为不相关)。从ComboBox
下拉列表中选择项目时出现问题。当我选择项目时,而不是在ComboBox
中显示NAME
,而是显示NAME | CODE
。
编辑:在模型中,属性设置正确,我通过打印它的值来确认。因此,问题仅与在ComboBox
中显示正确的值有关。
试图了解你的需求。你是否曾希望用户在组合框中看到CODE?如果不是为什么不为** **代码使用ComboBox属性* DisplayMember *而为**代码**使用* ValueMember? –
是的,我希望它被显示,所以用户可以区分不同的项目。而且,当用户选择一个项目时,一条信息会转到组合框,另一条转到文本框。 – Fejs
什么触发** nameChanged()**? –