C# 单击始终位于顶部的可编辑表单

C# 单击始终位于顶部的可编辑表单,c#,winforms,overlay,windows-8.1,C#,Winforms,Overlay,Windows 8.1,我正在尝试创建一个始终位于顶部的表单,它是透明的、可点击的,并且纯粹用于绘制永不失去焦点的信息,因此它始终显示在顶部。这样做的目的是能够在我的屏幕上绘制信息,这些信息将一直位于其他窗口的顶部,很可能只是简单的文本,但不会阻止我在仍然可见的情况下与其他程序交互 我遇到的麻烦是让表格始终处于顶部,尽管其他程序都是重点。我尝试过使用最顶层的属性,但似乎不起作用,也尝试过让窗口重新聚焦非焦点,但这似乎有点草率,无论如何都不起作用。如果有什么关系,我使用的是Windows 8.1 非常感谢您的回复。您必须

我正在尝试创建一个始终位于顶部的表单,它是透明的、可点击的,并且纯粹用于绘制永不失去焦点的信息,因此它始终显示在顶部。这样做的目的是能够在我的屏幕上绘制信息,这些信息将一直位于其他窗口的顶部,很可能只是简单的文本,但不会阻止我在仍然可见的情况下与其他程序交互

我遇到的麻烦是让表格始终处于顶部,尽管其他程序都是重点。我尝试过使用最顶层的属性,但似乎不起作用,也尝试过让窗口重新聚焦非焦点,但这似乎有点草率,无论如何都不起作用。如果有什么关系,我使用的是Windows 8.1


非常感谢您的回复。

您必须使用扩展的windows样式,此代码演示了如何执行此操作

此窗体将鼠标交互传递给它后面的窗体,即使其他最顶端的窗口处于活动状态,也将显示为最顶端

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    const int GWL_EXSTYLE = -20;
    const int WS_EX_TRANSPARENT = 0x20;

    [DllImport("user32.dll", CharSet=CharSet.Auto)]
    extern static int GetWindowLong(IntPtr hWnd, int nIndex);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    extern static int SetWindowLong(IntPtr hWnd, int nIndex, int nStyle);

    private void Form1_Load(object sender, EventArgs e)
    {
        var style = GetWindowLong(this.Handle, GWL_EXSTYLE);
        var newStyle = style | WS_EX_TRANSPARENT;

        SetWindowLong(this.Handle, GWL_EXSTYLE, newStyle);
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        this.BringToFront();
    }
}
对于用户来说,与表单交互是一个小技巧,您必须提供有关您尝试执行的操作的更多详细信息,以便我们提供帮助


要始终显示窗口,请设置一个间隔为100ms的计时器,并将form属性TopMost设置为true。

您希望它位于设置为始终位于顶部的其他程序之上,还是仅位于未设置为始终位于顶部的程序之上?前者你不能真正做到,后者当然可以。最好是在每个程序之上,但在那些没有设置为始终处于顶端的程序之上,也可能会起作用。当你说设置“最顶端”不起作用时,它在什么方面不起作用,因为这正是你所需要的吗?当窗口的焦点丢失时,我的覆盖会落后于其他程序。也许这是windows 8.1的问题?相关:,这既不是确保窗口始终位于顶部的可靠方法,也不是从一开始就尝试这样做的有效方法。这是其中一款游戏,唯一的赢家不是玩游戏。只需使用此代码即可。WS_EX_透明使窗口的鼠标事件转到它后面的窗口(按要求单击可通过)。它确实有效,请创建一个表单并自己尝试,如果它不起作用,我将删除答案。问题表明OP已经能够使其表单透明。他在使自己的状态成为顶级状态时遇到了问题。这就是问题的全部。为了确保,我在它后面的窗口中编辑了代码,它保持在顶部,我的代码窗口没有失去焦点,我还将任务管理器置于选中“始终在顶部”的位置,并且我的窗口仍然可见。(我现在正在使用Windows7)现在问问自己,如果另一个窗口与您的操作完全相同,那么会发生什么,以及您的表单是否会保持在顶部。或者,如果另一个窗体挂接到windows焦点事件并抑制它,或者其他任意数量的选项,该怎么办。试图打“超级顶级”的战斗是一个可怕的想法,你不应该一开始就这么做。