0

これは、c# を使用した WinForms にあります。車、バイク、電車、バスなどの 10 個のラジオ ボタンを含むフォームと、「XYZ」というテキストのラベル。すべてが同じグループ ボックスにある。ラジオボタンのチェック時にテキストを非表示にするために、次の一般的な方法を作成しました。

private void Hide_radio(object sender, EventArgs e)
{
    RadioButton rb = sender as RadioButton;
    if (rb != null)
       label1.Text="";              
}

奇妙なことに、以下の方法 (初期化コンポーネントのすぐ下) のようにイベントを呼び出すと、一部のラジオでのみ機能し、すべてでは機能しません。新しいラジオをドラッグすると、その上で機能します。【ドラッグ&ドロップ厳守。新しいコードの追加または削除はありません。]

foreach (Control gb1c in groupBox1.Controls)
{
    if (gb1c is RadioButton)
    {
        RadioButton rb = gb1c as RadioButton;
        rb.CheckedChanged += new MouseEventHandler(Hide_radio);
        break;
    }
}

designer.cs を確認しましたが、すべての無線のコードは同じです。したがって、基本的に、イベント処理は一部の新しいラジオでのみ機能し、すべてではありません。C# の振る舞いはなぜ幼稚なのか..

4

2 に答える 2

4

最初のイベント サブスクリプションで foreach サイクルを中断しています。サイクルから「ブレーク」を削除します。

于 2013-03-18T18:53:27.583 に答える
2

を使用するとbreak;ループが終了するため、イベント ハンドラーが割り当てられていないコントロールはイベント ハンドラーを取得しません。これは C# の幼稚な振る舞いではありません。これは、まさにあなたが指示したとおりに C# を実行しているということです。

于 2013-03-18T18:53:32.260 に答える