2009-11-27 8 views
6

Tôi hiện đang tạo mô-đun in im lặng. Điều khiển hiện tại tôi đang sử dụng là, nó đảm bảo rằng tay cầm điều khiển đã được tạo (IsHandleCreated). Tôi đã làm tất cả mọi thứ để ăn gian này mà không có may mắn chút nào.Buộc tạo xử lý cho Điều khiển

Bạn có ý tưởng nào về cách tôi có thể tạo một điều khiển cho điều khiển mà không hiển thị bất kỳ màn hình nào trong màn hình không?

Trả lời

4

Cố gắng quá tải CreateParams tài sản getter. Trong đó xóa cờ WS_VISIBLE.

+1

Tôi thấy rằng this.CreateHandle(); hoạt động thực sự tốt (từ bên trong biểu mẫu) – NewfrontSolutions

0

Tôi đã giải quyết vấn đề tạo khó chịu này bằng cách cài đặt WS_VISIBLE của CreationParams. Bạn có thể ghi đè thuộc tính ControlParams của Control hoặc gọi phương thức CreateHandle với cá thể CreateParams thích hợp. Xem link

19

Bạn phải truy cập thuộc tính Xử lý (đặt kết quả vào biến giả hoặc thứ gì đó). Nhìn vào Reflector; nó buộc xử lý sự sáng tạo.

+0

Ha, nó hoạt động. Mẹo tốt! –

+0

Cảm ơn! Điều đó hoạt động giống như nét duyên dáng :) – Mnyikka

2

tôi đã cùng một vấn đề với một số điều khiển khác và sử dụng các phương pháp Control.CreateControl():

private void CheckForExistingHandle(Control control) 
{ 
    if (!control.IsHandleCreated) 
     control.CreateControl(); 
} 

Nhưng tôi không biết làm thế nào nó hoạt động với một mô-đun in.

+5

Đảm bảo thuộc tính hiển thị của điều khiển được đặt thành true hoặc tay cầm sẽ không được tạo từ cuộc gọi 'CreateControl()'. Xem http://msdn.microsoft.com/en-us/library/system.windows.forms.control.createhandle%28v=VS.90%29.aspx để biết thêm thông tin. – Drahakar

+0

@ Drahakar Đó là một lưu ý rất tốt: 'CreateControl' có thể chọn không tạo điều khiển. Cách giải quyết ghi chú trên MSDN là truy cập thuộc tính '.Handle' –

0

Gọi phương thức riêng tư CreateHandle sẽ thực hiện công việc.

MethodInfo ch = frm.GetType().GetMethod("CreateHandle", BindingFlags.NonPublic | BindingFlags.Instance); 
ch.Invoke(frm, new object[0]);