2016-08-04 8 views
0

Dieser Code wird versuche zu anderen Textfelder zu lösenTextbox True False Aktiviert

 Dim i As Integer 
    i = ListBox1.SelectedIndex 
    If ListBox1.SelectedIndex = 0 Then 
     TextBox10.Enabled = False 
     TextBox25.Enabled = False 
     TextBox30.Enabled = False 
     TextBox40.Enabled = False 
     TextBox55.Enabled = False 
     TextBox65.Enabled = False 
     TextBox73.Enabled = False 
     TextBox84.Enabled = False 
     TextBox95.Enabled = False 
     TextBox100.Enabled = False 
     TextBox185.Enabled = False 
    Else 
     TextBox(??).Enabled = True 

    End If 

Wie wahr aktivieren? Ich meine 10,25,30,40 ... 185 sind falsch und alle anderen textboes aktiviert True?

+1

Ich denke, Sie müssen überlegen, um Ihr Formular neu zu gestalten. Verwenden Sie [DataGridView Control] (https://msdn.microsoft.com/en-us/library/e0ywh3cz (v = vs.110) .aspx) – Fabio

Antwort

0

können Sie Steuerung vom Typ Textbox finden und weisen standardmäßig aktiviert = true und dann Code schreiben, um = false Aktiviert gesetzt.

For Each c As Control In Me.Controls 
If c.GetType Is GetType(TextBox) Then 
    c.Enabled=true 
End If 
Next 

OR 

Dim allTextBox As New List(Of Control) 
For Each c As TextBox In FindControl(allTextBox, Me,GetType(TextBox)) 
    c.Enabled=true 
Next 

Public Shared Function FindControl(ByVal list As List(Of Control), ByVal parent As Control, ByVal ctrlType As System.Type) As List(Of Control) 
    If parent Is Nothing Then Return list 
    If parent.GetType Is ctrlType Then 
     list.Add(parent) 
    End If 
    For Each child As Control In parent.Controls 
     FindControl(list, child, ctrlType) 
    Next 
    Return list 
End Function 
0

Sie können über die Formularsteuerelement-Sammlung iterieren. Etwas wie:

Dim i As Integer 
i = ListBox1.SelectedIndex 
for each c in me.controls 
     if TypeOf c is TextBox then 
      dim Textbox as textbox = DirectCast(c, TextBox) 
      'Determine state of your textbox here. 
      'Perhaps use the TAG property to assign a selectedindex to each textbox 
      Textbox.enabled = (Textbox.Tag.ToString() <> i.ToString()) 
     end if 
next 
0

würde ich mit zwei Listen gehen:

var falseList = new List<ListBox> { TextBox10, TextBox25, TextBox30, ... }; 
var trueList = new List<ListBox> { TextBox1, TextBox2, TextBox3, ... }; 

Dann in jedem Zustand Block in dem wenn jede Liste aufzählen und auf falsch gesetzt:

foreach(var box in falseList) box.Enabled = false; 

foreach(var box in trueList) box.Enabled = true; 

Another Die Option besteht darin, eine DataSource mit zwei booleschen Werten einzurichten und DataBinding für jede der true ListBoxes auf eines der beiden zu setzen rties und die andere auf die false Eigenschaft setzen und dann die gefundene Eigenschaft auf der Datenquelle an, die sie alle in einer Anweisung aktualisieren.

Hinweis: Entschuldigung, es ist C# Syntax, aber es ist wirklich nah an VB.NET. Ich weiß einfach nicht die genaue VB-Syntax

+0

Es ist ärgerlich, TextBox11 12 13 14 15 16 17 und so weiter zu schreiben – Deathonly

+0

That War nur ein Punkt, wie Sie die Liste erstellen, hängt von Ihrem Szenario ab. Ich würde wirklich einen Datenbindungsansatz empfehlen, wie ich bereits erwähnt habe. Sie brauchen immer noch eine Möglichkeit, Steuerelemente in solche zu gruppieren, die wahr und falsch sind. Wenn sich alle TRUE in einer GroupBox befinden, könnten Sie die Steuerelemente davon entfernen und die Datenbindungskonfiguration in einer Schleife der GroupBox.Controls und die gleiche für die andere Gruppe zuweisen. Die Schönheit ist, dass Sie eine ganze Reihe von Steuerelementen mit einer einzigen Zuweisungsanweisung später wechseln können. –

Verwandte Themen