2016-11-24 1 views
0

단추를 클릭하여 6 TextBox 컨트롤을 추가하는 프로그램을 만들고 레이블의 텍스트 상자에 6 개의 숫자 합계를 표시하려고합니다.동적 텍스트 상자 제어

텍스트 상자를 추가하는 코드를 작성했지만 그 합계에 문제가 있습니다. 모든 텍스트 상자 값을 가져올 수 있습니까? 이 전

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

텍스트 상자의 합계를 원하십니까? – Dandy

+0

'각 TextBox 용 TextBox For Me.Controls.OfType (Of TextBox)()'에서는 'TextBox' 컨트롤을 참조 할 수 있습니다. 이것을'Label1_Click' 메쏘드 나 여러분이 적합하다고 생각하는 곳에 넣으십시오. – Bugs

답변

0

을 당신이 Texbox 입력 만

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 

루프가 업데이트 된 숫자입니다 확인하기 . 요약을 만들 때 목록에 추가 한 다음 요약 할 때 목록에 추가하여이 작업을 수행 할 수 있습니다.

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 

당신은 폼의 모든 텍스트 상자를 반복하여 수행도 할 수 있지만 다른 목적을 봉사가 다른 텍스트 상자가있을 수 있습니다.

0

당신은 동적으로 만들고있는 텍스트 상자에 대한 참조의 보류를 얻을 필요가 ...

+1

'For Each T As For TextBox를 Me.Controls.OfType (Of TextBox)() '에서 사용하는 것을 고려하십시오. 현재 원하지 않는 폼의 모든 컨트롤을 반복합니다. – Bugs

+1

이것은 'InvalidCastException'을 던집니다. Jinx의 솔루션으로 이동하십시오. –

+0

고마워요.하지만이 줄을 설명해 주시겠습니까? – user7204131