0

現在、テキストボックスで表示されている属性を使用しています。以下に、コードのスニペットをコピーして貼り付けました。フォームが読み込まれるときに、合計8つのテキストボックスがfalseに設定されています。次に、それに応じてテキストボックスを表示する2つのラジオボタンがあります。1つradioButtonは最初の4つのテキストボックスを表示し、もう1つは8つのテキストボックスすべてを表示します。問題は、radioButton14つのテキストボックスのみを表示するように切り替えると、8つのテキストボックスすべてが表示されることです。

    private void radioButton1_CheckedChanged(object sender, EventArgs e)
    {

        int count = 0;
        int txtBoxVisible = 3;

        foreach (Control c in Controls)
        {
            if (count <= txtBoxVisible)
            {
                TextBox textBox = c as TextBox;
                if (textBox != null) textBox.Visible = true; 
                count++;
            }
        }
    }

private void radioButton2_CheckedChanged(object sender, EventArgs e)
    {

        int count = 0;
        int txtBoxVisible = 7;

        foreach (Control c in Controls)
        {
            if (count <= txtBoxVisible)
            {
                TextBox textBox = c as TextBox;
                if (textBox != null) textBox.Visible = true; 
                count++;
            }
        }
    }
4

2 に答える 2

2

これを変更してみてください:

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    RadioButton rb = sender as RadioButton;
    if (rb != null && rb.Checked)
    {
        int count = 0;
        int txtBoxVisible = 3;
        HideAllTextBox();
        foreach (Control c in Controls)
        {

            if(count > txtBoxVisible) break;

            TextBox textBox = c as TextBox;

            if (count <= txtBoxVisible && textBox != null)
            {
                textBox.Visible = true; 
                count++;
            }
        }
    }
}

private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
    RadioButton rb = sender as RadioButton;
    if (rb != null && rb.Checked)
    {

        foreach (Control c in Controls)
        {
            TextBox textBox = c as TextBox;
            if (textBox != null) textBox.Visible = true; 
        }
    }
}

private void HideAllTextBox()
{
    foreach (Control c in Controls)
    {
        TextBox textBox = c as TextBox;
        if (textBox != null) textBox.Visible = false; 
    }
}

いずれの場合も、影響を受けるコントロールの精度を高めるために、コントロールまたは同様の名前を繰り返すことをお勧めします。

于 2013-02-17T14:18:05.240 に答える
0

このCheckedChangedイベントは、コントロールのCheckedプロパティが変更されたときに発生します。RadioButtonこれは、RadioButtonがオンまたはオフの両方の場合を意味します。

次のようなものを書いてみてください。

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    if (radioButton1.Checked)
    {
        // Display the first 4 TextBox controls code.
    }
}

private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
    if (radioButton2.Checked)
    {
        // Display all TextBox controls code.
    }
}
于 2013-02-17T14:20:49.073 に答える