2

我花了很长时间试图找到解决我在子窗体中使用组合框时遇到的问题的方法。我确定这一定是 Microsoft 错误,而不是我做错了什么......我真的很感激一些帮助,在此先感谢......

解释这个问题的最好方法是告诉你我到目前为止做了什么:

如果您在 VB 中打开一个新项目并添加两个 Windows 窗体。Form1 将是父级。Form2 将是孩子。

在 Form1 上添加 1 个面板(Form2 将在面板内打开,因此请确保面板足够大以适合 Form2)和 1 个按钮。此表单所需的唯一代码是:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Form2.Show()

End Sub

在 Form2 上添加一个文本框和一个组合框。将以下代码复制到 Form2 中:

Private Sub Form2_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus

    ActivateMdiChild(Me)

End Sub

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    TopLevel = False
    Form1.Panel1.Controls.Add(Me)
    Me.BringToFront()

End Sub

现在运行程序并单击 button1 打开 form2(form2 现在应该在 panel1 中打开)。

组合框和文本框失去了一些功能,例如: 1. 您不能在不点击下拉菜单的情况下将焦点设置在组合框上 2. 您无法在组合框或文本框中正确突出显示文本。3. 您无法在组合框或文本框中使用鼠标设置光标索引位置。

有谁知道解决这个问题的方法??主要用于组合框,因为我有一些适用于文本框的功能。

问候,本

4

2 回答 2

0

您的点击事件可能看起来像这样:

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
  Dim f As New Form2
  f.TopLevel = False
  f.Dock = DockStyle.Fill
  f.Visible = True
  Panel1.Controls.Add(f)
  f.BringToFront()
End Sub

而且您几乎可以丢弃您为 Form2 发布的代码。将作为父级的 MDI 子级的窗体移动到面板的子级控件有点尴尬。我猜这不是你真正想要做的。

此外,此当前代码将继续在面板中已有的任何现有控件或表单上放置一个新的 Form2。确保处理掉不需要的控件。

于 2012-06-20T15:48:17.687 回答
0

另一种获得您想要使用的功能的方法Form2是通过属性设置Form1为 MDI 容器IsMdiContaineron Form1Form2然后,您可以通过以下方式调用Form1按钮单击:

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim f As New Form2()
    f.MdiParent = Me
    f.Show()
End Sub

这显然会在Form2您每次单击 Button1 时创建一个新实例,因此您可以将单击操作更改为Form2.Show()并在Form2构造函数中设置MdiParentForm1。那应该只创建一个Form2.

我很好奇您为什么要通过面板模仿 MDI 功能?

于 2012-06-20T16:46:55.077 回答