0

すべてのラジオボタンで共有されるイベント ハンドラーがあります。

private void radioButtonPackers_CheckedChanged(object sender, EventArgs e)
{
    var rb = sender as RadioButton;
    if (rb == radioButtonPackers)
    {
        team = NFCNorth.Packers;
    } else if (rb == radioButtonBears)
    {
        team = NFCNorth.Bears;
    } else if . . .
}

radioButtonBears、radioButtonVikings、または radioButtonLions ラジオボタンをチェックした後でも、rb は常に radioButtonPackers として認識されます。

次のようなことをしなければなりませんか?

if (radioButtonPackers.Checked)
{
    team = NFCNorth.Packers;
}
else if (radioButtonBears.Checked)
{
    team = NFCNorth.Bears;
}
. . .

?

4

4 に答える 4

2

実際には、そのようには機能しません。クリックされたラジオボタンのように受信する必要がありsenderます。あなたの混乱radioButtonPackers_CheckedChanged、ラジオボタンがグループ化されている場合に2回受信できる という事実に関連している可能性があるため、1つをクリックすると現在のボタンが表示されます

  • 最初はチェックされません(イベントを発生させます)
  • 「新しい」ラジオボタンのイベントが来る
于 2012-09-21T20:19:31.070 に答える
1

はい、物件を見る必要があり.Checkedます。

ラジオ ボタンの 1 つを初めてクリックすると、CheckedChanged(ボタンを「オン」にするための) 1 つのイベントが発生します。次に、同じグループ内の別のラジオ ボタンをクリックすると、2 つのCheckedChangedイベントが発生します。1 つは最初のラジオ ボタンのチェックを外すためのもので、もう 1 つは 2 番目のラジオ ボタンをチェックするためのものです。

http://msdn.microsoft.com/en-us/library/system.windows.forms.radiobutton.checkedchanged.aspx

于 2012-09-21T20:26:52.437 に答える
1

私の推測では、あなたのコードは正しく動作していますが、選択したばかりの RadioButton がチェックを取得する前に、以前に選択した RadioButton がチェックされている状態からチェックされていない状態に変化したときに、CheckedChanged イベントが発生していることがわかります (イベントが発生します)。

于 2012-09-21T20:27:32.047 に答える
1

に注意する必要がありますrb.Checkedが、私の経験では、とにかく「チェック済み」イベントを取得する前に「未チェック」イベントを取得します。動作する短いが完全な例を次に示します。

using System;
using System.Windows.Forms;

class Program
{
    public static void Main()
    {
        var b1 = new RadioButton { Text = "Button 1" };
        var b2 = new RadioButton { Text = "Button 2" };

        EventHandler handler = (sender, args) => {
            RadioButton button = (RadioButton) sender;
            Console.WriteLine("{0} {1}",
                button.Text,
                button.Checked ? "Checked" : "Unchecked");
        };

        b1.CheckedChanged += handler;
        b2.CheckedChanged += handler;

        var form = new Form {
            Controls = {
                new FlowLayoutPanel {
                    FlowDirection = FlowDirection.TopDown,
                    Controls = { b1, b2 }
                }
            }
        };
        Application.Run(form);
    }    
}

ボタン 1 をクリックしてからボタン 2 をクリックすると、次のように表示されます。

Button 1 Checked    
Button 1 Unchecked    
Button 2 Checked
于 2012-09-21T20:28:52.870 に答える