【问题标题】:Creating a simple addition form application programmatically以编程方式创建一个简单的加法表单应用程序
【发布时间】:2020-06-17 08:54:36
【问题描述】:

我想在 vb.net 表单应用程序中创建一个简单的加法程序。我也想以编程方式创建所有控件。我有三个文本框和一个按钮。单击按钮时,它从两个文本框中获取值并将其分配给第三个文本框值。 我无法从按钮单击句柄中获取文本框字符串。

我的编码如下:

Public Class Form1
    Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        'Pushbutton
        Dim PushButton As New Button()
        PushButton.Text = "Add"
        PushButton.Location = New Point(10, 100)
        Me.Controls.Add(PushButton)
        AddHandler PushButton.Click, AddressOf myButtonHandler_Click
        '
        'TextBox1
        Dim TextBox1 As New TextBox
        TextBox1.Location = New Point(10, 3)
        Me.Controls.Add(TextBox1)

        'TextBox2
        Dim TextBox2 As New TextBox
        TextBox2.Location = New Point(200, 3)
        Me.Controls.Add(TextBox2)


        Dim TextBox3 As New TextBox
        TextBox3.Location = New Point(200, 100)
        Me.Controls.Add(TextBox3)

    End Sub

    Private Sub myButtonHandler_Click(ByVal sender As Object, ByVal e As EventArgs)

    End Sub

    Public Function ADD(x As Double, y As Double) As Double
        ADD = x + y
    End Function
End Class

【问题讨论】:

  • 将您的控件声明为实例字段并使用double.TryParse() 验证输入。可能的话,给这些控件起有意义的名字。或者使用一个类对象来生成所有需要的部分(包括控件),其中包含所有需要的逻辑(包括Add() 方法),这样你就有了一个可重用的对象,你不需要乱扔你的Form。跨度>
  • 使用NumericUpDown而不是TextBox,则不需要解析...
  • 我的问题不是这个,我无法从“Private Sub myButtonHandler_Click(ByVal sender As Object, ByVal e As EventArgs)”获取文本框值,所以如何获取这些值。
  • 我的评论只是对 Jimi 评论的补充建议,这是对您问题的简短回答。问题是您无法访问文本框对象,因为它们是在Form_Load 中声明的。阅读thisthis
  • 如果您不想将控件分配给专用字段,则可以按名称从Controls 集合中取回它们。当然,当你创建它们时,你必须给它们一个 Name 值。否则,您可以通过索引将它们取回。

标签: vb.net winforms


【解决方案1】:

将控件的声明移动到表单级别,可以在表单的所有方法中看到它们。

Public Class Form3
    Private TextBox1 As New TextBox
    Private TextBox2 As New TextBox
    Private TextBox3 As New TextBox
    Private PushButton As New Button

    Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Pushbutton
        PushButton.Text = "Add"
        PushButton.Location = New Point(10, 100)
        Me.Controls.Add(PushButton)
        AddHandler PushButton.Click, AddressOf myButtonHandler_Click

        'TextBox1
        TextBox1.Location = New Point(10, 3)
        Controls.Add(TextBox1)

        'TextBox2
        TextBox2.Location = New Point(200, 3)
        Controls.Add(TextBox2)

        'TextBox3
        TextBox3.Location = New Point(200, 100)
        Controls.Add(TextBox3)
    End Sub

    Private Sub myButtonHandler_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim firstNumber = CDbl(TextBox1.Text)
        Dim secondNumber = CDbl(TextBox2.Text)
        TextBox3.Text = ADD(firstNumber, secondNumber).ToString
    End Sub

    Public Function ADD(x As Double, y As Double) As Double
        ADD = x + y
    End Function
End Class

【讨论】:

    【解决方案2】:

    从技术上讲,您可以按照以前的方式进行操作,但前提是您为按钮单击事件使用匿名事件处理程序,如下所示:

    Public Class Form1
    
        Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'TextBox1
            Dim TextBox1 As New TextBox
            TextBox1.Location = New Point(10, 3)
            Me.Controls.Add(TextBox1)
    
            'TextBox2
            Dim TextBox2 As New TextBox
            TextBox2.Location = New Point(200, 3)
            Me.Controls.Add(TextBox2)
    
            Dim TextBox3 As New TextBox
            TextBox3.Location = New Point(200, 100)
            Me.Controls.Add(TextBox3)
    
            'Pushbutton
            Dim PushButton As New Button()
            PushButton.Text = "Add"
            PushButton.Location = New Point(10, 100)
            Me.Controls.Add(PushButton)
            AddHandler PushButton.Click, Sub()
                                             Dim dblA, dblB As Double
                                             If Double.TryParse(TextBox1.Text, dblA) AndAlso Double.TryParse(TextBox2.Text, dblB) Then
                                                 TextBox3.Text = ADD(dblA, dblB)
                                             Else
                                                 MessageBox.Show("One or more Invalid Inputs")
                                             End If
                                         End Sub
        End Sub
    
        Public Function ADD(x As Double, y As Double) As Double
            ADD = x + y
        End Function
    
    End Class
    

    虽然我确实建议按照 Mary 的建议将这些控件声明移到 Form 级别。

    【讨论】:

      猜你喜欢
      • 2013-02-17
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多