2017-03-17 54 views
2

我是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置于ComboBoxCODETextBox - 未显示为不相关)。从ComboBox下拉列表中选择项目时出现问题。当我选择项目时,而不是在ComboBox中显示NAME,而是显示NAME | CODE

编辑:在模型中,属性设置正确,我通过打印它的值来确认。因此,问题仅与在ComboBox中显示正确的值有关。

+0

试图了解你的需求。你是否曾希望用户在组合框中看到CODE?如果不是为什么不为** **代码使用ComboBox属性* DisplayMember *而为**代码**使用* ValueMember? –

+0

是的,我希望它被显示,所以用户可以区分不同的项目。而且,当用户选择一个项目时,一条信息会转到组合框,另一条转到文本框。 – Fejs

+0

什么触发** nameChanged()**? –

回答

1

试试这个:

private void comboGoodsName_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // if combobox has selected item then continue 
    if (comboGoodsName.SelectedIndex > -1) 
    { 
     // split the selecteditem text on the pipe into a string array then pull the first element in the array i.e. NAME 
     string nameOnly = comboGoodsName.GetItemText(this.comboGoodsName.SelectedItem).Split('|')[0]; 

     // handing off the reset of the combobox selected value to a delegate method - using methodinvoker on the forms main thread is an efficient to do this 
     // see https://msdn.microsoft.com/en-us/library/system.windows.forms.methodinvoker(v=vs.110).aspx 
     this.BeginInvoke((MethodInvoker)delegate { this.comboGoodsName.Text = nameOnly; }); 
    }  
} 
+0

因为我是新手,你能解释一下这是干什么的吗?顺便说一句,它现在正在按预期工作。 – Fejs

+0

增加了对代码的评论 - 希望有所帮助! –

相关问题