【问题标题】:Get the combobox text in C#在 C# 中获取组合框文本
【发布时间】:2008-11-24 19:53:20
【问题描述】:

我用枚举中的值填充了一个组合框。

现在组合框是文本对吗?所以我使用了一个getter和一个setter。我在阅读文本时遇到问题。

代码如下:

public BookType type
{
    get
    {
        return (BookType)Enum.Parse(typeof(BookType), this.typeComboBox.Text);
    }
    set
    {
        this.typeComboBox.Text = value.ToString();
    }
}

由于某种原因,当我在组合框中选择一个项目时,this.typeComboBox.Text 总是返回一个空字符串。

有人看到我做错了吗?

编辑:我得出的结论是问题出在时间上。 我召唤文本的时间点确实是在我更改组合框之后,但仍然在该值被解析为值之前。 现在以不同的方式解决了问题,感谢所有的想法。

【问题讨论】:

  • 一个问题是使用 Text 属性。使用 SelectedItem 属性,或者在最坏的情况下使用 SelectedText 属性。

标签: c# .net winforms combobox


【解决方案1】:

试试这个。这对我有用。

string selectedText = this.ComboBox.GetItemText(this.ComboBox.SelectedItem);

GetItemText 方法分析项目并返回绑定到该项目的文本。

【讨论】:

    【解决方案2】:

    将组合框的DropDownStyle 设置为DropDownList。这将确保只能选择列表中已有的元素(无需检查文本是否实际上是有效值)。 然后,如果您使用Enum.GetValues(typeof(BookType)) 填充组合框,那么typeComboBox.SelectedItem 属性将是BookType 的值。所以你可以在属性 getter 和 setter 中使用它。

    所以总结一下。只要您使用 DropDownList 样式,就不必将组合框绑定到文本值列表。使用 SelectedItem 属性来获取所需类型的项目,而不是检查 Text 属性。

    编辑:您可能需要检查 SelectedItem 属性是否为空

    【讨论】:

      【解决方案3】:

      组合框从索引 -1 开始,它没有文本,因此是一个空字符串:""

      然后我将索引更改为我需要的 BookType,然后我得到错误的输出...

      【讨论】:

        【解决方案4】:

        你应该试试 this.typeComboBox.SelectedItem.ToString()

        【讨论】:

        • 这会引发 NullReferenceException
        【解决方案5】:

        您是否尝试过使用this.typeComboBox.SelectedText 而不是typeComboBox.Text

        【讨论】:

          【解决方案6】:

          我刚刚创建了一个简单的 Windows 窗体,一切正常。这是代码。

          public enum Test
          {
              One, Two, Three
          }
          
          public partial class Form1 : Form
          {
              public Form1()
              {
                  InitializeComponent();
          
                  this.comboBox1.DataSource = Enum.GetNames(typeof(Test));
              }
          
              public Test Test
              {
                  get 
                  {
                      return (Test)Enum.Parse(typeof(Test), this.comboBox1.Text);
                  }
                  set
                  {
                      this.comboBox1.Text = value.ToString();
                  }
              }
          
              private void button1_Click(object sender, EventArgs e)
              {
                  MessageBox.Show(this.Test.ToString());
          
                  this.Test = Test.Two;
          
                  MessageBox.Show(this.Test.ToString());
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-10-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-25
            • 1970-01-01
            • 2014-06-20
            • 1970-01-01
            相关资源
            最近更新 更多