gpt4 book ai didi

c# - 在其他所有内容后面显示一个表单,而不窃取焦点?

转载 作者:太空狗 更新时间:2023-10-29 21:35:37 26 4
gpt4 key购买 nike

StackOverflow 上存在一个关于如何在不转移焦点的情况下显示表单的问题。答案是覆盖 ShowWithoutActivation 并返回 true:

protected override bool ShowWithoutActivation
{
get { return true; }
}

这很好用。

现在我想更进一步。我想要显示一个表单(即使其可见),但让它在 z 顺序中落后于其他表单。

在 .net 中可能吗?

如果不行,可以使用 P/Invoke 吗?

奖金聊天

调用 SendToBack() 无效:

   RunnerForm frm = new RunnerForm();
// frm.Show();
frm.Visible = true;
frm.SendToBack();

最佳答案

一点 PInvoke 使用 SetWindowPos function

public static class HWND {
public static readonly IntPtr
NOTOPMOST = new IntPtr(-2),
BROADCAST = new IntPtr(0xffff),
TOPMOST = new IntPtr(-1),
TOP = new IntPtr(0),
BOTTOM = new IntPtr(1);
}

public static class SWP {
public static readonly int
NOSIZE = 0x0001,
NOMOVE = 0x0002,
NOZORDER = 0x0004,
NOREDRAW = 0x0008,
NOACTIVATE = 0x0010,
DRAWFRAME = 0x0020,
FRAMECHANGED = 0x0020,
SHOWWINDOW = 0x0040,
HIDEWINDOW = 0x0080,
NOCOPYBITS = 0x0100,
NOOWNERZORDER = 0x0200,
NOREPOSITION = 0x0200,
NOSENDCHANGING = 0x0400,
DEFERERASE = 0x2000,
ASYNCWINDOWPOS = 0x4000;
}

[DllImport("user32.dll")]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);

private void button1_Click(object sender, EventArgs e) {
RunnerForm frm = new RunnerForm();
SetWindowPos(frm.Handle, HWND.BOTTOM, 0, 0, 0, 0, SWP.SHOWWINDOW | SWP.NOMOVE | SWP.NOOWNERZORDER | SWP.NOSIZE | SWP.NOACTIVATE);
}

关于c# - 在其他所有内容后面显示一个表单,而不窃取焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9334963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com