winforms 如何访问分部用户类中的单个按钮

t30tvxxf  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(77)

原谅我问这个问题的愚蠢。我已经退休了,已经20多年没有看过SQL或Visual Studio了。相信我,20年前是完全不同的。我觉得很无聊,于是决定学习SQL、VS、VB .net和C#。
我创建了一个部分用户类,用于不同的表单。这个类有九个按钮,其中一个是退出。当我退出窗体时,我想返回到调用窗体。
我的问题是,我不知道如何解决我创建的类中的单个按钮的单击事件,一旦类被添加到表单中。
所有按钮都被声明为public。似乎没有事件来处理按钮的“点击”???或者无论如何识别哪个按钮被点击了???
谢谢你,
迈克

带分部类的表单

虽然我可以捕捉到点击这里的按钮,但我所尝试的一切都失败了。

Private Sub UserControl11_Click(sender As Object, e As EventArgs) Handles UserControl11.Click
    'How to identify which button has been clicked
    Dim oButton As DirectCast(sender, Text)
    MsgBox(oButton.text)
End Sub
hiz5n14c

hiz5n14c1#

正确的方法是让用户控件引发一个专用事件。在内部,用户控件处理ButtonClick事件。然后,它引发窗体处理的自己的事件。窗体不关心用户控件的Click事件。它关心这个事件,专门用于点击特定的Button

Public Event ExitButtonClick As EventHandler

Protected Overridable Sub OnExitButtonClick(e As EventArgs)
    RaiseEvent ExitButtonClick(Me, e)
End Sub

Private Sub ExitButton_Click(sender As Object, e As EventArgs) Handles ExitButton.Click
    OnExitButtonClick(EventArgs.Empty)
End Sub

表单现在像处理任何其他事件一样处理ExitButtonClick。如果你喜欢的话,你可以给这个事件起别的名字。
有关定义自己的事件的更多信息,请参阅我的博客文章here

lmvvr0a8

lmvvr0a82#

Thx.问题解决我相信这是可行的,但是,我想出了一个变通办法,并创建了一个包含按钮的面板。
解决方案很简单-希望这更有意义:

Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click
    'Exit Form
    Call LogOut()

    Me.Hide()
    Me.Close()
    MainScreen.Show()

    'Get line of login for user
    con.Open()

    Dim dteOut As String = Format(DateTime.Now(), "dd/mm/yyyy h:mm tt")

    sqlAction = "Update LogonTable set DateOut = '" & dteOut & "'" & " Where UserName = '" & strUserName & "' and DateIn =  '" & LoginDate & "'"
    sqlCmd = New SqlCommand(sqlAction, con)
    sqlCmd.ExecuteNonQuery()

    con.Close()
End Sub

感谢您的回复。

相关问题