Hiya - 由我的一位朋友指出你们。我有一个MDI应用程序(C#,Winforms,.NET 2.0,VS2005,DevExpress 8.2),我的一个表单行为非常奇怪 - 没有正确重绘自身,它与同一个表单类的另一个实例重叠。MDI儿童刷新/重新绘制问题(C#,Winforms,.NET 2.0,VS2005,DevExpress 8.2)
表单包含一个自定义控件(其中包含各种DevExpress控件),并从基本窗体继承而来(它本身是继承的)。
由于表单继承问题(旧的栗子),在构造函数中有一些控制重新排列正在进行。
问题1(次要):除非重新调整窗体大小,否则此控件重新定位/调整大小似乎不起作用,所以在重新排列后我将宽度向上和向下微移一个像素。丑,哈克,我真的很喜欢不必这样做。
问题2(主要): 如果显示窗体,然后使用API调用SetParent附加到MDI窗体,当我显示第二个实例时,两个窗体的各个部分在它们重叠的位置未正确绘制 - 最重要的是落后于现有的 - 当表格移动时,这个问题变得更糟,使得它们基本上不可用。其他儿童形式(如果存在)的不同类型似乎不受影响...
停止按钮:我已经确定它不必是2个子窗体的实例。只有一个问题还存在问题 - 主要是在表单的边缘,比如正在刷新的区域比表单本身小。
如果使用子窗体的.MDIParent属性设置父项,则不会发生此问题 - 但由于窗体可能由托管在非.Net应用程序中的控件显示,因此我们无法执行此操作。此外,即使现有的(不同类型的)子项最大化,并且只能使用SetParent,我也需要显示非最大化的子窗体。
我已经尝试刷新()在这种类型的所有形式(我有一个控制器,它们的列表),但没有喜悦。我试图从具有相同继承结构的基本应用程序中重现此效果,但我不能。显然这是关于表单的东西 - 因为我昨天从头重新创建表单,它仍然是一样的,它必须是代码 - 但是什么?
我不是最热门的表格绘画活动等,所以我错过了什么?
你太......太大了,我咀嚼不了。 Prob1尝试使用户界面无效,以便重新绘制。和形式继承...坏行为。 – Gishu 2008-11-28 10:45:18
我试过Invalidate() - 这只是Refresh(),但延迟到一个方便的点。刷新()似乎并没有做很多好事。 表单继承是一个好主意*。这是VS的实现sux。叹。控制似乎没问题,这就是我被诱惑的原因。 – kpollock 2008-11-28 11:54:12