Установка свойства переключателя для другого класса - PullRequest
0 голосов
/ 26 февраля 2019

Я новичок в Windows From design и использую выпуск Visual Studio 2017.У меня есть две радиокнопки в mainFrom.У меня есть радио-кнопка Check_changed обработчик событий в основной форме для обеих радиокнопок, как показано ниже.

    private void radioButtonSystem_CheckedChanged(object sender, EventArgs e)
    {
        if (radioButtonSystem.Checked == true)
        {
            Address = 192;            
            ToAddress = 150;          
        }
     }

По умолчанию я установил обе радиокнопки, отмеченные как false, в свойствах во время разработки.

У меня есть класс последовательного порта, где я получаю данные с аппаратного обеспечения на основе входящих данных. Iнужно установить одну из кнопок радио в значение true.класс главного окна владеет экземпляром класса последовательного порта

Я хотел бы знать, как получить доступ к переключателям и изменить статус, установленный на true из класса последовательных портов ??

Заранее спасибо.

Отредактировано:

Я пробовал вот так, но все же не вижу, чтобы кнопка радио проверялась.Может кто-нибудь подсказать мне, что может быть не так, я делаю.У меня есть код в серийном классе, как это.

    void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
       //retrieve number of bytes in the buffer
        int bytes = configcomPort.BytesToRead;
        //create a byte array to hold the awaiting data
        byte[] comBuffer = new byte[bytes];
        //read the data and store it
        configcomPort.Read(comBuffer, 0, bytes);
        if(comBuffer[0] == 6 && comBuffer.Length > 5)
        {
            Software.FrmMain frmMain = new Software.FrmMain();
            if (comBuffer[3] == 100) frmMain.radioButtonSystem.Checked = true;
        }
     }

Вызывает событие RadioButton_checkChanged в mainfrom, но оно не показывалось, поскольку для него установлено значение true и выбрано в приложении.он показывает, как показано ниже

enter image description here

В качестве системного значения должно быть установлено значение true и выбрано, но я этого не вижу.

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Вы должны попытаться сделать недействительной основную форму другой формы, например

... 
Software.FrmMain frmMain = new Software.FrmMain();
if (comBuffer[3] == 100){
   frmMain.radioButtonSystem.Checked = true;
   frmMain.Invalidate(true);
};

Это приведет к аннулированию всех дочерних элементов вашей основной формы, а также переключателей.

Другой способчтобы передать основную форму в качестве параметра для другой формы при ее вызове.Затем вы должны отредактировать переключатели на уже созданной Форме.Создав новый экземпляр, вы бы отредактировали неотображаемый экземпляр.как:

TestForm form = new TestForm(this);
form.Show();

И в конструкторе форм вы бы получили

public TestForm(MainForm _main){
   ...
}

Тогда вы бы установили radioButtons как дочерний элемент _main проверен или не отмечен.

0 голосов
/ 26 февраля 2019

Есть много способов сделать это:

1) Вы можете установить свойства радиокнопок Модификаторы: общедоступные, и вы можете получить доступ к этой радиокнопке из своего класса последовательного порта, например

Form1.radiobutton1.checked = true

2) Вы можете объявить приватное значение в mainform и создать методы getter и setter для достижения этой переменной с помощью объекта формы initiliaze.Вы можете использовать таймер для проверки состояния этой переменной, если true, то проверяет радиокнопку.Или напрямую используйте открытую переменную в форме 1.

3) Используйте backgroundworker для прослушивания переменной класса последовательного порта, если переменная изменяется, измените состояние радиокнопки непосредственно в mainform.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...