2016-03-21 14 views
5

Tôi có biểu mẫu Windows, có ngăn chứa lớp khác, có nguồn gốc từ Windows Forms. Điều này được chứa như một điều khiển trong khung. Nó chứa hai nút bên trong chính nó.Chuyển sự kiện nhấp chuột của điều khiển con cho điều khiển chính của phụ huynh

Tôi muốn các sự kiện của điều khiển con được chuyển tới cửa sổ chính. Ví dụ: cửa sổ con trong ngăn có nút Cancel, được cho là đóng. Tôi muốn kiểm soát của cha mẹ, tức là cửa sổ chính cũng đóng, nhưng làm cách nào tôi có thể chặn sự kiện bấm nút của điều khiển con?

Tôi có thể sửa đổi điều khiển con, nhưng chỉ khi không có cách nào khác để đạt được điều này một cách thích hợp, tôi muốn tránh điều đó.

+0

Mô tả mà bạn cung cấp cho câu hỏi là khác nhau mà tiêu đề. Bạn muốn chính xác điều gì? Bạn có muốn tăng sự kiện nhấp của biểu mẫu gốc khi bạn nhấp vào kiểm soát con không? Bạn có muốn đóng biểu mẫu cha mẹ khi bạn nhấp vào một nút trong điều khiển con không? Hay cái gì khác? –

+0

Người dùng sẽ nhấp vào các nút có trên điều khiển con - ngoài một số sự kiện trên điều khiển con, một số hành động cần được thực hiện ngay cả khi kiểm soát cha mẹ, nhưng tôi không chắc chắn là cách tốt nhất để báo hiệu cho kiểm soát của phụ huynh và rằng một số sự kiện đã được kích hoạt trên đứa trẻ. Những hành động này có thể là những hành động chung, chẳng hạn như đóng tất cả các biểu mẫu, thành các hành động phức tạp hơn. Nhưng cha mẹ cần phải biết rằng một sự kiện đã được kích hoạt trên một điều khiển thuộc về điều khiển con. – user1173240

+0

Trong khi bạn có thể tương tác với biểu mẫu gốc trực tiếp từ trẻ em, Tốt hơn là hãy nâng cao một số sự kiện bằng cách kiểm soát trẻ em và đăng ký các sự kiện ở biểu mẫu gốc. –

Trả lời

8

Trong khi bạn có thể tương tác với biểu mẫu gốc trực tiếp từ trẻ, Tốt hơn là hãy tăng một số sự kiện bằng cách kiểm soát trẻ em và đăng ký các sự kiện ở biểu mẫu gốc.

Raise sự kiện từ trẻ em:

public event EventHandler CloseButtonClicked; 
protected virtual void OnCloseButtonClicked(EventArgs e) 
{ 
    var handler = CloseButtonClicked; 
    if (handler != null) 
     handler(this, e); 
} 
private void CloseButton_Click(object sender, EventArgs e) 
{ 
    //While you can call `this.ParentForm.Close()` it's better to raise an event 
    OnCloseButtonClicked(e); 
} 

Theo dõi và sự kiện sử dụng trong các phụ huynh:

//Subscribe for event using designer or in form load 
this.userControl11.CloseButtonClicked += userControl11_CloseButtonClicked; 

//Close the form when you received the notification 
private void userControl11_CloseButtonClicked(object sender, EventArgs e) 
{ 
    this.Close(); 
} 
+0

Cảm ơn bạn vì điều này. Tôi sẽ kiểm tra xem tôi có thể sửa đổi điều khiển con không. – user1173240

+0

Bạn được chào đón :) –

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