Tag: mdi

为什么会覆盖.GetHashCode在WinForms中清除这些数据绑定值?

我们遇到了一个奇怪的错误,我们在调试时遇到了问题。 我们有一个使用Microsoft CAB,DevExpress组件和.Net 3.5的MDI工作区。 如果用户在工作区中打开两个窗口,每个窗口包含绑定到两个单独数据模型的UserControl ,则最小化它们,第一个最小化窗口是在第二个窗口最小化时清除它的绑定字段。 数据模型的.Equals和.GetHashCode方法已被覆盖,因此两个数据模型都被认为是相等的。 如果我们改变它以使它们是唯一的,我们就不会得到这种行为。 这是一些显示问题的示例伪代码 var a = new MyWindow(); a.DataModel = new SomeClass(123); a.ShowInMdiWorkspace(); var b = new MyWindow(); b.DataModel = new SomeClass(123); b.ShowInMdiWorksace(); a.Minimize(); // If SomeClass.GetHashCode() is overwritten to consider two objects // as equal based on the value passed in, then the data bindings for A // […]

如何在nonMDI类中设置Child表单的MDIParent属性?

我正在研究具有子表单的MDI应用程序。 一旦满足某些条件,我必须显示子窗口。 我创建了一个名为clsDashbord的单独的类, 它有方法loadDashboard() ,它应该加载已设计的frmDashboard。 代码如下: public void loadDashboard(String userName) { _Dashboard = new frmDashboard(); _Main = new frmMDI(); // _Dashboard.MdiParent = _Main; _Dashboard.Text = userName; _Dashboard.Show(); } 如果我将MDIParent设置为Main ,这是MDI Form的实例变量,则不显示表单,否则显示。 怎么做?

在MDIParent 中使跨线程操作无效

可能重复: 跨线程操作无效 我试图从另一个线程关闭表单的基础。 我收到以下错误。 System.InvalidOperationException:跨线程操作无效:从创建它的线程以外的线程访问控制’MDIParent’。 对于以下行: MDIParent.MDIParentRef.BaseClose();

MDI窗口列表不更新子标题栏文本

我有一个MDI容器表单,以及一些独立更新标题栏文本的子表单。 在子窗体上更改Text属性后,打开菜单时,窗口列表菜单中不会更新子窗口中的新标题栏文本。 这是.NET通过MdiWindowListItem属性提供的自动生成的窗口列表。 只有当另一个事件在物理上更改窗口列表(打开一个新子项,关闭一个子项,切换到另一个子项)时,更改才会传播。 有没有办法以编程方式强制更新窗口列表? 我已经有一些代码可以在改变孩子的标题栏文本的同时进行菜单启用/禁用。 我尝试了以下但没有成功: 主MenuStrip上的Update() 主MenuStrip上的Refresh() MenuStrip窗口上的Invalidate() 在运行时对其中一个窗口列表项进行Invalidate() 在运行时在其中一个窗口列表项上切换Checked状态两次 似乎没有任何其他远程可行的函数来调用菜单项,其父ToolStrip或包含菜单系统的父窗体。

MDI优点和缺点

我inheritance了我现在工作的前一个开发人员的应用程序框架。 该框架利用多个父/子关系。 在许多情况下,父/父/子出现。 我问他为什么不使用MDI,并且他说多年前,当他开始时,MDI在前面提到的关系情景方面存在重大缺陷。 特别是与多个父母。 我的实际问题是; MDI还有这些缺点吗? 那些与MDI合作的人,你有什么问题,你是如何克服它们的? 谢谢!

寻找桌面应用程序的Visual Studio工具箱样式导航

我正在开发一个项目,该项目使用带有导航面板的MDI应用程序。 目前它是一个ListView。 但是,我想重新设计它类似于visual studio 2008中的工具箱。 如果这需要覆盖默认的paint方法,那么如果你能提供一些关于如何使用paint方法的好参考,那也会有所帮助,因为我目前没有任何使用它的经验。 提前致谢。

.Owner属性和ShowDialog(IWin32Window所有者)之间的区别?

我假设可以通过.Owner属性显式设置winform的所有者,或者通过在重载方法ShowDialog中传递所有者(IWin32Window所有者) 我无法理解为什么这些方法在使用MDI表单时表现出不同的行为。 我创建了一个MDIParent和一个MDIChild。 我还有一个简单的winform MyDialogBox,可以在加载时显示其所有者。 MessageBox.Show(“Dialog’s owner is ” + this.Owner.Name); 方法A – 在MDIChild的加载中我有以下代码,这导致MyDialogBox的所有者被设置为MDIChild MyDialogBox box = new MyDialogBox(); box.Owner = this; // Set owner as MDIChild box.ShowDialog(); 方法B – 或者,在MDIChild的加载方法中,我有以下代码,它导致MyDialogBox的所有者被设置为MDIParent MyDialogBox box = new MyDialogBox(); box.ShowDialog(this); // Pass MyMDIChild as owner 我也在这里阅读以下内容 只有MDI父窗体可以拥有另一个窗体,无论是MDI子窗口,模式对话框还是将父窗口设置为所有者参数的窗体。 如果是这样,方法A根本不起作用,不是吗? 我错过了什么? 为什么方法B没有将所有者设置为MDIChild?

将表单添加到MDI子项

在Form1我启用了IsMdiContainer并添加了一个MenuStrip 。 在Form1_Load我“新” Form2 ,我正在将Form2.MdiParent Form2.MdiParent给Form1 。 我也最大化Form2 ,这个操作运行良好。 在Form2我在表单的左侧有一个treeView ,在表单的右侧,我想显示许多具有各种编辑function的不同表单,这些表单将取决于在treeView选择的节点或级别。 我想创建许多不同的表单来编辑将在Form2显示的数据,具体取决于treeView的选择。 我似乎无法向MdiChild添加表单,我一直在看一些post,在表单中添加表单可能会产生一些我不确定的编程问题。 我真的没有任何代码可以粘贴到这篇文章中,因为除了Mdi Parent和Child关系之外似乎没有任何工作,这很简单。 在此先感谢您的帮助。

当Child处于活动状态时,禁用MDI Parent

我在我的软件菜单条中,当用户点击时我想打开另一个子窗口,但我想禁用父窗口,这意味着只需关闭或点击kk使其再次可用。 我当前的代码打开表单但不会使父禁用 if (about == null) { about = new aboutForm(); about.ShowDialog(this); } 我试过about.ShowDialog(); 它会引发错误 我感谢任何可能的代码解决方案

我想从Windows MDI子窗体中删除图标

与图标有关的问题相同。 我满意你的回答,即seticon属性为false。 但我的表单是MDI表单的子表单,然后这个问题仍然是相同的,图标不会被删除。 你能帮助我吗。