2011-10-24 14 views
49

Tôi có một usercontrol tùy chỉnh và tôi muốn làm một cái gì đó tương đối đơn giản.Làm cách nào để tôi thực hiện một sự kiện trong Usercontrol và đặt nó trong biểu mẫu chính?

Khi bao giờ một số lên xuống trong đó giá trị của người dùng kiểm soát thay đổi, có biểu mẫu chính cập nhật một cửa sổ hiển thị.

Đây không phải là vấn đề nếu NUD không nằm trong bảng điều khiển người dùng nhưng tôi không thể tìm ra cách để sự kiện xử lý theo biểu mẫu chính chứ không phải do người dùng kiểm soát.

+1

thể trùng lặp của [Winforms người dùng kiểm soát các sự kiện tùy chỉnh] (http://stackoverflow.com/question/2188059/winforms-user-controls-custom-events) –

Trả lời

100

Bạn cần tạo trình xử lý sự kiện để điều khiển người dùng được nâng lên khi sự kiện từ trong điều khiển người dùng bị kích hoạt. Điều này sẽ cho phép bạn bong bóng sự kiện lên chuỗi để bạn có thể xử lý sự kiện từ biểu mẫu.

Khi nhấp Button1 trên UserControl, tôi sẽ bắn Button1_Click mà gây nên UserControl_ButtonClick về hình thức: kiểm soát

User:

public event EventHandler ButtonClick; 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    //bubble the event up to the parent 
    if (this.ButtonClick!= null) 
     this.ButtonClick(this, e);    
} 

Form: lập bản đồ

UserControl1.ButtonClick += new EventHandler(UserControl_ButtonClick); 

protected void UserControl_ButtonClick(object sender, EventArgs e) 
{ 
    //handle the event 
} 
+3

Tôi không thể chỉnh sửa, nhưng bạn sẽ thay đổi '' UserControl1.OnButtonClick'' thành '' UserControl1.ButtonClick''? –

+0

rất hữu ích, thaks –

+1

hãy chỉnh sửa mã của biểu mẫu: 'ButtonClick' thay vì 'OnButtonClick' – ThunderWiring

15

Hãy thử nó. Hãy thử đặt mã này trong UserControl của bạn:

public event EventHandler ValueChanged { 
    add { numericUpDown1.ValueChanged += value; } 
    remove { numericUpDown1.ValueChanged -= value; } 
} 

sau đó UserControl của bạn sẽ có sự kiện ValueChanged bạn thường thấy với NumericUpDown kiểm soát.

+1

Không sử dụng từ khóa * mới * tại đây. –

10

bạn có thể làm như thế này ..... ví dụ dưới đây cho thấy hộp văn bản (điều khiển người dùng) giá trị thay đổi

// Declare a delegate 
public delegate void ValueChangedEventHandler(object sender, ValueChangedEventArgs e); 
public partial class SampleUserControl : TextBox 
{  
    public SampleUserControl() 
    { 
     InitializeComponent(); 
    } 

    // Declare an event 
    public event ValueChangedEventHandler ValueChanged; 

    protected virtual void OnValueChanged(ValueChangedEventArgs e) 
    { 
     if (ValueChanged != null) 
      ValueChanged(this,e); 
    }  
    private void SampleUserControl_TextChanged(object sender, EventArgs e) 
    { 
     TextBox tb = (TextBox)sender; 
     int value; 
     if (!int.TryParse(tb.Text, out value)) 
      value = 0; 
     // Raise the event 
     OnValueChanged(new ValueChangedEventArgs(value)); 
    }  
} 
Các vấn đề liên quan