【问题标题】:Form I designed doesn't open on a button click, it opens the plain, default one instead我设计的表单不会在单击按钮时打开,而是打开普通的默认表单
【发布时间】:2016-07-06 23:11:04
【问题描述】:

我遇到的问题是我在主屏幕上使用菜单条,并且所有选项卡/按钮都在工作,除了一个,它不是打开我想要的表单,而是打开标准,在向表单添加任何内容之前您会看到的普通内容。如果我更改了我希望它打开的表单标识符,那么它就可以工作,只是不适用于这个表单。有人知道为什么吗?上面的子程序是有问题的子程序,下面的子程序是正常的。

Private Sub SupportIncidentsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SupportIncidentsToolStripMenuItem.Click 
    Dim f As frmIncidents
    f = New frmIncidents(con, AccCon)
    f.Show()
End Sub


Private Sub EmailLogsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EmailLogsToolStripMenuItem.Click
    Dim f As frmEmailLogs
    f = New frmEmailLogs(con)
    f.MdiParent = Me
    f.Show()
End Sub

【问题讨论】:

  • 当您调试代码并单步执行代码时会发生什么..?这可能是父母,所有者问题..

标签: c# vb.net forms loading menustrip


【解决方案1】:

通过这一行,您正在调用带有 2 个参数的构造函数

f = New frmIncidents(con, AccCon)

因此,在您的 frmIncidents 类中,您手动添加了一个像这样的构造函数

Public Sub frmIncidents(con as WhatEverConIs, Acon as WhatEverAConIs)


End Sub

但是每个表单构造函数都应该调用InitializeComponent 方法,该方法是由 WinForms 设计器自动创建的,带有表单控件的声明和通过设计器设置的相关属性。

Very simple definition of InitializeComponent

手动添加此构造函数并查看调用 Show 方法时显示的空白表单后,我很确定您忘记将调用添加到 InitializeComponent

Public Sub frmIncidents(con as WhatEverConIs, Acon as WhatEverAConIs)

    InitializeComponent()
End Sub

【讨论】:

  • 所以如果我添加 InitializeComponent() 并保持其余代码相同,您是说应该这样做?
  • 当然....如果没有那个调用,表单是空的,InitializeComponent 位于一个以您的表单类命名的文件中,并带有 .Designer.vb。通常该文件是隐藏的,但您可以按“解决方案资源管理器”窗口中的“显示所有文件”按钮查看它。打开它,您将看到通过 WinForms 设计器准备的构建用户界面所需的所有代码
【解决方案2】:

最后,答案是我的类中有两个构造函数相互覆盖,所以显示的是普通表单,而不是我设计的第一个构造函数会显示的表单。

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    相关资源
    最近更新 更多