2016-07-29 8 views
1

サイズが8の配列を持ち、ビットの配列を横断し、ビットがゼロかどうかに基づいて対応する各ビットのチェックボックスを更新します。私はそれが重複したコードを持っていると思う配列をコントロールにマッピングするときに重複するコードを避ける

 Dim btArr6 As BitArray = New BitArray(8) 
     ...... 
     ...... 
     If btArr6(0) = True Then 
      d2b0.Checked = True 
     End If 
     If btArr6(1) = True Then 
      d2b1.Checked = True 
     End If 
     If btArr6(2) = True Then 
      d2b2.Checked = True 
     End If 
     If btArr6(3) = True Then 
      d2b3.Checked = True 
     End If 
     If btArr6(4) = True Then 
      d2b4.Checked = True 
     End If 
     If btArr6(5) = True Then 
      d2b5.Checked = True 
     End If 
     If btArr6(6) = True Then 
      d2b6.Checked = True 
     End If 
     If btArr6(7) = True Then 
      d2b7.Checked = True 
     End If 

:これまでのところ私は、次があります。私はd2b &のようなものを持っていればそれが良いと思っています。しかし、それは文字列ではないので正しくありません。どのように私は重複したコードを取り除くことができますか?

おかげ

答えて

1

少なくとも、これは短くなります

d2b0.Checked = btArr6(0) 
d2b1.Checked = btArr6(1) 
... 

あなたのコード文句を言わない、これまで一つの状態で、それだけでチェック/行為以来、コントロールをオフにします。それがある場合は、単一のラインIfを使用することができ、通常はそのありえないこれらの事のためのケース、:配列またはコントロールのセットにListマップは、作成するときに/それらの配列を維持

If btArr6(0) Then d2b0.Checked = True 

コントロールを使用するだけでループを使用できます。

Public Class Form1 
    ' declaration 
    Private d2b As CheckBox() 

重要:複数回使用した場合、あなたは、単一の配列を宣言して構築することができ(すなわち、コントロールをリスト)宣言で初期化しないでください - 彼らはまだ存在しません。どこかにフォームの負荷のように、それを初期化します。あなたがチェックがループを介してチェックを外すことにしたいことはありません場合は

d2b = New CheckBox() {CheckBox1, CheckBox2, CheckBox3, CheckBox4} 

' elsewhere to use it: 

For n As Int32 = 0 To d2b.Count - 1 
    d2b(n).Checked = btArr6(n) 
Next 

が再びIfステートメントを使用します。同じ方法(複数可)は、ブール値の配列をマッピングするために動作する。

Private boolAry(8) As Boolean 
... 
myChecks(n).Checked = boolAry(n) 

実際には、同じ概念がコントロールのセットに任意のアレイからデータをマッピングするために使用することができます。

+0

どう解決! Plutonixにもう一度ありがとう。あなたは何度も私を助けてくれて本当に感謝しています。 – success

+0

コードやコードパターンを繰り返していると、いつもより良い方法があります。 DRY原則と呼ばれています - 自分自身を繰り返すことはしません – Plutonix

+0

私はあなたのアドバイスを念頭に置いておきます – success

-2

これは、既存のコードとの重複を避けるための最も簡単な方法のようになります。

Dim btArr6 As BitArray = New BitArray(8) 

Dim d2b = { d2b0, d2b1, d2b2, d2b3, d2b4, d2b5, d2b6, d2b7 } 

For i = 0 To 7 
    If btArr6(i) = True Then 
     d2b(i).Checked = True 
    End If 
Next 
関連する問題