2013-05-03 32 views
5

Tôi đang tạo Autocad Plugin chạy tốt bằng cách sử dụng Windows Forms Và tôi đã tạo một user control (winforms) để nhân rộng dưới mọi hình thức mà tôi thích trong tương lai.Tải ứng dụng chạy Kiểm soát Biểu mẫu Windows

Câu hỏi đặt ra là

Từ mã của kiểm soát, làm thế nào để tôi có được thể hiện của các ứng dụng đang chạy điều khiển?

(Có lẽ một winforms vấn đề thuần túy)

Coditions:

Trong plug-in Tôi có thể lấy ví dụ Autocad ứng dụng không có vấn đề.

Điều khiển người dùng này có nghĩa là để được tham chiếu trong ứng dụng trình cắm, do đó không có quyền truy cập trực tiếp vào phiên bản ứng dụng.


Một lời giải thích chút về kịch bản:

Có một Main Assembly được chạy bởi Autocad như một plug-in. Việc lắp ráp đó có ứng dụng Autocad được khởi tạo.

Bây giờ tôi có một số điều khiển biểu mẫu hữu ích để hoạt động với Autocad và chúng nằm trong một separate assembly. (Đó là vì tôi muốn sử dụng chúng trong nhiều plug-in khác nhau mà tôi thích).

Vì vậy, Autocad chạy main assemblymain assembly điều khiển của separate assembly.

Để hoạt động bình thường, các điều khiển đó cần có quyền truy cập vào ứng dụng Autocad đang chạy main assembly.

Hôm nay tôi sử dụng ứng dụng làm tài sản trong các điều khiển, mà tôi phải đặt trước khi làm việc với chúng. (Nếu tôi quên đặt điều đó, ngoại lệ sẽ được nâng lên). Vì tôi không thể có quyền kiểm soát với người tạo tham số.

Tôi muốn các điều khiển để phát hiện ứng dụng đang chạy của chúng, do đó tôi tránh được cách giải quyết đó.

+0

Tôi không chắc chắn về lý do bạn muốn ứng dụng của ứng dụng. Có lẽ, nếu bạn có thể giải thích kịch bản của bạn trong ngắn hạn, thì điều đó sẽ giúp ích cho bạn. Lớp System.Windows.Forms.Application cho thấy các phương thức tĩnh có thể giúp bạn. Trong trường hợp đó, hãy xem http://msdn.microsoft.com/en-us/library/system.windows.forms.application(v=vs.100).aspx – Jatin

+0

Có nó đi, thêm kịch bản. –

+0

Tôi không nghĩ rằng Autocad api cung cấp cho bạn quyền truy cập vào các đối tượng ứng dụng Windows. Tôi đã phải đối mặt với vấn đề tương tự trong khi phát triển một ứng dụng wpf. Tôi đã kết thúc việc tạo một Ứng dụng như được hiển thị trong bài đăng này - http://stackoverflow.com/questions/13658711/caliburn-micro-in-no-application-object-mode-like-in-autocad-dll-plugin. Nếu màn hình của bạn không tương tác với màn hình AutoCAD, thì bạn có thể thử một cách tiếp cận tương tự. – Jatin

Trả lời

2

Xin xem đoạn mã sau

public class MyCommands { 

    [CommandMethod("NS", "TEST", "TEST", CommandFlags.Modal)] 
    public void TestCommand() // This method can have any name 
    { 
     Form fromAutoCADAPI = new TestForm(); 
     Form independent1 = new TestForm(); 
     Form independent2 = new TestForm(); 

     //Using AutoCAD application 
     Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog(fromAutoCADAPI); 

     independent1.Show(); 
     independent2.Show(); 

     //Using Windows Forms Application 
     var count = System.Windows.Forms.Application.OpenForms.Count; //should be 3 

     Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(count.ToString()); 

    } 
} 

Nếu đây là những gì bạn đã biết, sau đó có thể bạn nên dán một số mẫu mã mà sẽ giúp hiểu nơi đặc biệt bạn đang bị mắc kẹt trong mã của bạn. Đây là cách tôi đã sử dụng ứng dụng AutoCAD và ứng dụng Windows Forms. Trong trường hợp bạn không muốn lấy ứng dụng WPF thì bạn có thể sử dụng

var application = System.Windows.Application.Current; 
+0

Giả sử 'TestForm' được khai báo trong một assembly ngoài (dll), không phải là assembly của plugin này. Và TestForm cần sử dụng cá thể 'Autodesk .... Application'. Tôi có thể, từ mã này bạn đã cho thấy, làm một cái gì đó như 'independent1.AcadApp = AcadAppInstance'. Ok –

+0

Nhưng, những gì tôi muốn là TestForm 'chính nó' để tìm ra ứng dụng. Ý tôi là 'từ bên trong mã TestForm'. Vì vậy, nó sẽ giống như một 'độc lập1.GetAcadApplicationRunningMe()'. Tất nhiên nó sẽ được sử dụng trong nội bộ, bởi vì bên ngoài tôi có thể dễ dàng lấy ứng dụng. –

+0

Tôi không thể kiểm tra ngay bây giờ, nhưng tôi sẽ xem xét sau. Tôi có thể sử dụng 'System.Windows.Forms.Application' từ bên trong' UserControl' không? Lưu ý rằng tôi không có ứng dụng Winforms rõ ràng. Tôi chỉ có hai thư viện. Một là plug-in, mà các cuộc gọi khác chứa các điều khiển. –

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