2016-11-24 2 views
0

Ich möchte ein Programm erstellen, das 6 TextBox Steuerelemente hinzufügt, indem Sie auf eine Schaltfläche klicken und dann die Summe von 6 Zahl in Textfeldern in einem Etikett anzeigen.Dynamische Textfelder steuern

Ich habe Code geschrieben, der Textfelder hinzufügt, aber ich habe ein Problem mit ihrer Summe. Wie kann ich alle Textfelder Werte erhalten?

Public Class Form1 
    Dim txtn As Integer = 1 
    Dim sum As Integer 


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     AddNewTextBox() 
    End Sub 
    Public Function AddNewTextBox() As TextBox 
     Dim txt As New TextBox() 
     Controls.Add(txt) 
     txt.Top = txtn * 25 
     txt.Left = 200   
     If txtn < 6 Then 
      txtn = txtn + 1  
      Return txt 
     Else 
      MsgBox("sorry you reached the max number of text boxes") 
     End If 
    End Function 

    Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click 
     Label1.Text =  'problem??? 
    End Sub 

End Class 
+0

möchten Sie die Summe der Werte von Textfeldern? – Dandy

+0

'Für jede txtBox Als TextBox In Me.Controls.OfType (Of TextBox)()' können Sie auf die 'TextBox' Steuerelemente verweisen. Legen Sie dies in Ihre 'Label1_Click'-Methode oder wo immer Sie es für richtig halten. – Bugs

Antwort

0

Sie benötigen einen halten einen Verweis auf die Textfelder erhalten Sie erstellen dynamisch . Sie können dies tun, indem Sie sie zur Liste hinzufügen, wenn Sie sie erstellen und dann beim Zusammenfassen auf sie zugreifen.

Public Class Form1 
    Dim txtn As Integer = 1 
    Dim sum As Integer 

    Private _textboxesToSum As New List(Of TextBox) 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     AddNewTextBox() 
    End Sub 

    Public Function AddNewTextBox() As TextBox 
     Dim txt As New TextBox() 
     Controls.Add(txt) 
     _textboxesToSum.Add(txt) 
     txt.Top = txtn * 25 
     txt.Left = 200 
     If txtn < 6 Then 
      txtn = txtn + 1 
      Return txt 
     Else 
      MsgBox("sorry you reached the max number of text boxes") 
     End If 
    End Function 

    Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click 
     Label1.Text = _textboxesToSum.Select(Of Integer)(Function(t) If(IsNumeric(t.Text), t.Text(), 0)).Sum() 
    End Sub 

End Class 

Sie können es auch tun, durch alle Textfelder auf dem Formular eine Näherung durch Iteration, aber Sie könnten einige andere Textfelder dort haben, einen anderen Zweck dienen.

0

Vor diesem stellen Sie sicher, bestätigen Texbox Eingabe numerisch ist nur

Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click 
    Dim i As Integer = 0 
    For Each T As Textbox In Me.Controls.OfType(Of TextBox)() 
     Try 
      i = i + Val(t.text) 
     Catch ex As Exception 

     End Try 

    Next 
    Label1.Text = i 
End Sub 

Schleife aktualisiert ...

+1

Verwenden Sie für jedes T als TextBox In Me.Controls.OfType (Of TextBox)() 'wie derzeit wird es alle Steuerelemente in dem Formular durchlaufen, das Sie nicht möchten. – Bugs

+1

Dies wird wahrscheinlich eine 'InvalidCastException' auslösen. Geh mit Jinx's Lösung. –

+0

danke, aber können Sie diese Linie erklären (Catch ex As Exception) – user7204131