1

WinForms。VB.NETVS2010プロフェッショナル。そのため、片側に3つのラジオボタンがあるフォームを作成しています...次に、左側に、この質問用にGroup1とGroup2という名前の2つのグループボックスがあり、一方が他方を覆うようにデザイナーに配置しました。 1つで、両方のgroupboxesvisibleプロパティをfalseに設定しました。ユーザーが2番目のラジオボックスをクリックすると、group1.visibleがtrueに変わり、group2.Visibleがfalseに変わります。ユーザーが3番目のラジオgroup1.visiblechangesをクリックするとfalseに変更され、group2.visibleがtrueに変更されます。ユーザーが最初のラジオボタンをクリックすると、group1とgroup2の両方がfalseに変わります...問題が発生しました...これはまったく機能していません..グループボックスの1つだけが表示されます...デザイナーを開いた場合のみどちらが一番下にあるかを変更すると、もう一方は表示されずに表示されます。

Private Sub SP_Radio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SP_Radio.GotFocus
    SP_Radio.Checked = True
    OP_Radio.Checked = False
    AP_Radio.Checked = False
    If SP_Radio.Checked = True Then
        unitType = 0
        ApartmentGroup.Visible = False
        OfficeGroup.Visible = False
        Call _setLabelColors(False)
    End If
    p_saveChangesButton.Focus()
End Sub

Private Sub OP_Radio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OP_Radio.GotFocus
    OP_Radio.Checked = True
    AP_Radio.Checked = False
    SP_Radio.Checked = False
    If OP_Radio.Checked = True Then
        unitType = 1
        ApartmentGroup.Visible = False
        OfficeGroup.Visible = True
        Call _setLabelColors(True)

    End If
    p_saveChangesButton.Focus()
End Sub

Private Sub AP_Radio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AP_Radio.GotFocus
    AP_Radio.Checked = True
    OP_Radio.Checked = False
    SP_Radio.Checked = False
    If AP_Radio.Checked = True Then
        unitType = 2
        OfficeGroup.Visible = False
        ApartmentGroup.Visible = True
        Call _setLabelColors(True)
    End If
    p_saveChangesButton.Focus()
End Sub

何か案は????

4

2 に答える 2

2

あるグループボックスを別のグループボックスに配置することはできません。この場合、この重複するグループボックスは、以下のグループボックスの子になります。これは、Panelコントロールを使用して実装できます。

ラジオボタンをグループボックスに入れてから、両方のグループボックスを別々に配置します(互いに重ならないようにします)。次のコードを使用すると、機能します。

private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton1.Checked)
            {
                groupBox1.Visible = false;
                groupBox2.Visible = false;
            }
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton2.Checked)
            {
                groupBox1.Visible = true;
                groupBox2.Visible = false;
            }
        }

        private void radioButton3_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton3.Checked)
            {
                groupBox1.Visible = false;
                groupBox2.Visible = true;
            }
        }

少し変更しました。2つのパネルコントロールを重ねて配置し、これを確認します。

private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton1.Checked)
            {
                panel1.Visible = false;
                panel2.Visible = false;
            }
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton2.Checked)
            {
                panel1.Visible = true;
                panel2.Visible = false;
            }
        }

        private void radioButton3_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton3.Checked)
            {
                panel1.Visible = false;
                panel2.Visible = true;
            }
        }

今、それはあなたが望むように動作します

于 2012-05-02T15:53:16.340 に答える
1

対応するラジオボタンでCheckedChangedイベントをトリガーするcheckedChangedイベント内でcheckedプロパティを設定します。これにより、最後にトリガーされたCheckedChangedイベントに基づいて、現在表示されている左側のGroupBoxが変更されます。

簡単な方法は、チェックされたプロパティを変更する前にすべてのイベントハンドラーを無効にし、終了したら再度有効にすることです。

Try
    RemoveHandler AP_Radio.CheckedChanged, AddressOf AP_Radio_CheckedChanged
    RemoveHandler OP_Radio.CheckedChanged, AddressOf OP_Radio_CheckedChanged
    RemoveHandler SP_Radio.CheckedChanged, AddressOf SP_Radio_CheckedChanged

    ' do your work

Finally
    AddHandler AP_Radio.CheckedChanged, AddressOf AP_Radio_CheckedChanged
    AddHandler OP_Radio.CheckedChanged, AddressOf OP_Radio_CheckedChanged
    AddHandler SP_Radio.CheckedChanged, AddressOf SP_Radio_CheckedChanged
End Try

安全を確保するために、すべてをTry/Finallyブロックにカプセル化します。
このようにして、例外が発生した場合にイベントハンドラーが再度有効になります。

于 2012-05-02T14:29:35.197 に答える