如何从另一种形式获得组合框的选定项目?

时间:2011-12-30 17:28:11

标签: c# winforms c#-4.0 combobox selecteditem

好的,我有form1和form2。 Form1有一个form2需要访问的组合框。在form2上,我创建了一个继承form1的新类。像这样。

public partial class form2 : Form
{
   public form2()
   {
      InitializeComponent();
      //from here I create tasks that reference the code in the newClass class
   }
}

public class newClass : projectname.form1
{
   public newClass()
   {
      //methods I access from from the above code
   }
}

我没有得到任何跨线程的问题,但由于某些原因,每当我尝试从该组合框中获取任何类型的值时,它总是为空或者是一个空字符串。我试过了:

If (combobox.selecteditem == @"C:\")
{
    //do something
}

If (combobox.text == @"C:\")
{
    //do something
}

If (combobox.selectedindex == combobox.items.indexof(@"C:\")
{
    //do something
}

If (combobox.selecteditem == combobox.findstringexact(@"C:\")
{
    //do something
}

通常,我只会使用:(在我的情况下,由于某种原因它是-1)

If (combobox.selectedindex == -1)
{
    //do something
}

这很好用,但组合框中的项目并不总是一样,所以你明白为什么这不是一个准确的方法。我一直在阅读无数的帖子,看起来好像是

combobox.selecteditem
考虑到我正在使用DropDownList类型的组合框,

是我的最佳选择。当我使用它时没有任何反应,除了它给我一个警告,将(字符串)放在'='符号的左侧。像这样:

If (combobox.selecteditem == @"C:\")
{
    //gives warning that I need (string) on left side of '='
}

如果我这样做,没有警告,但仍然没有。

If ((string)combobox.selecteditem == @"C:\")
{
    //do something
}

在form1_load上填充了这个组合框:

        string[] combobox = Directory.GetLogicalDrives();
        foreach (string box5 in combobox)
        {
            combobox.Items.Add(box5);
        }

我正在使用C#,Windows窗体应用程序,.Net Framework 4.0

如果有人能对此有所了解,我将不胜感激。我正在把这头发拉出来。 :)

2 个答案:

答案 0 :(得分:1)

我已经确认以下代码可以使用:

        if ((string)comboBox1.SelectedItem == @"C:\")
        {
            MessageBox.Show(@"C:\");
        }

我的猜测是你引用了错误的组合框。

答案 1 :(得分:1)

为了能够访问内部控制值,不要真正理解为什么需要继承这里的东西。

应该就够了,只需做这样的事情:

public class Form1 : Form 
{
    ComboBox _combo = new ComboBox(); 

    public string ComboSelectedItem
    {
       get 
       {
          if(combo == null || combo.SelectedItem == null) 
              return null;

          return combo.SelectedItem as string;
       }
    }
}

public class Form2 : Form 
{   

    Form1 _form1Object = null;
    public Form2(Form1 form1)
    {
       _form1Object = form1;
    }


    public void DoSomethingUsingComboItemValueFromForm1()
    {
        .....
        string comboSelectedValueOnForm1 = _form1Object.ComboSelectedItem;
        ...
    }
}