【问题标题】:Call a tabPage from a separate window form从单独的窗口窗体调用 tabPage
【发布时间】:2013-04-01 18:04:09
【问题描述】:

我今天才刚刚开始编写 VB;所以请原谅我的无能。

我目前有两种窗口形式,一种通过 TabControl 浏览不同的页面(称为 BusinessSalesPage.vb),另一种是独立的(BusinessQuestion.vb)。当在 BusinessSalesPage.vb 上按下按钮时,会打开第二个窗体。

当第二个窗口打开时,它有两个按钮,我希望用户能够单击一个按钮,然后将它们从第一个窗口 (BusinessSalesPage.vb) 上的 TabControl 带到第三个选项卡。提前致谢。

这是我的代码:

Public Class BusinessQuestion
Inherits System.Windows.Forms.Form
Friend WithEvents mainMenu As System.Windows.Forms.TabControl
Friend WithEvents TabPage3 As System.Windows.Forms.TabPage

Private Sub yesButn_Click(sender As Object, e As EventArgs) Handles yesButn.Click

    mainMenu.SelectedTab = TabPage3()

End Sub
End Class

这是我得到的错误:

已处理 NullReferenceException - 对象引用未设置为对象的实例。

编辑

Public Class BusinessSalesPage
Inherits System.Windows.Forms.Form
Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    mainMenu.SelectedTab = TabPage2
    BusinessQuestion.Show()

End Sub
End Class

【问题讨论】:

    标签: vb.net visual-studio-2012 tabcontrol nullreferenceexception tabpage


    【解决方案1】:

    @LarsTech 我也试过了,但我的代码有问题。在第一个表单上,当我键入 mainMenu.SelectedTab = TabPage 1 时出现错误:“SelectedTab 不是 System.Windows.Forms.MainMenu 的成员,并且未声明 TabPage1。由于其保护级别,它可能无法访问。在第二个表单上它没有找到 InitializeControls,只有 InitializeComponents。我在 VS 2010 中,这是我的代码:

    第一种形式:

    Public Class WCC
      Inherits System.Windows.Forms.Form
    
      Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        mainMenu.SelectedTab = TabPage1
    
        Dim MSO As New MSO2014CC(mainMenu:=, TabPage1:=)
        MSO.ShowDialog()        
    
      End Sub
    End Class
    

    第二种形式:

    Public Class MSO2014CC
    Inherits System.Windows.Forms.Form
    Friend WithEvents mainMenu As System.Windows.Forms.TabControl
    
      Public Sub New(mainMenu As TabControl, tabPage1 As TabPage)
        InitializeComponent()
        Me.mainMenu = mainMenu
        Me.TabPage1 = tabPage1
    
      End Sub
    End Class
    

    【讨论】:

      【解决方案2】:

      您需要对 mainForm 的实际实例的引用。你目前没有。

      您可以尝试在构造函数中传递引用:

      Public Class BusinessQuestion
        ' code...
        Public Sub New(mainMenu As TabControl, tabPage3 As TabPage)
          InitializeControls()
          Me.mainMenu = mainMenu
          Me.TabPage3 = tabPage3
        End Sub
        ' code...
      End Class
      

      您的 BusinessSalesPage 应该如下所示:

      Public Class BusinessSalesPage
        Inherits System.Windows.Forms.Form
      
        Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
          mainMenu.SelectedTab = TabPage2
      
          Dim bq As New BusinessQuestion(mainMenu, TabPage3)
          bq.ShowDialog()        
        End Sub
      End Class
      

      【讨论】:

      • 感谢您的回复。我已经尝试过此代码,现在收到此错误:对非共享成员的引用需要对象引用。它与 BusinessSalesPage.vb 中的 BusinessQuestion.show() 有关。
      • @DannyCarman 从这里看不到你的代码,但听起来你没有创建对象:Dim f As new BusinessQuestion(mainMenu, TabPage3) 然后f.Show()f.ShowDialiog()
      • @DannyCarman 很确定我的第一条评论解决了 null 问题。
      • @LarsTechm Null 错误不是问题,新错误是“对非共享成员的引用需要对象引用”。您确实回复了“Dim f As new BusinessQuestion(mainMenu, TabPage3) then f.Show() or f.ShowDialog()”不确定在哪里需要。
      • @DannyCarman 你用我的代码替换BusinessQuestion.Show()。 BusinessQuestion 是您的表单类,因此您必须使用new 关键字来创建它。然后你用你给它的名字来引用它,在我的例子中是f。试着给它一个比这更好的名字。如果您需要在当前方法之外引用,您可能必须将 f 的声明移动到 BusinessSalesPage 的表单声明中。我更新了帖子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多