2016-04-16 18 views
0

Ich habe den folgenden Code, der auf Formular Load-Ereignis ausgeführt wird. Dabei sind Zeile und Spalte variabel und können bei jedem Ladevorgang unterschiedliche Werte haben.Deaktivieren Sie dynamisch generierte Schaltflächen in VB.NET

Dim XPos, YPos As Integer 
    Dim btn As Button 
    XPos = 80 
    YPos = 80 
    For i = 1 To row 
     XPos = 150 
     For j = 1 To column 
      btn = New Button 
      btn.Name = "btn" & i & j 
      btn.Size = New Drawing.Size(40, 40) 
      btn.Location = New Point(XPos, YPos) 
      Me.Controls.Add(btn) 
      XPos = XPos + btn.Width + 5 
     Next 
     YPos = YPos + btn.Height + 5 
    Next 

Angenommen, Zeile = 5 und Spalte = 5, dann wird eine Ausgabe wie sein

btn11 btn12 btn13 btn14 btn15 
btn21 btn22 btn23 btn24 btn25 
btn31 btn32 btn33 btn34 btn35 
btn41 btn42 btn43 btn44 btn45 
btn51 btn52 btn53 btn54 btn55 

Wenn ich jetzt auf btn32 klicken dann kann ich, wie es nur auf seine benachbarten Schaltflächen klicken: btn21, btn22 , btn23, btn31, btn33, btn41, btn42, btn43 und ich kann nicht auf Rest der Tasten klicken.

Wenn ich zuerst auf btn54 klicke, dann kann ich nur auf btn53, btn43, bt44mbtn45, btn55 klicken, ich kann nicht auf die restlichen Schaltflächen klicken.

und der Rest der Tasten sollten in der gleichen Art (Farbe, Text .. etc)

Wie geblieben sein, diese restlichen Schaltflächen deaktivieren. Hilf mir hier ...

+1

Deaktivieren Sie zunächst alle Schaltflächen und extrahieren Sie dann die Spalte und Zeile der angeklickten Schaltfläche. Überprüfen Sie danach, ob in 'curC - 1, curR - 1' und' curC, curR - 1' und 'curC + 1, curR - 1' und' curC - 1, curR' und 'curC + 1 'Schaltflächen vorhanden sind , curr 'usw., und aktivieren Sie sie (wobei' curC 'die aktuelle Spalte und' curr 'die aktuelle Zeile ist). –

+0

Der obere linke Knopf befindet sich an der Position 'Aktuelle Spalte - 1, Aktuelle Zeile - 1' und die untere rechte Taste befindet sich an der Position' Aktuelle Spalte + 1, Aktuelle Zeile + 1'. –

+0

Können Sie mir den Code sagen, wie kann ich sie aktivieren? –

Antwort

1

Anstatt die Zeile und Spalte der angeklickten Schaltfläche wie von Visual Vincent vorgeschlagen zu extrahieren, könnten Sie sie in Eigenschaften des Objekts selbst speichern. Dann, wie bereits beschrieben - iterieren Sie durch Me.Controls und deaktivieren Sie alles, was eine Schaltfläche ist und wessen Zeilen- und Spalteneigenschaft nicht die Voraussetzung zum Auslassen von aktiviert ist.

Class GenBtn 
    Inherits Button 
    Private row, col As Integer 
    Public Function isAdjacent(ByRef Column As Integer, ByRef Row As Integer) 
     If Column < Me.col - 1 Or Column > Me.col + 1 Then 
      Return False 
     ElseIf Row < Me.row - 1 Or Row > Me.row + 1 Then 
      Return False 
     Else 
      Return True 
     End If 
    End Function 
End Class 

Tipp: Die Steuerelemente leicht nur ohne accidently auf die erzeugten Steuerungen Punkt Hauptelemente zu deaktivieren.

+0

Gute Antwort. Aber machen Sie keine Schleife, das ist eine Verschwendung von CPU und Speicher, wenn die Spalten und Zeilen im Namen der Buttons gespeichert sind. –

+1

Auch, warum überprüfen, ob es außerhalb der Grenzen ist? Überprüfen Sie, ob es innen ist, stattdessen mit einer einzigen Anweisung: 'Return (Spalte> = Me.col - 1 AndAlso Spalte <= Me.col + 1 AndAlso Zeile> = Me.row - 1 AndAlso Zeile <= Me.row + 1)' –

+0

@VisualVincent stimme ich zu. Diese Aussage macht es ziemlich kleiner und intelligenter. Wollte nur zur Vererbung ppt statt die Positionen nach Namen und Gesamtspalten zu berechnen. Ich denke, Yash Mehta sollte jetzt seinen Anwendungsfall berücksichtigen. – Clijsters

Verwandte Themen