2011-10-24 15 views
49

मेरे पास एक कस्टम उपयोगकर्ता नियंत्रण है और मैं अपेक्षाकृत सरल कुछ करना चाहता हूं।मैं उपयोगकर्ता नियंत्रण में कोई ईवेंट कैसे कर सकता हूं और इसे मुख्य फ़ॉर्म में संभाला है?

जब कभी भी उस उपयोगकर्ता नियंत्रण के मूल्य में कोई संख्यात्मक वृद्धि नहीं होती है, तो मुख्य फ़ॉर्म एक डिस्प्ले विंडो अपडेट करता है।

यह कोई समस्या नहीं है यदि एनयूडी उपयोगकर्ता नियंत्रण में नहीं था, लेकिन मुझे यह पता लगाना प्रतीत नहीं होता कि मुख्यफॉर्म द्वारा ईवेंट को कैसे प्रबंधित किया जाए और उपयोगकर्ता नियंत्रण नहीं।

+1

[Winforms उपयोगकर्ता कस्टम घटनाओं को नियंत्रित करता है] के संभावित डुप्लिकेट (http://stackoverflow.com/प्रश्न/2188059/winforms-user-control-custom-events) –

उत्तर

100

उपयोगकर्ता नियंत्रण के भीतर से कोई ईवेंट निकाल दिए जाने पर आपको उठाए गए उपयोगकर्ता नियंत्रण के लिए एक ईवेंट हैंडलर बनाने की आवश्यकता है। यह आपको श्रृंखला को घटना को बुलबुला करने की अनुमति देगा ताकि आप फॉर्म से ईवेंट को संभाल सकें।

जब UserControl पर Button1 क्लिक करें, मैं Button1_Click जो फार्म पर UserControl_ButtonClick चलाता है आग होगी:

उपयोगकर्ता नियंत्रण:

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);    
} 

प्रपत्र:

UserControl1.ButtonClick += new EventHandler(UserControl_ButtonClick); 

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

मैं संपादन नहीं कर सकता, लेकिन क्या आप 'UserControl1.OnButtonClick'' को' UserControl1.ButtonClick'' में बदल देंगे? –

+0

बहुत उपयोगी, thaks –

+1

कृपया फॉर्म के कोड को संपादित करें: 'OnButtonClick' – ThunderWiring

15

कोशिश यह मानचित्रण। अपने UserControl में इस कोड को रखने का प्रयास करें:

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

फिर अपने UserControlValueChanged घटना आप सामान्य रूप से NumericUpDown नियंत्रण के साथ देखना होगा।

+1

* नया * कीवर्ड यहां उपयोग न करें। –

10

आप इस तरह से कर सकते हैं ..... नीचे दिए गए उदाहरण पाठ बॉक्स (उपयोगकर्ता नियंत्रण) मूल्य

बदल चलता
// 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)); 
    }  
}