gpt4 book ai didi

vb.net - Windows 窗体 : Unable to Click to Focus a MaskedTextBox in a Non TopLevel Form

转载 作者:行者123 更新时间:2023-12-02 00:08:34 24 4
gpt4 key购买 nike

如标题所示,我显示了一个子窗体,其 TopLevel 属性设置为 False,并且我无法单击它包含的 MaskedTextBox 控件(以便将焦点集中到它)。不过,我可以通过使用键盘上的 TAB 来将焦点集中到它上。

子窗体包含其他常规文本框控件,我可以毫无问题地单击这些控件来聚焦,尽管它们也表现出一些奇怪的行为:例如,如果我在文本框中有一个值,并且我尝试从从字符串末尾到开头,什么也没有发生。事实上,我根本无法使用鼠标在 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()

最佳答案

我尝试了你的代码,这次得到了很好的重现。正如我在原来的帖子中提到的,这确实是一个窗口激活问题。您可以在 Spy++ 中看到这一点,注意 WM_MOUSEACTIVATE 消息。

发生这种情况是因为您显示带有标题栏的表单。这使 Windows 窗口管理器相信该窗口可以被激活。这实际上不起作用,它不再是顶级窗口。从标题栏可以看出,它永远不会用“窗口激活”颜色绘制。

您必须从表单中删除标题栏。最好通过将此行添加到您的代码中来完成:

    newReportForm.FormBorderStyle = Windows.Forms.FormBorderStyle.None

这会将表单变成一个与 UserControl 无法区分的控件。您仍然可以通过使用以下代码来使其与众不同:

    newReportForm.ControlBox = False
newReportForm.Text = ""

任一修复都可以解决鼠标点击问题。

关于vb.net - Windows 窗体 : Unable to Click to Focus a MaskedTextBox in a Non TopLevel Form,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2875075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com