2

サイトと Google を検索しましたが、探しているものがまったく見つかりませんでした。かなり単純だと思いますが、私はC#にかなり慣れていないので、これにはいくつかの問題があります。

基本的に、ボタンのクリックでトリガーされるラジオ ボタンの選択をテストする if ステートメントがあります。デフォルトでは、何も選択されていません。プログラムを選択し忘れると、MessageBox で通知されます。基本的に、選択が完了するまでは何もできません。

これまではラジオ ボタンが 3 つしかありませんでしたが、今日はもう 1 つ追加し、新しい機能を含む新しいボタンに関連するコードをさらに追加しました。

radioButton.Check をテストするための最もメモリ効率の良い方法は何かをまだ見つけようとしています。

if (pRKButton.Checked != true ^ hexButton.Checked != true ^ binaryButton.Checked != true)
        {
            MessageBox.Show("Choose a method of encryption.");
            return null;
        }
        else....//More Goes Here

私の主な質問は次のとおりです。if ステートメントにもう 1 つの引数を追加すると、exclusive or などを使用するのはなぜですか。

if (pRKButton.Checked != true ^ hexButton.Checked != true ^ binaryButton.Checked != true ^ md5Button.Checked != true)

プログラムは、ラジオボタンをクリックしても登録しません。

この時点で、リストが大きくなるため、すべての値を保持して選択肢を選択するリストボックスを作成することを検討しています。しかし、排他的または 3 つ以上の引数を使用できない理由について、私は非常に興味があります。私は決して数学者ではありませんが、もっと学びたいと思っています。

4

2 に答える 2

8

質問の主要部分に入る前に、ここで実際に XOR を使用する必要がないことを指摘しておきます。ラジオ ボタンがある場合、選択できるのは 0 または 1 つだけです。1 つを選択すると、同じグループ内の他のユーザーは自動的に選択解除されます。したがって||、少なくとも 1 つが選択されているかどうかをテストするために使用できます。

if (pRKButton.Checked || hexButton.Checked || binaryButton.Checked)
{
   // At least one (i.e. exactly one) is checked.
}
else
{
   // None checked.
}

質問の主要部分に答えるために、コードは失敗します。これは、ボタンを 1 つ選択すると(ボタンがチェックさfalse ^ true ^ trueれていないかどうかをテストしていることに注意してください) 取得するためです。この結果は false です。しかし、変数が 4 つある場合は、代わりにどちらが真かがわかります。false ^ true ^ true ^ true

XORあなたが思うように、「1つだけが真実」という意味ではありません。A XOR B XOR Cは、A、B、C の奇数個が true の場合に true です。これは、A、B、C の 3 つすべてが true の場合に true であるため、「正確に 1 つ」とは異なります。

次の真理値表を参照して、3 つの入力による連鎖 XOR の動作を理解してください。

XOR B XOR C

于 2012-07-16T20:35:24.583 に答える
2

ラジオ ボタンの機能に関する Mark Byer の優れた情報に加えて、非常に長い if ステートメントでコードが臭くなるのではないかと心配するかもしれません。

単純化するために LINQ を使用してみてください。

container.Controls.OfType<RadioButton>().Any<RadioButton>(r => r.Checked);

チェックされているラジオ ボタンに基づいて true または false になります。

于 2012-07-16T20:52:22.293 に答える