我制作了一个标题栏(自定义用户控件),其中包含五个控件。它们都是标签,但每个标签的"作用"不同。
例如,其中一个按钮是退出表单按钮。例如,如果我将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()
)中实现的事情之外的其他事情,例如特定于主窗体,你必须首先强制转换它,并检查它是否真的是你想要的窗体。此外,所有这些东西都需要用Public
或Internal
公开,不要公开不需要公开的东西 - 将
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