我花了很长时间试图找到一个解决方案,解决我在子窗体中使用组合框的问题。我确定这一定是微软的错误而不是我做错了...我真的很感激一些帮助,提前谢谢......
解释问题的最好方法是告诉你到目前为止我做了什么:
如果在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.您无法使用鼠标在组合框或文本框中设置光标索引位置。
有没有人知道解决这个问题的方法?主要用于组合框,因为我有一些功能用于文本框。
此致 本
答案 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
构造函数中设置MdiParent
到Form1
。这应该只创建一个Form2
的实例。
我很好奇你为什么要通过Panel模仿MDI功能?