2015-01-01 2 views
-1

С Новым годом!Радио-кнопка, возвращающая ложь из другого класса

У меня возникла проблема с отправкой логического значения из формы в класс, в котором работает через код формы для изменения.

Итак, у меня есть radioButton (rb2), который при нажатии запускает поток. Однако мне нужно, чтобы radioButton возвращал true или false другому классу.

public class Airport : Form 
{ 
    public RadioButon rb2; 

    public void rb2_Checked(Object sender, EventArgs e) 
    { 
     if (rb2.Checked == true) 
     { 
      thread3 = new Thread(new ThreadStart(p2.Start2)); 
      thread3.Start(); 
     } 
    } 
} 

Ниже приведен класс, который должен получить значение true для false из класса Airport. Но когда я распечатываю (r), он всегда выводит false. Я пробовал пару вещей, и они пока не работали.

class Hubs 
{ 
    public void Start2 
    { 
     Airport ap = new Airport(); 
     RadioButton r = ap.rb2; 
     Console.WriteLine(r); 

     if(r.Checked == true) 
     { 
      Console.WriteLine("Check r"); 
     } 

    } 
} 

У кого-нибудь есть идеи, которые могут привести к тому, что новый radioButton будет постоянно печатать ложно в моем новом классе?

+2

Вы создаете новый экземпляр формы аэропорта и новый экземпляр радиобарабана. Этот новый экземпляр не знает о проверенном состоянии оригинальной радиообъекта rb2 в исходном экземпляре формы аэропорта. – Steve

+0

Привет, за ответ, но как еще я хотел это сделать? –

+0

Передайте экземпляр аэропорта из формы в метод –

ответ

1

Рассмотрите возможность добавления параметра в ваш метод, который принимает в экземпляре класса Аэропорт:

class Hubs 
{ 
    public void Start2(object airport) 
    { 
     var ap = airport as Airport; 
     if (ap == null) return; 

     RadioButton r = ap.rb2; 
     Console.WriteLine(r); 

     if (r != null && r.Checked) 
     { 
      Console.WriteLine("Check r"); 
     } 
    } 
} 

Затем передать экземпляр аэропорта (используя this) к методу, когда вы называете его:

public class Airport : Form 
{ 
    public RadioButon rb2; 

    public void rb2_Checked(Object sender, EventArgs e) 
    { 
     if (rb2 != null && rb2.Checked) 
     { 
      var x = new Hubs(); 
      var thread3 = new Thread(x.Start2); 
      thread3.Start(this); 
     } 
    } 
} 
+0

Не уверен, что вы можете прочитать этот элемент управления пользовательского интерфейса из другого потока. Передача только состояния true/false? – Steve

+0

Кажется, работает для меня, хотя вы никогда не видите окно консоли ... –

Смежные вопросы