2009-07-14 30 views
7

Tôi đang viết một lớp nhỏ để lái thử nghiệm tích hợp của một ứng dụng biểu mẫu giành chiến thắng. Lớp trình điều khiển thử nghiệm có quyền truy cập vào Biểu mẫu chính và tìm kiếm điều khiển cần được sử dụng theo tên và sử dụng nó để lái thử nghiệm. Để tìm điều khiển, tôi đang đi qua cây Control.Controls. Tuy nhiên, tôi gặp khó khăn khi tôi muốn điều khiển trong cửa sổ hộp thoại (một biểu mẫu tùy chỉnh được hiển thị dưới dạng hộp thoại). Làm thế nào tôi có thể giữ nó?Tôi làm cách nào để có được tham chiếu đến biểu mẫu phương thức hoạt động hiện tại?

Trả lời

20

Bạn có thể lấy tham chiếu đến biểu mẫu hiện đang hoạt động bằng cách sử dụng thuộc tính tĩnh Form.ActiveForm.

Chỉnh sửa: Nếu không Form có tiêu điểm, Form.ActiveForm sẽ trả lại null.
Một cách để làm được việc này là sử dụng bộ sưu tập Application.OpenForms và lấy mục cuối cùng, phù thủy sẽ là hoạt động Form khi nó được hiển thị bằng ShowDialog:

// using Linq: 
lastOpenedForm = Application.OpenForms.Cast<Form>().Last() 
// or (without Linq): 
lastOpenedForm = Application.OpenForms[Application.OpenForms.Count - 1] 
+0

Có vẻ như trả về null cho dù tôi có làm gì. Bất kỳ ý tưởng? – Grzenio

+0

Cập nhật câu trả lời khi không có Biểu mẫu nào tập trung –

+0

Application.OpenForms hoạt động, cổ vũ – Grzenio

0

Tôi không chắc liệu bạn có thể truy cập các điều khiển trên hộp thoại được tạo trước hay không; họ dường như tất cả đóng gói với nhau. Bạn có thể có thêm may mắn xây dựng một hộp thoại của riêng bạn mà làm những gì bạn muốn nó làm. Sau đó, bạn có thể truy cập vào .Controls bên trong của nó.

+0

Có, tôi đang sử dụng biểu mẫu tùy chỉnh được hiển thị dưới dạng hộp thoại – Grzenio

0

Đúng tôi nếu tôi là sai, mặc dù, có vẻ như bạn đang cố gắng truy cập vào các điều khiển trên biểu mẫu hộp thoại khi nó không hoàn toàn có thể.

Ý của tôi là, ShowDialog sẽ "giữ" chuỗi mà biểu mẫu được tạo và sẽ không trả lại quyền kiểm soát cho ứng dụng (hoặc lớp thử nghiệm của bạn) cho đến khi ShowDialog xử lý xong, trong trường hợp đó mã người dùng của bạn sẽ tiếp tục trên con đường của nó.

Hãy thử truy cập hoặc thao tác các điều khiển từ một chuỗi riêng biệt (trong trường hợp này, cấu trúc lại lớp trình điều khiển thử nghiệm để sinh ra một chuỗi riêng biệt cho mỗi biểu mẫu mới phải được hiển thị và thử nghiệm).

+0

Có, tôi đã tạo một chuỗi mới, vì vậy nó không bị chặn. Tôi cũng đang tìm câu trả lời được cung cấp bởi @Julien Poulin – Grzenio

+0

Ngoài ra nếu bạn vứt bỏ mẫu cha mẹ, phương thức vứt bỏ sẽ chạy ngay cả với một dạng thức hoạt động. Có thể bạn có thể muốn truy cập vào mẫu phương thức sau đó. – mike100111

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