2017-06-13 27 views
-2

私はWinAPIの初心者で、以前は非排他的なチェックボックスを排他的にすることで、他の人からコードを修正しようとしています。チェックボックスを排他的にする方法は?

私が最初に試したのは、チェックされていれば直ちにもう一方のチェックを外すことでしたが、明らかに一方向にしか動作しませんでした。 IDC_2がチェックされていて、IDC_1をチェックしようとすると、最初の 'if'文が再度トリガされ、失敗します。

これは私が持っているコードです:

static WDL_DLGRET dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    if (IsDlgButtonChecked(hwndDlg, IDC_1)) { 

     // do something 

     // try to make exclusive 
     CheckDlgButton(hwndDlg, IDC_2, BST_UNCHECKED); 
    } 

    if (IsDlgButtonChecked(hwndDlg, IDC_2)) { 

     // do something 

     // try to make exclusive 
     CheckDlgButton(hwndDlg, IDC_1, BST_UNCHECKED); 
    } 
} 

私はラジオボタンについて知っているが、この場合の選択肢は、非相互に排他的であることができます。 2つのボックスのうちの1つをチェックしないようにすることは可能ですが(ただしすぐには両方ではありません)、ラジオボタンが正しい選択ではないと思いますか?

+6

ラジオボタンは、相互に排他的な選択肢のためにあるオプションを取ります。上記のどれも選択したくない場合は、そのオプションも指定してください。 IMHO、期待したように動作しないコンポーネントを使用するのは悪いUXです。 –

+0

両方の状態を取得します。コード内で必要な状態を整理する。両方の状態を設定します。これはユーザーの予期しない動作につながりますが、求めたことは行います。同様のコントロール(たとえば、MS Office)を見つけて、ユーザーがこのような状態変更をどのように実装しているかを見てみましょう。 –

+1

しないでください。チェックボックスは排他的ではありません。ラジオボタンですジョブに適切なコントロールを使用します。ユーザがチェックボックスを見ると、ユーザはそれらが独立していることを知る。ユーザーがラジオボタンを見ると、それらが排他的であることがわかります。 –

答えて

1

あなたはすぐに自分自身に

  1. ラジオボタンを提示したが(チェックが入っている)
  2. が活性化ボックスをチェックするように反応する第三「なし」オプションを追加し、他のチェックボックスをオフに2つのソリューションを持っています。

少なくとも1つの原則。一般的な(よく知られており機能的に受け入れられている)ユーザーインターフェイスを破壊することは悪い考えです。

これが後で入力を検証する設定であれば、チェックボックスをそのまま使用することができます。ダイアログまたはフォームにあなたがして提出しますが、の線に沿って説明を追加する必要があること:1の最大値になるまで、受け入れることを拒否し、

が 以下の一つの選択肢まで選択して、検証を行う

選択された。

ちょうど1

+0

少なくとも2つのチェックボックスしかない場合は、オプション2が有効です。私はこれを相互に排他的な2つの選択肢があるときによく使用します。言い換えれば、オプション1と2の両方をチェックすることはできませんが、オプション1がチェックされていればオプション1をチェックできません。オプション1がチェックされていればオプション2をチェックできません。 –

+0

@MichaelWalzはい、答えがあるが、OPのためには、少なくとも今のところ、彼はより簡単なルートを取ることを提案する。 – Baldrickk

+0

この回答は、私が感謝しますが実際にタイトル(「どのように...」)の質問に答えていないラジオボタン(およびUIデザインの原則)についての私の質問の部分に対処します。これを十分に明確にしたわけではない)。しかし、私はラジオボタンを使っていたので、すべてのコメント/返信を読んだ後、私はそれを受け入れます。ありがとう。 – nofish

関連する問題