Windows表单操作如关闭自定义用户控制代码?

时间:2016-05-07 09:56:15

标签: vb.net

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

例如,其中一个是退出表单按钮。如果我将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()

有什么建议吗?我也希望通过最小化,最大化等来做同样的事情。

4 个答案:

答案 0 :(得分:2)

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

有三种解决方案:

  • 使用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实例作为事件参数传递就可以优化这个,这只是一个简单的例子。)

答案 1 :(得分:0)

你从哪里“接近”?使用application.exit()

退出应用程序

答案 2 :(得分:0)

如果要关闭应用程序,可以使用: Application.Exit() 如果要关闭表单: Me.Close()

答案 3 :(得分:-1)

要关闭您使用我的表单。

me.close