【问题标题】:3 Vb.net Forms - I Can get the title from one but not the other?3 Vb.net Forms - 我可以从一个而不是另一个获得标题?
【发布时间】:2016-07-19 03:29:33
【问题描述】:

我的解决方案文件中有 3 个表单。每个都有一个 Public 类。

(Form1 - MainControlWindow 类),(Form3 - ShaneTestFormVersion2 类),(New_Popup_Chords - New_Popup_Chords 类)

程序在 MainControlWindow 类的 Form1 中启动。我给它一个标题名称,然后将第二个表单 ShaneTestFormVersion2 类调暗为 frmSongDisplay2 并显示它。

        Me.Text = "Window_A"
        Dim frmSongDisplay2 As New ShaneTestFormVersion2
        frmSongDisplay2.Show()

然后,在 Form3.vb 页面上的 ShaneTestFormVersion2 类中,我将最后一个表单调暗为对话框,以便第二个表单处理在其打开时停止:

        Me.Text = "Window_B"
        Dim NewChordsPopup As New New_Popup_Chords
        NewChordsPopup.ShowDialog()

在我尝试使用第 3 种形式 (NewChordsPopup) 来显示其他 2 种形式的窗口标题之前,这一切都可以正常工作:

    MsgBox(ShaneTestFormVersion2.Text) 'Second Form opened
    MsgBox(MainControlWindow.Text) 'First Form Opened

msgsboxes 作为默认窗口标题显示为 "Form3" 而不是 "Window_B",但第一个窗口 msgbox 显示为 "Window_A" .

标题的设置方式相同,窗口变暗并以相同的方式显示。为什么 Form3 中的 ShaneTestFormVersion2 显示为 "Form3" 而不是我分配的标题 "Window_B"

旁注:

我还注意到,我可以正常访问 MainControlWindow 变量 (MainControlWindow.Var1) (Public Var1),但不能访问 ShaneTestFormVersion2 变量 (ShaneTestFormVersion2.Var1),除非它是“Public Shared Var1”。

【问题讨论】:

  • 您的实例名为 frmSongDisplay2,而不是 ShaneTestFormVersion2。所以你想要 frmSongDisplay2.Text。
  • 它以蓝色下划线显示,并显示 frmSongDisplay2 未声明。我正在尝试从另一个表单中获取该实例的标题,我是否也在该页面上将其调暗?
  • 您必须传递对它的引用。它适用于第一种形式是一个幸运的意外,因为微软试图与旧的 VB6 架构兼容。
  • 我可以获取一些示例代码吗?
  • Dim frmSongDisplay2 As New ShaneTestFormVersion2(Me) 然后在另一个构造函数中,添加Public Sub New(mainForm As Form)

标签: vb.net forms class title public


【解决方案1】:

你需要传递一个引用。

在您的 ShaneTestFormVersion2 表单中添加一个构造函数:

Public Class ShaneTestFormVersion2
  Private mainForm As Form

  Public Sub New(mainForm as Form)
    InitializeComponent()
    Me.mainForm = mainForm
  End Sub

然后在您的代码中,它将是:

MessageBox.Show(mainForm.Text)

或者您可以使用 Owner 属性:

frmSongDisplay2.Show(Me)

然后在 ShaneTestFormVersion2 表单中,您将使用:

MessageBox.Show(Me.Owner.Text)

【讨论】:

  • 它仍然没有看到它。所以我把你的构造函数放在我的第三种形式中,并将 (Me) 参数添加到第二种形式中,它似乎工作:)
【解决方案2】:

我认为在您的主表单中发生了什么,您将新表单声明为私有,因此其他表单将无法看到彼此。将表单声明为 Friend 并像下面这样引用它

尝试更改您的声明..

Dim frmSongDisplay2 As New ShaneTestFormVersion2

到..

Friend frmSongDisplay2 As New ShaneTestFormVersion2

和..

MsgBox(ShaneTestFormVersion2.Text) 'Second Form opened

到..

MsgBox(MaincontrolWindow.frmSongDisplay2.Text) 'Second Form opened

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多