0

我的表单 FormA 上有一个按钮,称为搜索。单击此按钮时,会加载 frmSearch。我想让 frmSearch 动态化,所以如果它通过“搜索员工”按钮调用,它只搜索员工等。有没有一种方法可以立即将调用者的 ID 或标签输入到 frmSearch 中?

这是我目前所拥有的,但它只识别调用者控件。(我可以实例化一个全局变量并从 frmSearch 读取它,但我想知道是否有更好的方法):

  Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
        frmSearch.Show()

        Dim btn As Button = CType(sender, Button)
        MsgBox(btn.ToString)
        MsgBox("you have clicked button " & CType(CType(sender,  _
   System.Windows.Forms.Button).Tag, String))
    End Sub
4

1 回答 1

2

在 formA 中,您的代码将如下所示

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim caller As String = DirectCast(sender, Button).Name
    Dim f As New frmSearch(caller)
    f.Show()
End Sub

请注意,我没有使用搜索表单的默认实例,这很重要。

在搜索表单中添加此代码

Dim whoCalled As String '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Public Sub New(caller As String)
    InitializeComponent()
    whoCalled = caller
End Sub

变量 whoCalled 将包含调用者的姓名。

如果您想让不传递数据就无法创建表单,那么在搜索表单中还要添加

Private Sub New()
    ' This call is required by the designer.
    InitializeComponent()
End Sub

这将迫使您使用重载的构造函数。

于 2013-06-21T12:14:52.963 回答