繁体   English   中英

从另一个类设置单选按钮属性

[英]Setting Radio Button property from another class

我是Windows新手,从设计到使用Visual Studio 2017版。 我的mainFrom中有两个单选按钮。 我在主窗体中有两个如下所示的单选按钮Check_changed事件处理程序。

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

默认情况下,我在设计时将属性中选中的两个单选按钮都设置为false。

我有一个串行端口类,在该类中,我根据输入的数据从硬件接收数据,我必须将单选按钮之一设置为true。 主窗口类拥有串行端口类的实例

我想知道如何从串行类访问单选按钮并将状态更改为true吗?

先感谢您。

编辑:

我已经尝试过这种方法,但仍然看不到radiobutton被选中。 有人可以建议我我在做什么错。 我有这样的串行类中的代码。

    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;
        }
     }

它在mainfrom中引发RadioButton_checkChanged事件,但未显示,因为它设置为true并在应用程序中被选择。 它显示如下

在此处输入图片说明

它应该显示为系统之一,设置为true并已选择,但我看不到。

有很多方法可以做到这一点:

1)您可以设置单选按钮属性Modifiers:public,并且可以从您的串行端口类访问此单选按钮,例如

Form1.radiobutton1.checked = true

2)您可以在mainform上声明私有值,并创建getter和setter方法以通过初始化表单对象到达此变量。 您可以使用计时器检查此变量状态,如果为true,则使单选按钮处于选中状态。 或直接在form1中使用public变量。

3)使用backgroundworker侦听串行端口类变量,如果变量更改,请直接在主窗体中更改单选按钮状态。

您应该尝试使其他形式的主表单失效

... 
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的子项,即选中或未选中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM