问题标签 [mdichild]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C#以多种形式使用类对象更改类中的所有变量
我有一个 MDI 应用程序。其中一种形式需要能够同时打开它的多个实例。在这个应用程序中,我有一个程序类。对于表单的每个实例,我需要在每个表单中放置一个 Program 对象。这是可行的,但是,每次更改数据时,它都会更改表单的所有多个实例中的所有 Program 对象。
这是 Program 类(目前非常简单的类):
}
这是表单的代码:
这是 CheckMdiChildren 方法:
.net - VB.Net 3.5 MDI 应用程序 - 使用 N 内存后 MDIChild 表单停止打开
我希望有人可以提供帮助!
我们有一个相当大的 VB.Net MDI 应用程序,它是从 VB6 转换而来的。当它第一次在没有打开 MDIChild 表单的情况下运行时,它使用了大约 35,000K。随着越来越多的表单打开(但未关闭),内存使用量(根据任务管理器)以每个表单大约 4,000K 的速度攀升。(我知道 TM 只显示为应用程序分配的内存,而不是实际使用的内存。)
问题是,当分配的内存达到某个点时,这取决于目标机器上的可用内存,在一个或多个打开的表单关闭之前,无法打开更多表单。可以打开的表单数量的“限制”似乎取决于机器的可用内存。
例如: - 在整个机器只有 512M 的虚拟机上,它似乎是大约 7-8 个表格,当这种情况发生时,分配的内存大约是 80,000K。- 在我们的终端服务器机器上,它有 3GB 并且还运行各种其他口渴的应用程序,它停止在大约 20 多个表单和大约 100,000 - 105,000K 的内存分配。
我尝试使用 perfmon 来查看是否存在泄漏,这表明使用稳定。
但是,即使我关闭表单,分配的内存也只会下降大约 3000K,第一个表单关闭,然后每个表单关闭 100K。如果我再添加一些表格,内存会增加,如果我关闭一些相同的 -3000K,-100K 内存减少模式再次发生。
有没有人遇到过这个?任何人都可以帮忙,因为这看起来有点像一场表演赛!我期待着您的回复。
顺便说一句,原始的 VB6 版本没有这个问题,并且如果您关闭每个表单,它的内存分配也会返回到它开始的位置,而不是因为应用程序释放的数量少于分配的数量,分配会逐渐增加。
编辑:我刚刚在开发中遇到了同样的错误。似乎在 UserControl 中引发了 WIN32Exception。错误是“创建窗口句柄时出错”。
谢谢和亲切的问候,杜安。
vb.net - GotFocus() 和 MDI 儿童
我有一个带有 3 个子窗口的 MDI 表单。
MDI 开始为空。
每个孩子可以从菜单中打开一次。
当我打开多个窗口并关闭顶部的窗口时,应该获得焦点,但是新的活动子窗体的 GotFocus() 事件没有触发。
c# - c#主菜单和mdi表单
到目前为止,作为一名 .net 开发人员,我大量使用 mdi 表单来显示特定的“菜单点”,例如“模块 1”“模块 2”等。
我一直在这样做:
- 创建一个将“isMdiContainer”设置为“true”的父表单
- 在 mdi 容器中创建一个菜单条
- 创建一个实现单例的子表单,以便表单只显示一次
- 将类似以下代码的内容添加到 mdi 容器中:
}
现在,这显然工作正常。但是维护起来很痛苦。每次我想添加另一个子表单时,我必须:
- 实现单例
- 在mdi容器中创建对应的属性
- 获取实例并设置 mdi 父级
- 单击其他按钮时隐藏新表单
- 单击相应按钮时显示表单并隐藏所有其他表单
有什么更优雅的方法,或者说更有效的方法来归档它?
vb.net - 在客户区单击时,MDI 子窗体未激活
我的 VB.NET 应用程序支持多种 MDI 子窗体。有些种类,但不是其他种类,是“麻烦的”——它们导致焦点机制变得奇怪。一旦打开了一个“麻烦的”子窗体,除非我单击标题栏或边框,否则不会激活任何 MDI 子窗体。在客户区域中单击不会激活子窗体——它的标题栏保持灰色,并且它没有接收到 Activate 或 GotFocus 事件。然而,奇怪的是,被点击的表单实际上确实接收到焦点,因为它的控件接收鼠标和键事件。只有 Z-Order 和突出显示不会改变。
一旦出现此问题,即使在关闭“麻烦”表单后它仍然存在,并且会影响随后打开的子表单。然而,如果所有的子窗体都关闭了,问题就解决了,新的子窗体运行正常——直到出现下一个“麻烦的”窗体。
我不知道为什么一种儿童形式很麻烦,而另一些则不然。
任何建议将不胜感激。
focus - MDI 子窗体不允许其他子窗体获得焦点
该应用程序是一个 MDI 容器应用程序。加载时特定的子窗体 (Form1) 获得焦点并且不会释放焦点。如果打开另一个表单,如果 Form1 表单打开,用户将无法选择该表单中的任何字段。
此外,在 Form1 中,即使将焦点设置到同一表单上的另一个字段,焦点也不会离开组合框。
我没有使用 ShowDialog 并且 TopMost 设置为 false。
delphi - 在 Delphi 中控制 fsMDIChild 窗口的位置
如何在 Delphi 或 C++Builder 中控制 MDI 子窗口 (FormStyle := fsMDIChild) 的位置?我知道我可以设置 Left、Top、Position 等,但特别是对于 MDI 子项,这些在窗口已经创建并显示在其默认位置之后才会生效。结果是一次创建和定位多个窗口会导致相当多的闪烁,因为窗口是在默认位置创建的,然后立即移动和调整大小。
通过深入研究 VCL 源代码,我能够找到的唯一解决方案是覆盖 TCustomForm 的 CreateParams 方法并更改 Params 参数的 X、Y、Width 和 Height 字段,但这感觉就像一个 hack。有更清洁的方法吗?
c# - 合并 MDI 窗口的菜单条项目
如何合并具有相同菜单名称的父窗体和子窗体的菜单项?
c# - Windows MDI 子窗体未在 WIndowMaximized 状态下打开
我已将窗体设置为 MDI 窗体的子窗体,该窗体的 WindowState 设置为最大化。
当我从 MDI 容器打开该表单时,它不会以最大化状态打开。为什么会发生这种情况,我怎样才能使其最大化打开?
这就是我从 mdi 容器中显示子表单的方式。
c# - MDI表单中的控件问题
我在 MDI 窗体上放置了一个按钮,现在当我打开一个子窗体时,按钮仍然在顶部并分散子窗体的注意力,有没有办法解决它?当任何孩子被激活时,我已经完成了以下操作以将按钮发回。但我想调用 button1.BringToFront();
我尝试了以下但它不起作用。
我认为它是 .net 的一个持久错误,有很多帖子试图解决它,使用带有面板的停靠栏等,但停靠只是为了一个按钮会使应用程序的工作空间更少。