C# 链接两个关于z索引的表格
我有两种形式,它们的业务逻辑相互关联。我希望第二个在第一个之后,只要我关注第一个,反之亦然 为了让我的问题更清楚,我将描述我想要这个链接的原因。 第一种形式表示数据库对象的形式,第二种形式表示链接到此特定对象的PDF文档的查看器。正如您所理解的,我希望避免混淆,如果用户打开两对表单(两个数据库对象),并且第一个对象的第一个表单显示在第二个对象的PDF文档旁边,就会发生混淆 到目前为止,我已经创建了一个名为C# 链接两个关于z索引的表格,c#,winforms,focus,z-index,C#,Winforms,Focus,Z Index,我有两种形式,它们的业务逻辑相互关联。我希望第二个在第一个之后,只要我关注第一个,反之亦然 为了让我的问题更清楚,我将描述我想要这个链接的原因。 第一种形式表示数据库对象的形式,第二种形式表示链接到此特定对象的PDF文档的查看器。正如您所理解的,我希望避免混淆,如果用户打开两对表单(两个数据库对象),并且第一个对象的第一个表单显示在第二个对象的PDF文档旁边,就会发生混淆 到目前为止,我已经创建了一个名为FormPair的类,它包含两个表单作为属性,并且我在每个表单的Focus事件上添加了一个事
FormPair
的类,它包含两个表单作为属性,并且我在每个表单的Focus
事件上添加了一个事件处理程序,它执行以下操作:
BringToFront()
是一个很好的解决方案,但当我两次调用它(在第二个窗体上,然后在第一个窗体上)时,它会闪烁一点。最后,我使用了user32.dll
中的一个名为SetWindowPos
的外部方法,创建了一个我自己的新的bringToFront方法,它一点也不闪烁,让我感觉这两种形式都是相互链接的。下面是它(X的所有内容都是自定义类/枚举/结构):
在哪里
然后在FormPair
public partial class XFormPair
{
// properties
public XForm leftForm { get; set; }
public XForm rightForm { get; set; }
// events
private void rightFormActivated(object sender, EventArgs e)
{
leftForm.bringToFront();
rightForm.bringToFront();
}
private void leftFormActivated(object sender, EventArgs e)
{
rightForm.bringToFront();
leftForm.bringToFront();
}
}
您是否尝试过
TopMost=true代码>?或者,至少,BringToFront()
?
public struct XFormZIndex
{
public static IntPtr
NoTopMost = new IntPtr(-2),
TopMost = new IntPtr(-1),
Top = new IntPtr(0),
Bottom = new IntPtr(1);
}
[Flags]
public enum XWindowPositionFlag : uint
{
SWP_ASYNCWINDOWPOS = 0x4000,
SWP_DEFERERASE = 0x2000,
SWP_DRAWFRAME = 0x0020,
SWP_FRAMECHANGED = 0x0020,
SWP_HIDEWINDOW = 0x0080,
SWP_NOACTIVATE = 0x0010,
SWP_NOCOPYBITS = 0x0100,
SWP_NOMOVE = 0x0002,
SWP_NOOWNERZORDER = 0x0200,
SWP_NOREDRAW = 0x0008,
SWP_NOREPOSITION = 0x0200,
SWP_NOSENDCHANGING = 0x0400,
SWP_NOSIZE = 0x0001,
SWP_NOZORDER = 0x0004,
SWP_SHOWWINDOW = 0x0040,
}
public partial class XFormPair
{
// properties
public XForm leftForm { get; set; }
public XForm rightForm { get; set; }
// events
private void rightFormActivated(object sender, EventArgs e)
{
leftForm.bringToFront();
rightForm.bringToFront();
}
private void leftFormActivated(object sender, EventArgs e)
{
rightForm.bringToFront();
leftForm.bringToFront();
}
}