[ad_1]
大家好!
我的表单中的文本框有问题。
截图如图http://rghost.ru/5011999/image.png
让我们用一个简单的例子来展示这种情况。
1)用Form1新建一个winforms项目;
2)新建一个Form2,放入TextBox控件;
3)让我们编写简单的代码来创建非模态形式;
Form frm = new Form(); frm.StartPosition = FormStartPosition.CenterParent; frm.TopLevel = false; // here is the problem frm.Parent = this; frm.Show(); frm.BringToFront();
执行此代码后,将出现带有文本框的表单。
在文本框中输入一些内容,例如“这是一个测试”。 现在,尝试用鼠标选择部分或整个文本 – 你不能,因为它不起作用。
是的,您可以通过双击选择整个文本,但之后您无法取消选择它。 此外,如果您只需要选择文本的一部分来删除它怎么办?!
当表单是模态的时,一切工作正常。
备忘录的情况相同,我想其他一些文本控件也是如此。
我需要所有这些,因为我们使用严肃的 MDI 项目,并且在每个 MDI 表单中用户可以打开不同的表单(例如搜索表单)。 当然,我们可以将它们设为模态,但从那时起这将不是真正的 MDI。
请问有什么建议吗?
解决方案3
代替 Parent
和 MdiParent
:
Form2 frm = new Form2(); frm.StartPosition = FormStartPosition.CenterParent; frm.TopLevel = false; frm.MdiParent = this; frm.Show(); frm.BringToFront();
并确保您的主表单有 IsMdiContainer
设置为 true。
—————-
不要因为您没有正确解释您的问题而责怪我们:
如果我从你的评论中很好地理解你有3种形式:
1- MainForm
和 IsMdiContainer
设置为真
2- ChildForm
和 MdiParent
设置 MainForm
3- AnotherChildForm
。 你希望这个成为以下的孩子 ChildForm
。
如果这是正确的,那么您就无法消除该错误。 删除错误 ChildForm
应该 两个都 MdiContainer
和 MdiChild
这是不可能的。 您必须使第三种形式成为 MainForm
,或者不使用表格(也许是 UserControl
或者其他的东西)。
解决方案1
首先,您想通过设置来实现什么目的 TopLevel
到 false
? 你为什么打电话来 BringToFront()
? 当您创建无模式表单时,它会自动显示(它被带到前面)。
其次,听起来您不太了解 MDI 应用程序的本质,也不太了解子窗口与其他窗体之间的相互关系。
第三,如果您要创建一个无模式窗口,应该这样做:
public partial class MyForm { MyModelessForm m_modelessForm = null; private void ShowModelessForm() { if (m_modelessForm == null) { m_modelessForm = new ModelessForm(); // configure the form here if necessary } m_modelessForm.Show(); m_modelessForm.BringToFront(); } }
解决方案2
假设您设置了属性 IsMdiContaine
r 的 Form1
如果为真,您的代码应如下所示:
Form2 frm2 = new Form2(); frm2.MdiParent = this; frm2.Show();
解决方案4
尝试将子窗体的 FormBorderStyle 属性设置为“none”
[ad_2]
コメント