2009-03-23 9 views
0

これはVB6にあります(VB.netにも適用されます)。ブール変数とスリーステートのチェックボックス:どのようにタイプ変換を行うのが最適ですか?

チェックボックスには、3つの状態(チェック付き、チェックなし、グレー)があります。

しかし、私はブール変数(MuteSoundなど)を設定するためにそれらを使用しています。これは間違いなくの2つの状態を持つ値です。残念ながら、CheckedとUncheckedはTrue/False値に対応していません。

だから、私は持っていないことができます。 1.力:

bMuteSound = ChkMute.value .......... をbMuteSoundその後、何とか何とか

つのオプションの場合設定/ブール値であることをCheckbox.valueを読ん値:

bMuteSound = Checkbox.value =チェック .....

Checkbox.value = ConvertBooleanToCheckBox

+0

衒学私は怖いです。問題のタイポ "varaiables"ではなく "変数"。 – MarkJ

+0

おかげさまではありますが、pedantry以外に、実際には「変数」を検索しているかもしれません。 –

答えて

4

bMuteSound = abs(chkMute.Value)
chkMute.Value = abs(bMuteSound)

+0

+1 enum型(1 =チェック済み、0 =未チェック、2 =グレー)のブール変換を使用しているので、このようにします。 – bendewey

+0

2行目はエレガントです! 最初の行は次のようにするべきではありません: bMuteSound = - abs(chkMute.value)? –

+0

つまり、最初の行にABSの前にマイナス記号があってはいけませんか? VB6でTrueが等しいこと –

0

ブール変数はデフォルト値を持っていますか?その場合は、ボックスがグレー表示の場合は変数を変更せず、グレー表示されていない場合は正しい値に変更してください。

一般的な意味で
0

チェックボックスもグレー表示され、ちょうど2つのブール値を使用して、あなたの処理コードはこのようにすべきであるチェックボックスを何も知らないする必要があり、分離の観点から、4つの可能な例を持っているので、チェックすることができグレーまたは非グレーの状態を回避するのではなく、アクティブ状態または非アクティブ状態のみを通過させる。

+0

実際に処理コードは、グレー/ノンレイドのラウンドを渡すべきではありませんが、ブーリアンを渡す必要があります。変換する必要があります...質問のポイントのようなものです...あなたが逃したかもしれないと思いますか? – MarkJ

+0

「グレー表示」とは、無効になっているわけではありません。これは、単に状態を特定できないことを意味します。 –

1

は、私には十分に簡単になります。

Dim tsValue As VbTriState 

'Conversions 
tsValue = -Check1.Value 
Check1.Value = -tsValue