Ove*_*hed 2 vb.net parent-child maskedtextbox winforms
就像标题所说,我有一个Child表单,其TopLevel属性设置为False,我无法单击它包含的MaskedTextBox控件(为了引起焦点).我可以通过在键盘上使用TAB来关注它.
子窗体包含其他常规TextBox控件,这些我可以单击聚焦没有问题,虽然它们也表现出一些奇怪的行为:例如,如果我在文本框中有一个值,我尝试从结尾拖动单击字符串到开头,没有任何反应.实际上我根本无法使用鼠标将光标移动到TextBox的文本中(尽管键盘箭头键可以工作).
我不太担心奇怪的TextBox行为,但为什么我不能通过点击激活我的MaskedTextBox?
以下是显示表单的代码:
Dim newReportForm As New Form
Dim formName As String
Dim FullTypeName As String
Dim FormInstanceType As Type
formName = TreeView1.SelectedNode.Name
FullTypeName = Application.ProductName & "." & formName
FormInstanceType = Type.GetType(FullTypeName, True, True)
newReportForm = CType(Activator.CreateInstance(FormInstanceType), Form)
Try
newReportForm.Top = CType(SplitContainer1.Panel2.Controls(0), Form).Top + 25
newReportForm.Left = CType(SplitContainer1.Panel2.Controls(0), Form).Left + 25
Catch
End Try
newReportForm.TopLevel = False
newReportForm.Parent = SplitContainer1.Panel2
newReportForm.BringToFront()
newReportForm.Show()
Run Code Online (Sandbox Code Playgroud)
我尝试了你的代码,这次得到了一个很好的repro.正如我在原帖中所提到的,这确实是一个窗口激活问题.您可以在Spy ++中看到这一点,请注意WM_MOUSEACTIVATE消息.
发生这种情况是因为您使用标题栏显示表单.这说服Windows窗口管理器可以激活窗口.这实际上不起作用,它不再是顶级窗口.从标题栏可见,它永远不会被"窗口激活"颜色绘制.
您必须从表单中删除标题栏.最好将此行添加到您的代码中:
newReportForm.FormBorderStyle = Windows.Forms.FormBorderStyle.None
Run Code Online (Sandbox Code Playgroud)
这会将表单转换为与UserControl无法区分的控件.您仍然可以使用此代码使其与众不同:
newReportForm.ControlBox = False
newReportForm.Text = ""
Run Code Online (Sandbox Code Playgroud)
修复解决了鼠标点击问题.