Windows窗体操作,如通过自定义用户控制代码关闭



我制作了一个标题栏(自定义用户控件),其中包含五个控件。它们都是标签,但每个标签的"作用"不同。

例如,其中一个按钮是退出表单按钮。例如,如果我将click事件放入自定义用户控件的代码中。。。

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

我收到这个错误。。。

BC30451 'Close' is not declared. It may be inaccessible due to its protection level.

另一方面,我无法将其放入我的项目代码中,因为它无法找到作为"隔离"控件的ExitButton并执行close()

有什么建议吗?我也想对最小化、最大化等做同样的事情。

让我猜猜看;您的按钮在用户控件中。您尝试在UserControl类上调用Close(),这显然不是一个窗口,也没有它

有三种解决方案:

  • 使用ParentForm属性并对其调用Close()(例如ParentForm.Close())。简单但不太灵活;如果你想做除Form基类(如Close())中实现的事情之外的其他事情,例如特定于主窗体,你必须首先强制转换它,并检查它是否真的是你想要的窗体。此外,所有这些东西都需要用PublicInternal公开,不要公开不需要公开的东西
  • Form传递给UserControl。太可怕了,因为到处传递东西只会变成意大利面条代码
  • 更好的方法是通过UserControl引发事件,以UserControl打开的形式处理。这可能是最灵活的方法

下面是一个小代码示例,通过一个事件来解决这个问题:

打开UserControl的代码,添加事件签名,并在单击按钮时引发该事件:

Public Class MyUserControl
    Public Event ButtonClicked(sender As Object, e As EventArgs)
    Private Sub MyButton_Click(sender As Object, e As EventArgs) Handles MyButton.Click
        RaiseEvent ButtonClicked(sender, e)
    End Sub
End Class

然后,在您的Form中,附加到UserControl:的ButtonClicked事件

Public Class MyForm
    Private Sub MyUserControl1_ButtonClicked(sender As Object, e As EventArgs) Handles MyUserControl1.ButtonClicked
        Close()
    End Sub
End Class

如果对多个按钮重复使用该事件,则可以通过传递给该事件的sender来检查它是哪个按钮。(当然,这可以通过传递一个广播的Button实例作为事件参数来优化,这只是一个简单的例子)。

你是从哪里"接近"的?您使用application.exit()

退出应用程序

如果您想关闭应用程序,可以使用:Application.Exit()如果要关闭窗体:Me.Close()

要关闭表单,请使用我。

me.close

最新更新