Как получить выбранный элемент комбинированного списка из другой формы? - PullRequest
0 голосов
/ 30 декабря 2011

Хорошо, у меня есть 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
}

Поле со списком заполняется в форме form__load:

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

Я использую C #, приложение Windows Form, .Net Framework 4.0

Если бы кто-нибудь мог пролить свет на это, это было бы очень ценно. Я тяну свои волосы на этом. :)

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

Не совсем понимаю, зачем вам нужно наследовать здесь что-то, чтобы иметь возможность доступа к значению внутреннего контроля.

Должно быть достаточно, вместо этого просто сделайте что-то вроде этого:

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 голос
/ 30 декабря 2011

Я убедился, что следующий код будет работать:

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

Я предполагаю, что вы ссылаетесь на неправильный комбинированный список.

...