Windows通过自定义用户控制代码表单执行操作?

问题描述 投票:0回答:4

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

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

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

vb.net
4个回答
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实例作为事件参数来优化,这只是一个简单的例子)。


0
投票

你从哪里“接近”?使用application.exit()退出应用程序


0
投票

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


-1
投票

要关闭表单,请使用我。

me.close

© www.soinside.com 2019 - 2024. All rights reserved.