C# 使用radiobutton。签入另一个类(静态/非静态内容的问题)

C# 使用radiobutton。签入另一个类(静态/非静态内容的问题),c#,winforms,C#,Winforms,使用VS设计器,我创建了一个带有几个单选按钮的窗体1。在另一个类中,我尝试生成一条语句,如果选中radiobutton,该语句将执行 public static string printRailType() { if (Form1.rb60E1.Checked) { return "60E1"; } else if (Form1.rb49E1.Checked) {

使用VS设计器,我创建了一个带有几个单选按钮的窗体1。在另一个类中,我尝试生成一条语句,如果选中radiobutton,该语句将执行

    public static string printRailType()
    { 
        if (Form1.rb60E1.Checked)
        {
            return "60E1";
        }

        else if (Form1.rb49E1.Checked)
        {
            return "49E1";
        }
        else
        {
            return "Rail type not selected.";
        }
但是,我有问题,这似乎是一个错误:

非静态字段、方法或属性“RailCalc.Form1.rb60E1”需要对象引用 与表1.rb49E1相同

因此,为了修复这些错误,我创建了Form1的一个实例:

    public static string printRailType()
    {
        Form1 frm1 = new Form1(); 
        if (frm1.rb60E1.Checked)
        {
            return "60E1";
        }

        else if (frm1.rb49E1.Checked)
        {
            return "49E1";
        }
        else
        {
            return "Rail type not selected.";
        }
    } 
但是,即使选中了单选按钮,它仍会打印未选中的railtype

frm1似乎是类Form1的一个实例,但它是创建的,并且没有选择任何单选按钮


如何修复此问题?

这是因为您为修复错误而创建的新表单1是一个全新的表单,而不是单击单选按钮的表单。你必须在某个地方,以某种方式,可能在你创建类的地方,给类一个Form1的引用。

它以另一种方式工作,关键字是event,在你的例子中是

因此,您必须处理它并将代码放入处理程序中:

    if (this.rb60E1.Checked)
    {
        return "60E1";
    }

    else if (this.rb49E1.Checked)
    {
        return "49E1";
    }
    else
    {
        return "Rail type not selected.";
    }

我对C不太在行,但是你有一个静态方法,你试图在其中访问一个非静态字段或属性。谢谢你的回复,但是我不太明白把这段代码放在哪里。正如我写的,关键字是CheckedChanged event,甚至给了你一个链接,其中包含描述和示例。向我们展示你们的triedOkay,这似乎是一个非常原始的想法,但我是这样做的:我在Form1中创建了一个名为RailType的字符串变量,并使用CheckedChanged事件将其设置为一个值,60E1或49E1,否则字符串为空。然后我创建了一个名为getRailType的公共方法,该方法返回这个字符串,并在Calc类中使用它。它正在发挥作用,但我高度怀疑这是一种专业的方式。