力量把锋利的窗口带到前面?
我有一个小的应用程序在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