- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,我一直在 stackoverflow 和其他互联网论坛和知识库上搜索类似的主题,但到目前为止,我一直没有解决这个问题,我已经苦苦挣扎了整整一个星期。这是代码:
private void matrículasToolStripMenuItem_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1();
form1.Show();
form1.MdiParent = this; // this == the main form of the aplication, wich has IsMdiParent property set to true.
}
如果我取出“form1.MdiParent = this”,form1 的显示事件将正常触发,执行其所有处理程序的内容,但如果我让它在那里,form1 的显示事件将不会触发(我确实设置了断点,没有一个被触发)。
奇怪的是,如果我使用 Load 事件而不是 Shown,一切正常,但我有点担心如果将 Shown 换成 Load 会破坏某些东西:(。
最佳答案
试试这段代码
Form1 form1 = new Form1();
//Subscribe event here
form1.MdiParent = this;
form1.Show();
这对我有用
我不知道为什么你的代码不起作用,我会在得到答案后回来。
编辑:我现在得到了答案。
ISynchronizationInvoke 的
成员(Invoke
和BeginInvoke
)由Control
类实现如下。
RegisterWindowMessage
生成新的窗口 messageIdThreadMethodEntry
中添加到控件内部的Queue
RegisterWindowMessage
使用 PostMessage
返回的 messageId 将消息发布到线程队列WndProc
监听 messageId
,然后将 ThreadMethodEntry
出队并调用委托(delegate)。What goes wrong here?
Form1 form1 = new Form1(); form1.Show(); form1.MdiParent = this;
Form.Show
以某种方式导致调用 OnLoad
方法,即使用 BeginInvoke
OnShown
的地方
if (base.IsHandleCreated)
{
base.BeginInvoke(new MethodInvoker(this.CallShownEvent));//reflected code
}
因此,在发送的 WindowMessage
收到您设置 form1.MdiParent = this;
之后,这反过来会强制控件 Destroy
它的句柄和 ReCreate
新句柄。
DestroyHandle
方法通过使用 PeekMessage
函数获取已发布的消息,然后枚举 Queue
中的所有元素并将其状态设置为已完成不调用委托(delegate)但将其标记为抛出 ObjectDisposedException
。
Form1 form1 = new Form1();
form1.Show();
Action del = () =>
{
Console.WriteLine("This will never be called");//our custom delegates too fails to be invoked
};
var res = form1.BeginInvoke(del);
//after some more code
form1.EndInvoke(res);//throws `ObjectDisposedException` which was marked previously
form1.MdiParent = this;
抛出 ObjectDisposedException("Control")
实际上是误导,不是吗?
注意:您可以在 form1.MdiParent = this;
之前使用 Application.DoEvents();
轻松解决此问题,因为 DoEvents
处理所有立即等待消息。
关于c# - 设置窗体的 MdiParent 属性会中断/阻止触发其 Shown 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18321590/
我有一个主窗体,其中包含一个用于打开子窗体的菜单: public Le_MainForm() { InitializeComponent(); this.IsMdiContainer = tr
我有一个主窗体,其中包含一个用于打开子窗体的菜单: public Le_MainForm() { InitializeComponent(); this.IsMdiContainer = tr
有什么方法可以轻松地平铺 mdi parent 的所有表单 child 吗?我正在寻找 windows 提供的大部分功能,瓷砖级联。有谁知道一个简单的方法? 最佳答案 试试这些... // Tile
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Cross-thread operation not valid 我正试图从另一个线程关闭表单的基础。我收到
我正在使用下面的代码设置 MdiParent 窗体的背景图像,它运行良好,但是当我单击最大化按钮时,背景图像在右侧和底部边缘重复(即右侧和底部图像部分重复) ,如何避免这种情况并正确显示图像? pub
我正在尝试开发一个应用程序,上面有一个 MDIParent 和几个 MDIchilds。我想在我的 MDIParent 上创建一个全局变量,并且我希望该变量可以从其子项访问。 我该怎么做? 最佳答案
我的父 mdi 窗体中有一个控件,如果所有 mdi 子窗体都已关闭,我希望它能获得焦点。我已经尝试连接到子窗体的 FormClosed 事件并从那里设置焦点,但是当我测试它时,当我关闭 mdi 子窗体
我当时正在开发一个库存软件,突然发现我需要一些主窗体,我应该通过它打开所有其他窗体,所以我创建了一个名为 frmMainPanel 的窗体,并使用菜单条将它链接到另一个窗体,我成功了在链接它们但它们在
我有 MdiParent 表单,其中有 Menu 和 Submenu如果我使用以下代码使用子菜单选项打开 Form B,则父窗体是 Say Form A B addbill = new B(); B.
我有一个 MDIform 应用程序,其中一个名为 MainForm 的窗体被设置为父窗体。每次我打开一个新窗体时,我都会关闭其他窗体,并使用自定义方法来完成此操作,该方法获取 3 个参数,其中一个是代
如何处理子表单中的 MDIParent 表单事件?例如,在父表单中,我有一个选项“在子网格上搜索”,当该按钮被点击时,在子表单中,网格上的一行获得焦点。 我正在使用 C# 3.5 Windows 窗体
当用户试图打开已在 MDIParent 中打开的子窗体时,我想避免我的子窗体出现多次。避免这种情况的一种方法是禁用 Controller (在我的例子中是 BUTTON),但我也为此功能提供了一个快捷
所以,我一直在 stackoverflow 和其他互联网论坛和知识库上搜索类似的主题,但到目前为止,我一直没有解决这个问题,我已经苦苦挣扎了整整一个星期。这是代码: private void
我有两个后台线程和一个线程来处理在我的 WinForms 应用程序上运行的最小化。当程序关闭时,我使用这种方法。 private void MyForm_Closing(object sender,
我需要从 MdiChild (frmB) 窗体打开模态窗体 (frmD) 而不会阻塞主窗体 (frmA) 和所有其他打开的 MdiChild 窗体 (frmC)。然后我切换到 frmC,frmD 是隐
我是一名优秀的程序员,十分优秀!