2016-07-29 2 views
1

Ich habe ein Array von Bit, das eine Größe von 8 hat, durchquere das Array von Bit und aktualisiere die Checkbox jedes entsprechenden Bits basierend darauf, ob das Bit Null ist oder nicht. Bisher habe ich folgendes:Vermeiden Sie doppelten Code beim Zuordnen eines Arrays zu Controls

 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 

Ich denke, es hat doppelten Code. Ich denke, es wäre besser, wenn ich etwas wie d2b & I hätte. Aber es ist nicht richtig, da es keine Zeichenfolge ist. Irgendeine Idee, wie ich doppelten Code loswerden könnte?

Dank

Antwort

1

Zumindest würde dies kürzer sein:

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

Ihr Code wird nicht deaktivieren Sie die Option immer die Kontrollen, da sie nur Kontrollen/Handlungen auf einen Staat. Das ist nicht in der Regel der Fall für diese Dinge, aber wenn es die einzige Zeile If ist, können verwendet werden:

If btArr6(0) Then d2b0.Checked = True 

Wenn ein Array oder List Karten auf eine Reihe von Steuerelementen, erstellen/eine Reihe von denen halten Kontrollen, so dass Sie einfach eine Schleife verwenden können. Wenn mehr als einmal verwendet, können Sie erklären, und ein einzelnes Array bauen:

Public Class Form1 
    ' declaration 
    Private d2b As CheckBox() 

Wichtig: initialisieren nicht in der Deklaration (das heißt die Kontrollen Liste) - sie noch nicht existieren. Initialisieren es irgendwo wie Form Last:

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 

Wieder, eine If Anweisung verwenden, wenn Sie nie die Kontrollen wollen über die Schleife nicht markiert werden. Das gleiche Verfahren (e) arbeitet ein Array von booleschen abzubilden:

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

In der Tat kann die gleiche Konzept verwendet werden, um Daten zur Karte von jedem Array der Kontrollen einzustellen.

+0

Was für eine Lösung !! Danke nochmal Plutonix. Sie haben mir viele Male geholfen und ich schätze es sehr. – success

+0

Sie hatten Recht, dass wenn Sie sich Code- oder Codemuster wiederholen, es fast immer einen besseren Weg gibt. Es wird das DRY-Prinzip genannt - Wiederhole dich nicht – Plutonix

+0

Ich werde deinen Rat beachten – success

-2

Dies wäre der einfachste Weg, Vervielfältigung mit Ihrem vorhandenen Code zu vermeiden:

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