【问题标题】:Error in VB.NET code: "Argument not specified for parameter"VB.NET 代码中的错误:“未为参数指定参数”
【发布时间】:2011-08-25 10:30:12
【问题描述】:

当我将 Set_Symbol() 放在我的代码中时,它给了我两个错误。

错误:

未为“Private Sub Set_Symbol(sender As Object, e As System.EventArgs)”的参数“e”指定参数。 d:\documents\visual studio 2010\Projects\Math Game\Math Game\frmindex.vb

未为“Private Sub Set_Symbol(sender As Object, e As System.EventArgs)”的参数“sender”指定参数。 d:\documents\visual studio 2010\Projects\Math Game\Math Game\frmindex.vb

这就是 Set_Symbol:

Private Sub Set_Symbol(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles rbnaddition.Click, rbnsubtraction.Click, rbnmultiplication.Click, rbndivision.Click
        Dim rbn As RadioButton
        rbn = CType(sender, RadioButton)
        symbol = rbn.Tag
    End Sub

我是这样称呼它的:

Private Sub frmindex_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    symbolrbn(0) = rbnaddition
    symbolrbn(1) = rbnsubtraction
    symbolrbn(2) = rbnmultiplication
    symbolrbn(3) = rbndivision
    Set_Symbol()
    Populate()
End Sub

为什么会抛出这个错误?

【问题讨论】:

  • 你真的手动调用它吗?你能告诉我们你放置它的代码吗?
  • 请注意Sub 定义需要两个参数sendere,而您在Load 期间没有提供任何参数。

标签: .net vb.net error-handling


【解决方案1】:

frmindex_Load 中的Set_Symbol() 无法编译,因为该方法需要两个参数,但您尝试在不带参数的情况下调用它。

您不应将事件处理程序代码与手动调用的代码混合在一起,因为它们是两种不同的东西。如果您需要从事件处理程序以及从其他地方手动调用方法,您应该提供一个带有适当参数的方法(如果不需要,则不需要)并从两个位置调用。

如果您确实想为每个 RadioButton 设置 Tag,您应该提供一个不带参数并为每个 RadioButton 设置 Tag 属性的方法。

我假设处理程序应该读取标签而不是设置它。

【讨论】:

  • ... 从外观上看,frmindex_Load() 方法中根本不需要手动调用,因为它是一堆其他事情的事件处理程序。
  • 其实没有抛出异常,这是误导。相反,编译器会抱怨。
  • @Konrad:相应调整。
【解决方案2】:

您应该调用Set_Symbol(sender,e) 使其编译

【讨论】:

  • 但是为了什么?表单的 Load 事件的 (sender, e) 似乎与 Set_Symbol 处理程序无关。
  • 如果您直接调用事件处理程序,您应该设置相同的参数,事件处理程序会这样做。例如,您确实应该调用 Set_Symbol(rbnaddition,EventArgs.Empty)。
【解决方案3】:

注意Sub 定义需要两个参数sendere,而您在Load 期间没有提供任何参数。幸运的是,如果您链​​接事件,您已经定义了 sendere。所以你可以像单选按钮动作一样直接处理Load事件,或者用两个参数调用它。

Private Sub Set_Symbol(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles rbnaddition.Click, rbnsubtraction.Click, rbnmultiplication.Click, _
rbndivision.Click, MyBase.Load
    Dim rbn As RadioButton
    rbn = CType(sender, RadioButton)
    If rbn IsNot Nothing then
        symbol = rbn.Tag
    End If
End Sub

Private Sub frmindex_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
    symbolrbn(0) = rbnaddition
    symbolrbn(1) = rbnsubtraction
    symbolrbn(2) = rbnmultiplication
    symbolrbn(3) = rbndivision
    Set_Symbol(rbnaddition, Nothing)            'Default to '+' symbol
    Populate()
End Sub

【讨论】:

    【解决方案4】:
    Imports System.Data.SqlClient
    
    Public Class Form1
        'Dim con As New SqlConnection("Data Source=admin-pc\sqlexpress;Initial Catalog=employee;Integrated Security=True")
        Dim con As SqlConnection
        Dim cmd As SqlCommand
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            con = New SqlConnection("Data Source=admin-pc\sqlexpress;Initial Catalog=employee;Integrated Security=True")
            con.Open()
            cmd = New SqlCommand("insert into emp_table values('" &TextBox1.Text "')",con)
    
            cmd.ExecuteNonQuery()
            con.Close()
    
        End Sub
    End Class
    

    【讨论】:

      猜你喜欢
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      相关资源
      最近更新 更多