尝试突出显示C#TextBox时出现不一致的行为

时间:2010-10-08 16:26:10

标签: c# winforms textbox highlighting

我正在构建一个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。接受的答案对我没用,其他答案似乎不切实际,因为我必须在每个文本框中添加事件处理程序......

2 个答案:

答案 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! 詹姆斯