C# C Winforms:根据所选项目在组合框中设置文本

C# C Winforms:根据所选项目在组合框中设置文本,c#,winforms,combobox,C#,Winforms,Combobox,我是c语言的新手,现在正在学习如何基于一些表单动作触发事件 这是观点的一部分: private void comboGoodsName_TextChanged(object sender, EventArgs e) { controller.selectName(comboGoodsName.Text); } public void nameChanged(object sender, MeasurementEventArgs e) { comboGoodsName.TextC

我是c语言的新手,现在正在学习如何基于一些表单动作触发事件

这是观点的一部分:

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中输入一些文本并将其输入时,comboGoodsName\u TextChanged被触发,这反过来调用selectName,selectName设置模型的属性,这反过来引发一个由nameChanged观察到的事件。这很好,正如预期的那样,将名称放入组合框,将代码放入文本框-不显示为不相关。当我从组合框下拉列表中选择项时,问题出现。当我选择项目时,我看到的不是组合框中的名称,而是名称|代码

编辑:在模型中,属性设置正确,我通过打印其值来确认。所以,这个问题只与在组合框中显示正确的值有关。

试试这个:

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; });
    }      
}

试图了解你的需求。您是否希望用户在组合框中看到代码?如果不是,为什么不使用组合框属性DisplayMember作为NAME,ValueMember作为CODE?是的,我希望显示它,以便用户能够区分不同的项目。而且,当用户选择一个项目时,一条信息会进入combobox,另一条信息会进入textbox。什么触发了nameChanged?当使用自定义EventHandler设置name属性时,它会在模型中触发。既然我是新手,你能解释一下这是怎么做的吗?顺便说一句,它正在按预期工作。