我创建了一个包含五个控件的标题栏(自定义用户控件)。它们都是标签,但每个都做不同的“工作”。
例如,其中一个是退出表单按钮。如果我将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()
。
有什么建议?我也希望通过最小化,最大化等来做同样的事情。
让我猜猜;您的按钮位于用户控件中。你试着在Close()
类上调用UserControl
,这显然不是一个窗口而且没有它。
有三种解决方案:
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()如果要关闭Form:Me.Close()
要关闭表单,请使用我。
me.close