【问题标题】:Combining grouped radio button methods into one?将分组的单选按钮方法组合成一个?
【发布时间】:2015-05-31 20:39:46
【问题描述】:

我在同一组中有四个单选按钮。根据选中的变量,变量会像这样改变:

    public void radiobutton1_Checked(object sender, RoutedEventArgs e)
    {
        angle_Offset = 0 - direction;
    }

    public void radiobutton2_Checked(object sender, RoutedEventArgs e)
    {
        angle_Offset = 90 - direction;
    }

    public void radiobutton3_Checked(object sender, RoutedEventArgs e)
    {
        angle_Offset = 180 - direction;
    }

    public void radiobutton4_Checked(object sender, RoutedEventArgs e)
    {
        angle_Offset = 270 - direction;
    }

我正在尝试找到一种方法来减少该代码。我尝试了一些 if/else 语句,但它也一样长,并且在检查其他按钮时变量没有更新。任何提示都会很棒!

【问题讨论】:

    标签: c# wpf radio-button checked


    【解决方案1】:

    如果您为单选按钮分配标签并制作与这些标签相对应的角度数组,则可以使用一种方法来处理它们。

    将 0 分配给第一个单选按钮的标签,1 分配给第二个单选按钮的标签,2 分配给第三个单选按钮的标签,3 分配给第四个单选按钮。现在您的事件处理程序可以重写如下:

    public void radiobutton2_Checked(object sender, RoutedEventArgs e) {
        var rb = (RadioButton)sender;
        var tag = Convert.ToInt32(rb.Tag);
        angle_Offset = (90*tag) - direction;
    }
    

    【讨论】:

    • 我试了你说的,这里报错:"var tag = (int)rb.Tag;"指定的演员表无效。我分配了 4 个单选按钮 0-3,并让它们的 isChecked 属性指向相同的方法。不过我喜欢这个主意,绝对是我的想法。我以前从未使用过标签。
    • @pfinferno 您是否以编程方式或通过设计器分配标签?如果您是通过设计器完成的,请尝试使用 Convert 而不是演员表。
    • 通过设计师。你的建议奏效了。将其更改为 Convert.ToInt32。现在效果很好。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2020-11-11
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    相关资源
    最近更新 更多