在儿童表格中无法使组合框正常工作? VB

时间:2012-06-20 15:32:17

标签: vb.net combobox parent-child mdichild mdiparent

我花了很长时间试图找到一个解决方案,解决我在子窗体中使用组合框的问题。我确定这一定是微软的错误而不是我做错了...我真的很感激一些帮助,提前谢谢......

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

如果在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中打开)。

组合框和文本框失去了一些功能,例如:  你不能把注意力集中在组合框上而不会下降  2.您无法在组合框或文本框中正确突出显示文本。  3.您无法使用鼠标在组合框或文本框中设置光标索引位置。

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

此致 本

2 个答案:

答案 0 :(得分: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放在面板中已有的任何现有控件或表单上。确保丢弃不需要的控件。

答案 1 :(得分:0)

获得您尝试使用Form2的功能的另一种方法是通过Form1上的IsMdiContainer属性将Form1设置为MDI容器。然后,您可以在Form2按钮中点击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

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

我很好奇你为什么要通过Panel模仿MDI功能?