2011-12-30 94 views
0

好的,所以我有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 
    } 
} 

我没有得到任何跨线程issuses,但由于某种原因,每次我试图从组合框获得任何类型的值,它总是空或空字符串。我已经试过:

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框架4.0

如果任何人都可以对这个有何启示,这将不胜感激。我在这个上拉我的头发。 :)

+0

'公共Form1类:form1.form2' - 什么? Form1不必与form2相关,它只需要对form2的引用,以便它可以访问组合框。 – 2011-12-30 18:08:14

+0

'public class form1:form1.form2'是什么意思? 'form1'如何从'form1.form2'继承? “你在form2上创建了一个继承form1的新类,你是什么意思。”你如何创建一个“在表单上”的课程?你所展示的代码是'form1'还是'form2'的一部分?而且,“combobox”的形式是什么?我很抱歉,但我完全不明白你在这里做什么。 – comecme 2011-12-30 18:46:28

+0

对不起。我真的搞砸了第一部分。我会编辑我的问题来反映。 – cursedfungus 2012-01-02 04:36:46

回答

1

我核实,下面的代码将工作:

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

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

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; 
     ... 
    } 
} 
+1

为什么你在名为'SelectedValue'的属性中返回'SelectedItem'? – comecme 2011-12-30 18:49:41

+0

@comecme:纠正,thx .. – Tigran 2011-12-30 20:39:58

相关问题