2011-02-10 70 views
7

ứng dụng winforms của chúng tôi tương tác với MS Word và chúng tôi chạy mã này khi một tài liệu được tạo ra và chúng tôi muốn thể hiện nó trong Word trước ứng dụng của chúng tôi:Tại sao từ không xuất hiện khi chúng tôi kích hoạt?

[setup w as a Word interop object] 

w.Visible = True 
w.Activate() 

Khi tung ra để máy XP chạy Office 2007 hoạt động như dự định.

Trên Máy Win7 chạy Office 2010 tài liệu tải phía sau ứng dụng của chúng tôi và nhấp vào thanh tác vụ.

Bất kỳ ý tưởng nào?

+2

Tôi gặp vấn đề tương tự và sau khi thực hiện một số nghiên cứu qua google, thực tế đây là hành vi thụt lề của Windows từ phiên bản 7. Đây là một loại cơ chế bảo mật để ngăn các ứng dụng khác làm phiền công việc của bạn. Một ứng dụng (chương trình của bạn muốn tương tác với từ) không thể thay đổi thứ tự z của các ứng dụng khác không chạy trong cùng một quá trình. Tôi không thể dán url có thông tin chính thức về điều này - Tôi chỉ nhớ rằng tôi đã tìm thấy địa chỉ này trên mạng một số khi trước đó ... –

Trả lời

7

Tôi tình cờ gặp một vấn đề tương tự gần đây. Chương trình .NET của tôi được gọi là một ứng dụng COM, nhưng trên Win7 nó đôi khi sẽ không hiển thị trên thanh tác vụ hay trên màn hình. Tôi đã không thực sự có thể theo dõi các nguyên nhân gây ra điều này, nhưng tôi đã viết các chức năng sau đây để làm việc xung quanh vấn đề này:

[System.Runtime.InteropServices.DllImport("User32.dll")] 
private static extern bool SetForegroundWindow(IntPtr hwnd); 

private static void BringAppToFront() { 
    foreach (var p in System.Diagnostics.Process.GetProcesses().Where(p => p.ProcessName == "COMInstanceName")) { 
     if (p.MainWindowHandle.ToInt32() != 0) 
      SetForegroundWindow(p.MainWindowHandle); 
    } 
} 
+0

+1 giải pháp tốt! –

2

Đã cùng một vấn đề khi chuyển đổi một ứng dụng từ XP với Word 2002 & 3 đến Win 7 với Word 2010. Tìm thấy các công trình sau đây cho tài liệu đầu tiên bạn mở, sau đó bất kỳ tài liệu mới xuất hiện trong thanh tác vụ nhấp nháy.

Sau khi mở tài liệu Word:

document.Activate(); 
mWordApplication.Activate(); 

foreach (Word.Window window in document.Windows) 
{ 
    window.WindowState = Word.WdWindowState.wdWindowStateMinimize; 
    window.WindowState = Word.WdWindowState.wdWindowStateMaximize; 
} 

Chiến lược là để đi sau khi Window trong đó tài liệu được hiển thị. Giảm thiểu và tối đa hóa sẽ đưa cửa sổ của tài liệu lên phía trước.

Bạn có thể làm tương tự với đối tượng ứng dụng (như được đề xuất ở đây http://www.access-programmers.co.uk/forums/showthread.php?t=173871 lưu ý: tối đa hóa không thu nhỏ không giúp cửa sổ được phóng to), nhưng nếu bạn mở nhiều tài liệu Word, bạn sẽ nghĩ rằng bạn đã giành được một trò chơi solitare trong Windows ...

1

Tôi không có chuyên gia nhưng tôi đã gặp phải vấn đề tương tự này và đã tìm thấy đường đến đây. Tôi không thể nhận được bất kỳ trong những giải pháp khác để làm việc nhưng tôi chỉ tìm thấy một câu trả lời cho vấn đề của tôi ở đây ...

http://david.gardiner.net.au/2010/05/bad-old-days-of-vba-and-opening-word.html

Tôi chỉ cần thêm một dòng như sau (các dòng trong nghiêng đậm) vào mã và Word tài liệu của tôi mở ra trước mặt Excel trên Win 7 máy chạy Office 2010:

Dim wordApplication

Set wordApplication = CreateObject ("Word.Application")

Application.ActivateMicrosoftApp xlMicrosoftWord

Thông tin thêm về lý do tại sao các công trình này tại liên kết ở trên.

0

w.Visible = True w.Activate()

trình đối với tôi tốt !!!

Xem các lý do khác.

ví dụ

Dim oWord As Microsoft.Office.Interop.Word.Application = New  Microsoft.Office.Interop.Word.Application 
Dim oDoc As Microsoft.Office.Interop.Word.Document = oWord.Documents.Open(Path) 
Dim range As Microsoft.Office.Interop.Word.Range = oDoc.Range 
range.Find.Execute("[NUM]", False, False, , , , , , , _NUM_, 2, False,) 
oWord.Visible = True 
oWord.Activate() 

tài liệu nói đến phía trước.

Các vấn đề liên quan