【问题标题】:C# show property in textbox depending on combobox selecteditemC# 在文本框中显示属性,具体取决于组合框 selecteditem
【发布时间】:2013-11-11 17:34:02
【问题描述】:

我可能有一个简单的问题,但我想问一下如何将文本框 Text 属性绑定到组合框 SelectedItem 属性的可能性。我通过组合框 SelectedItemChanged 事件来完成并设置如下文本:

if(cmbMeasuring.SelectedItem != null)
    txtMethod.Text = ((ListBoxItem)cmbMeasuring.SelectedItem).Value;

我有一个 ListBoxItem 类,它包含 2 个字符串“名称”和“值”。然后我为组合框创建了 BindingList:

private BindingList<ListBoxItem> lst;

然后在构造函数中设置组合框数据源:

cmbMeasuring.DataSource = lst;
    cmbMeasuring.DisplayMember = "Name";

这很好用,但我不知道它是否是最好的方法。但是当我更改文本框内容时会出现问题。我通过文本框离开事件来做到这一点:

private void txtMethod_Leave(object sender, EventArgs e)
{
    if (cmbMeasuring.SelectedItem != null)
        ((ListBoxItem)cmbMeasuring.SelectedItem).Value = txtMethod.Text;
}

如果文本框失去焦点,我会分配项目值。但是我还有一个菜单条来保存输入,当我直接单击它时,不会发生此事件,因此不会保存最后一个输入。我知道这可以通过文本框 TextChanged 事件来完成,但它会消耗大量时间。

您有更好的解决方案还是可以?我没有使用 WPF。

谢谢。

【问题讨论】:

    标签: c# combobox textbox


    【解决方案1】:

    如果您有 MenuStrip 项目的 Click 事件,您可以执行以下操作

    MyMenuStripItem.Focus();
    

    这应该会导致MenuStrip 项目获得焦点,从而导致TextBox 失去焦点。

    【讨论】:

    • 是的,我就是这样做的。但是告诉我是否有可能将文本框文本直接绑定到组合框 SelectedItem 可能作为 propertynotifychange。我的意思是是否有其他更好的方法。
    • 我认为您所指的是 WPF 方面,而您声明您没有使用它。
    【解决方案2】:

    尝试在表单的构造函数中对 TextBox 进行数据绑定:

    txtMethod.DataBindings.Add("Text", lst, "Value", 
                               false, DataSourceUpdateMode.OnPropertyChanged);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 2011-08-21
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多