力量把锋利的窗口带到前面?

我有一个小的应用程序在C# .NET中开发,操纵Excel表,我不知道为什么有些用户告诉我,当他们打开Excel文件的窗口不出现在前面/顶部,虽然我把可见性设置为真窗口状态最大化。

这是读取excel文件的函数:

 public static void OpenExcel(string fileName, bool visibility, FunctionToExecute fn = null) { string addInPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Microsoft\\AddIns\\mDF_XLcalendar.xla"); deleg = fn; app = new Excel.Application(); app.Workbooks.Open(addInPath); app.Workbooks.Open(fileName); app.ScreenUpdating = true; app.DisplayAlerts = true; app.Visible = visibility; app.UserControl = true; app.WindowState = Excel.XlWindowState.xlMaximized; EventDel_BeforeBookClose = new Excel.AppEvents_WorkbookBeforeCloseEventHandler(application_WorkbookBeforeClose); EventSave_BeforeBookClose = new Excel.AppEvents_WorkbookBeforeSaveEventHandler(Open_ExcelApp_WorkbookBeforeSave); app.WorkbookBeforeClose += EventDel_BeforeBookClose; app.WorkbookBeforeSave += EventSave_BeforeBookClose; } 

有任何想法吗 ?

我会尝试通过激活excel窗口

 app.ActiveWindow.Activate(); 

如果这不起作用,您可以在http://social.msdn.microsoft.com/上find其他解决scheme(涉及Native WinAPI调用)。

我发现这个工作。 如何把一个Excel应用程序的前面

 [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll", SetLastError = true)] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); public static void BringExcelWindowToFront(Application xlApp) { string caption = xlApp.Caption; IntPtr handler = FindWindow(null, caption); SetForegroundWindow(handler); } 

有时,如果在Excel中同时打开多个文件, ActiveWindow.Activate()将不起作用。

一个成功的窍门是尽量减less然后最大化命令。

有一点我知道,但为什么需要使用FindWindow,Windows的句柄可以通过应用程序访问:

 [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool SetForegroundWindow(IntPtr hWnd); public static void BringExcelWindowToFront(Application xlApp) { SetForegroundWindow((IntPtr)xlApp.Hwnd); // Note Hwnd is declared as int } 

如果多个窗口具有相同的标题,则不会有问题。

一些魔术,对我有用:

 Excel.Application.WindowState = -4140 Excel.Application.WindowState = -4137