我正在构建一个C#WinForms程序,我的文本框不允许用户在整个程序中一致地突出显示文本。
在某些地方,突出显示正常工作:您在框中键入内容,单击并拖动某些文本,然后突出显示您拖动的位置。
在其他地方,单击并拖动不会选择文本。唯一的方法是双击文本。
我没有更改这些文本框的任何默认属性或与任何事件侦听器混淆。我把全新的文本框放在不同的地方,它们的行为也不同。
我想知道它是否与包含TextBox
的表单的属性有关,因为看起来似乎所有特定形式的文本框都有效,或者没有。但是,据我所知,物业看起来是一样的,我永远不记得改变任何东西。
对我而言似乎是随机发生的。我找不到有关该主题的任何信息。有人知道我在说什么吗?
编辑:好的,我知道问题出在哪里,但我仍然不知道如何修复它。
只有在我的主窗口中添加到SplitContainer
的表单中才会出现这样的情况:
myForm.TopLevel = false;
this.splitContainer.Panel2.Controls.Add(myForm);
myForm.Show();
编辑2:我现在知道这是遇到的问题:Windows Forms: Unable to Click to Focus a MaskedTextBox in a Non TopLevel Form。接受的答案对我没用,其他答案似乎不切实际,因为我必须在每个文本框中添加事件处理程序......
答案 0 :(得分:2)
我今天遇到了同样的问题。我尝试按照其他人的建议更改TopLevel
。这没用。在我搜索的某个地方,我看到了一个建议,即为文本框创建一个click事件,并使用它来强制关注控件。这没有任何区别。没有事件可以拦截和阻止点击事件。它只是一个MDI孩子,它上面有几个控件,塞在分体式容器的面板上。我不能突出显示文本框或文本框派生控件中的文本。
原来解决方案是切换childform.Show()
和panel.Controls.Add(childform)
的顺序。如果在显示之前添加子表单,则显然会导致此错误。
答案 1 :(得分:1)
我对你想要完成的事情感到有些困惑。如果我想在SplitPanel
上嵌入某些内容,并且如果我想要子表单,则使用MDI表单,我习惯使用用户控件。
这些方法中的任何一种都适合您,如果没有,您能解释为什么不能/您想要完成什么?
谢谢! 詹姆斯
*编辑*
您可以将面板(常规面板,而不是拆分面板)添加到MDI父窗体并将其停靠在左侧。将SplitContainer左侧面板中的当前内容添加到此左对接面板中。现在,您可以实例化表单,将它们设置为主MDI父项的子项,并具有您正在查找的所有窗口功能...您可以最大化它们,它们将填充MDI父项的右侧;你可以从窗口菜单中选择级联或平铺等。
如果要让用户动态调整左侧面板的大小,请将拆分器面板放入主MDI表单容器的右侧部分;它将默认停靠,并显示在面板的右侧。现在,当您运行时,可以拖动面板的边框以调整大小。
请记住,MDI表单就像任何其他表单一样......您可以在表面添加任何您想要的控件,.NET非常聪明地了解它如何合并子窗口。
如果你仍然不确定我想要描述什么,我会试着找到一个我可以放弃一个示例项目的地方...因为一切都是在设计师中完成的,所以没有任何代码我可以告诉你。以下是将表单创建为MDI子代的代码(在MDI父级中运行):
MyForm frm = new MyForm();
frm.MdiParent = this;
frm.Show();
这就是它的全部内容。
HTH! 詹姆斯