【问题标题】:How to make a windows form to come front in windows application done in c#?如何使一个 Windows 窗体在 C# 中完成的 Windows 应用程序中出现在前面?
【发布时间】:2009-09-28 02:05:49
【问题描述】:

我在我的 Windows 应用程序中完成了一个全局鼠标事件。当我单击鼠标的中心按钮时,我想在最上面制作一个特定的表单...

有些应用程序在全屏模式下运行,所以我需要这样做,以使我的表单对用户可见,因为这是查看它的唯一方法。由于 Alt + Tab 已禁用。这是一个 Kiosk 应用程序。

我尝试将 Topmost = true 用于该特定表单,并且 我尝试使用下面的代码......但没有用。我的表格没有放在前面。

  [DllImport("User32.dll")]
  public static extern Int32 SetForegroundWindow(int hWnd);     

  [DllImport("user32.dll")]
  public static extern int FindWindow(string lpClassName, string  lpWindowName);                        

     private void BringToFront(string className,string CaptionName)
    {
        SetForegroundWindow(FindWindow(className,CaptionName));
    }

必须触发此表单的全局热键工作正常。

如何让我的表单出现在前面???谢谢。

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    我解决了,这样做:

    this.TopMost = true;
    this.TopMost = false;
    

    【讨论】:

    • 这对我有用,但我必须先执行“this.BringToFront()”
    【解决方案2】:

    不是我的菜,但你有没有尝试过:

    this.BringToFront();
    
    this.Activate();
    

    【讨论】:

      【解决方案3】:

      获取窗口句柄并执行此操作

      SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE| SWP_SHOWWINDOW);

      【讨论】:

        【解决方案4】:

        您需要将全屏表单的最顶层设置为 false,然后继续。

        【讨论】:

          【解决方案5】:

          您可能没有正确调用您的 BringToFront 方法。对于 FindWindow API 函数,lpClassName 将是您的应用程序的名称(例如“MyApplication.exe”),而 lpWindowName 是指特定表单标题栏中的标题(例如“Form1”)。通常使用 FindWindow 你传入一个或另一个,例如:

          FindWindow("MyApplication.exe", null);
          // or
          FindWindow(null, "Form1");
          

          我不确定当你同时通过两者时会发生什么。

          您可能还需要做一些简单的事情来实现这一点,比如调用特定表单的 Activate() 方法。

          【讨论】:

          • 我认为你应该发布一些额外的代码。我不确定你在做什么才能处于信息亭模式。在 Windows 中显示表单并更改其在 z 堆栈中的位置非常简单且基本,但您可能会做一些奇怪的事情。
          • @MusiGenesis,我不能在这里发布我的整个代码,因为有很多。是的,这对我来说也很奇怪......我的系统上将会有另一个应用程序以全屏模式运行。当用户单击鼠标中心按钮时,我需要一种向用户显示我的表单的方法。我通过添加“HI”消息框将鼠标中心按钮测试为全局事件。它运行良好。唯一的事情是,我现在需要出示我的表格。注意::我显示表单的代码不在同一个表单中,它在不同的位置。这有什么问题吗??
          • @karthik:不,我认为您的问题在于 other 应用程序以全屏模式运行。它可能以某种方式阻止您的任何表格出现。消息框是另一回事 - 这是一种全局 Windows 功能,消息框通常显示在信息亭应用程序的顶部。这个其他应用程序如何执行信息亭模式?
          • @MusiGenesis,我怀疑以全屏模式运行的应用程序是否会阻止我的表单出现在顶部...我怎样才能使用 alt + tab 将我的表单放在上面?有没有办法像消息框一样使用全局窗口功能显示我的表单?
          • 消息框显示在信息亭应用的顶部,因为它们是由操作系统本身创建和显示的,并且不能被信息亭应用以任何方式“阻止”。
          猜你喜欢
          • 1970-01-01
          • 2011-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-07
          • 1970-01-01
          相关资源
          最近更新 更多