C# 试图突出显示C文本框时行为不一致

C# 试图突出显示C文本框时行为不一致,c#,winforms,textbox,highlighting,C#,Winforms,Textbox,Highlighting,我正在构建一个C WinForms程序,我的文本框不允许用户在整个程序中一致地突出显示文本 在某些地方,高亮显示工作正常:您在框中键入内容,单击并拖动某些文本,然后高亮显示您拖动的位置 在其他位置,单击并拖动不会选择文本。唯一的方法是双击文本 我没有更改这些文本框的任何默认属性,也没有弄乱任何事件侦听器。我在不同的地方放置了全新的文本框,它们的行为也不同 我想知道它是否与文本框所在表单的属性有关,因为似乎某个特定表单中的所有文本框都可以工作,或者没有。然而,据我所知,所有属性看起来都是一样的,我

我正在构建一个C WinForms程序,我的文本框不允许用户在整个程序中一致地突出显示文本

在某些地方,高亮显示工作正常:您在框中键入内容,单击并拖动某些文本,然后高亮显示您拖动的位置

在其他位置,单击并拖动不会选择文本。唯一的方法是双击文本

我没有更改这些文本框的任何默认属性,也没有弄乱任何事件侦听器。我在不同的地方放置了全新的文本框,它们的行为也不同

我想知道它是否与文本框所在表单的属性有关,因为似乎某个特定表单中的所有文本框都可以工作,或者没有。然而,据我所知,所有属性看起来都是一样的,我不记得做过任何更改

在我看来,这似乎是随机发生的。我找不到关于这个话题的任何信息。有人知道我在说什么吗

编辑:好的,我知道问题出在哪里了,但我仍然不知道如何解决它

它仅在已添加到我的主窗口中的SplitContainer的表单中发生,如下所示:

myForm.TopLevel = false;
this.splitContainer.Panel2.Controls.Add(myForm);
myForm.Show();

编辑2:我现在知道这与这里遇到的问题相同:。被接受的答案对我没有用处,而其他答案似乎不切实际,因为我必须将事件处理程序添加到每个文本框中…

我对您试图实现的目标感到有点困惑。如果我想在SplitPanel上嵌入一些东西,我习惯于使用用户控件;如果我想要子窗体,我习惯于使用MDI窗体

这两种方法中的任何一种对你有效吗?如果不行,你能解释一下为什么不行/你想实现什么吗

谢谢! 詹姆斯

*编辑*

您可以向MDI父窗体添加面板常规面板,而不是拆分面板,并将其停靠在左侧。将SplitContainer左侧面板中当前拥有的内容添加到此左侧停靠面板。现在,您可以实例化表单,将它们设置为主MDI父级的子级,并拥有您正在寻找的所有窗口功能。。。您可以最大化它们,它们将填充MDI父对象的右侧;您可以从窗口菜单中选择层叠或平铺等

如果您想让用户动态调整左侧面板的大小,请将拆分器面板放入主MDI表单容器的右侧部分;默认情况下,它将停靠在左侧,并显示在面板的右侧。现在,当您运行时,可以拖动面板的边框来调整大小

记住,MDI表单与任何其他表单一样。。。您可以将任何想要的控件添加到其表面,而.NET在如何合并子窗口方面非常聪明

如果你仍然不确定我想要描述的是什么,我会尝试找到一个地方,我可以放下一个样本项目。。。因为一切都是在设计器中完成的,所以我没有任何代码可以展示给您。以下是创建窗体作为MDI子级从MDI父级运行的代码:

MyForm frm = new MyForm();
frm.MdiParent = this;
frm.Show();
就这些

嗯!
詹姆斯今天我也有同样的问题。我试着像其他人建议的那样改变TopLevel。这不管用。在搜索过程中的某个地方,我看到了一个建议,建议为文本框创建一个单击事件,并使用它强制聚焦控件。这也没什么区别。没有应拦截和阻止单击事件的事件。它只是一个MDI子对象,上面有几个控件,填充在拆分容器的面板中。但我无法突出显示文本框或文本框派生控件中的文本


原来解决方案是切换childform.Show和panel.Controls.Addchildform的顺序。如果在显示子窗体之前添加它,显然是您导致了此错误。

您是否使用数据绑定或在OnFocus方法上执行任何操作?不,根本没有。我完全困惑了。有趣的是,你能提供一个样本吗?这当然是完全相同的问题。如果您不确信,请使用Spy++。并不是接受的答案不能解决问题。这是我需要的形式边界,以便我可以抓住我的窗口,并移动它周围,它的功能像一个正常的窗口。是的,它起作用了。但这对我没有帮助。基本上,我想做的事情类似于使用MDI表单来创建子表单。但是,我不想将我的子窗体添加到父窗体,而是只需要在右侧面板中打开我的子窗体的SplitContainer,在左侧面板中还有其他操作。SplitContainer没有IsMdiContainer属性,但我可以通过将我的孩子的顶层设置为false,并将他们添加到SplitContainer中,就像原始问题中的代码一样。但是,这导致了我的问题。有什么想法吗?几个月后,当我以全新的眼光重新审视这个问题时,我意识到
ed说你的解决方案确实解决了我的问题。我想我的孩子表单的顶层在某个地方设置为false,这就是问题所在。很抱歉延迟接受您的答复,但非常感谢!该死的,我对此充满了希望,但对我来说,在添加表单之前先显示表单似乎没有什么不同。好主意!