我不想单选按钮检查更改C#Winform

时间:2018-11-01 12:48:24

标签: c# winforms radio-button

可以编程两个单选按钮。

命名十六进制和ASCII

当用户选中单选按钮时,文字被更改

    void rdo_HEX_CheckedChanged(object sender, EventArgs e)
    {
        if (rdo_HEX.Checked)
        {
            try
            {                    
                textbox1.Text = AsciiToHex(textbox1.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        else
        {
            try
            {
                textbox1.Text = HexToAscii(textbox1.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }

但是我不想发生checkedChange evnet发生错误时...

如果在checkChange时发生错误,则单选按钮的检查将被更改并保留文本。

例如

第一个文本为'ABCD',并检查ASCII,当选中十六进制单选按钮时,它将转换为'41424344'。

并且'4142434'转换为Ascii,发生错误,因此文本为'4142434',但选中了ASCII单选按钮。.

因此,用户选中十六进制单选按钮'4142434'会转换为'34313432343334'

我不想要这个...我不想在发生错误时更改选中的单选按钮。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

如果我对您的理解是正确的,则不要一直选中该单选按钮,以防出现错误。我在这里没有看到两个按钮的实现,只是看到了其中一个。因此,您必须将其复制为您的ascii单选按钮。

 for(let i = 0; i< 5; i++){
    this.items[1].items[i] = {
       label: 'R'+i,
       items: [] as MenuItem[]
    }

    for(let j = 0; j< 4; j++){
       (this.items[1].items[i] as MenuItem).items[j] = {// error at this line
           label: 'A'+j, 
           items: [] as MenuItem[]
       }
    }
 }

答案 1 :(得分:0)

只需在禁用CheckChanged

之后设置选中的一项
void rdo_HEX_CheckedChanged(object sender, EventArgs e)
{
    if (rdo_HEX.Checked)
    {
        try
        {                    
            textbox1.Text = AsciiToHex(textbox1.Text);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            rdo_HEX.CheckedChanged -= rdo_HEX_CheckedChanged;
            rdo_HEX.Checked = false;
            rdo_HEX.CheckedChanged += rdo_HEX_CheckedChanged;
        }
    }
    else
    {
        try
        {
            textbox1.Text = HexToAscii(textbox1.Text);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            rdo_HEX.CheckedChanged -= rdo_HEX_CheckedChanged;
            rdo_HEX.Checked = true;
            rdo_HEX.CheckedChanged += rdo_HEX_CheckedChanged;
        }
    }
}