2013-06-11 32 views
6

Tôi đang cố gắng để có một đối tượng WinTable và đúc nó vào loại đối tượng có nguồn gốc của nó như vậy:Lớp đối tượng gốc từ WinControl?

CustomControl control = (CustomControl) this.UIMap.UIMainWindow.UICustomControl.NativeElement; 

Sau đó, tôi muốn để điều trị kết quả CustomControl như tôi sẽ trong mã nguồn cho chương trình của tôi như control.DoAThing(), Tôi đã tham chiếu .dll chứa lớp CustomControl nhưng vấn đề là .NativeElement; đang trả về loại Object[] chứ không phải là Object như số definition of the function nói điều đó nên.

Có phải là .NativeElement cách hay tôi hiểu nhầm mục đích của nó?

UPDATE: Tôi đã kiểm tra các loại của các đối tượng trong kết quả Object[] và là một trong những đầu tiên của loại System.__ComObject và thứ 2 là System.Int32 nhưng tôi không chắc chắn những gì một trong những đại diện cho ...

+0

Có vẻ như bạn không nhận được đối tượng được quản lý, nhưng chỉ cần điều khiển com nằm trong và một số nguyên (dự định là con trỏ) cho điểm vào của đối tượng. (đó là một cách ngẫu nhiên cũng là lý do tại sao thực hiện điều này đòi hỏi sự tin tưởng đầy đủ cho người gọi ngay) Tôi đoán là '.NativeElement' không được phép làm những gì bạn mong đợi. 'CustomControl' là gì? Bạn đã tự viết lớp đó chưa? –

+0

@TimothyGroote Không, nó là sự kiểm soát của bên thứ ba. Tuy nhiên, tôi có quyền truy cập vào mã nguồn. –

+0

Tôi khá chắc chắn rằng kể từ khi Array kế thừa Object, Array aka Object [] là một đối tượng và không thực sự vi phạm kiểu trả về – MPavlak

Trả lời

0

Sẽ hữu ích nếu bạn đã đăng mã cho các lớp học CustomControlUICustomControl của mình. Dựa trên sự hiểu biết mơ hồ của tôi về vấn đề của bạn, những điều sau đây có thể hoạt động: hãy thử và đăng kết quả.

object[] native = 
    this.UIMap.UIMainWindow.UICustomControl.NativeElement as object[]; 
if ((native[0] != null) && (native[0] is IAccessible)) { 
    IAccessible a = native[0] as IAccessible; 
    if (a is CustomControl) 
     CustomControl control = (CustomControl)a; 
} 
+0

Bạn đảm bảo rằng mục đầu tiên trong mảng thậm chí được xác định, hãy để một mình đối tượng bạn đang tìm kiếm? –

+0

Tôi đã thử điều này trước đây, kết quả là một thông báo lỗi nói rằng một tham chiếu đối tượng đã không được đặt aka 'IAccessible a = native [0] như IAccessible;' không hoạt động. Tôi không nghĩ rằng việc đăng mã kiểm soát tùy chỉnh có liên quan trong trường hợp này, về mặt lý thuyết vấn đề của tôi có thể được áp dụng cho bất kỳ điều khiển nào bao gồm các điều khiển Windows Forms mặc định. –

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