【问题标题】:using radiobutton.Checked in another class (issues with static/non-static stuff)使用 radiobutton.Checked 在另一个类中(静态/非静态的问题)
【发布时间】:2014-03-02 01:31:36
【问题描述】:

使用 VS 设计器,我创建了一个带有几个单选按钮的窗口 (Form1)。在另一个类中,我尝试创建一个在选中单选按钮时执行的语句。

    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”需要对象引用 Form1.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 类的一个实例,但它是被创建和重置的(没有选择单选按钮)。

我该如何解决这个问题?

【问题讨论】:

  • 我不太会 C#,但您有一个 static 方法,并且您正在尝试访问 non-static 字段或属性。

标签: c# winforms


【解决方案1】:

它以另一种方式工作,关键字是事件,在你的情况下是CheckedChanged

所以你必须处理它并将代码放入处理程序中:

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

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

【讨论】:

  • 感谢您的回复,不过我不太明白这段代码应该放在哪里。
  • 正如我所写,关键字是 CheckedChanged 事件,甚至给了你链接,其中包含描述和示例。向我们展示您的尝试
  • 好吧,这似乎是一个非常原始的想法,但我是这样工作的:我在 Form1 中创建了一个名为 RailType 的字符串变量,并使用 CheckedChanged 事件为其设置了一个值,60E1 或 49E1 ,否则字符串为空。然后我创建了一个名为 getRailType 的公共方法,它返回这个字符串,并在 Calc 类中使用它。它正在工作,但我非常怀疑这是一种专业的方式。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多