2012-02-10 14 views
12

मेरे पास एक बहुत ही रोचक कार्य है जिसके लिए मुझे सहायता चाहिए। विवरण निम्नानुसार है:मैं उपयोगकर्ता नियंत्रण से कस्टम ईवेंट कैसे फायर करूं?

मेरे पास उपयोगकर्ता नियंत्रण (SomeUserControl) है, जिसका उपयोग मैं मुख्य विंडो में कर रहा हूं। मैं अपने आवेदन को पूरी तरह से SomeUserControl पर लिखता हूं, और मुख्य विंडो कुछ यूज़र कंट्रोल होस्ट कर रही है और कुछ भी नहीं।

अभी मेरे पास एक शटडाउन बटन है (कुछ यूज़र कंट्रोल में), जो मुख्य विंडो को बंद करना है। इसका कारण यह है कि मैं कुछ यूज़र कंट्रोल से एप्लिकेशन को बंद करने के लिए कुछ भी नहीं चाहता, लेकिन कुछ यूज़र कंट्रोल से एक ईवेंट को आग लगाना, और मुख्य विंडो इसे प्राप्त करती है, और मुख्य विंडो कुछ यूज़र नियंत्रण के बजाय एप्लिकेशन बंद कर देगी।

मैं इसे कैसे कर सकता हूं? मैं कस्टम घटनाओं को बनाने और संभालने की अवधारणा से परिचित नहीं हूं, इसलिए यदि कोई इसे शब्दों में और कोड में उदाहरण के रूप में समझा सकता है, तो मैं आपके लिए बहुत आभारी रहूंगा!

संपादित करें: यहां तक ​​कि मेरा कोड अब तक है।

(विंडो में 2)

Public Event CloseApp As EventHandler

Private Sub CancelButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CancelButton.Click 
    DialogResult = False 
    RaiseEvent CloseApp(Me, New EventArgs) 
End Sub 

(मुख्य विंडो में) लोक loginPage न्यू LoginPage

Public Sub New() 
    InitializeComponent() 
    AddHandler loginPage.CloseApp, AddressOf Me.ShutDownJobChangeWindow 
End Sub 

Private Sub ShutDownJobChangeWindow(ByVal sender As Object, ByVal e As EventArgs) 
    Application.Current.Shutdown() 
End Sub 

लक्ष्य के रूप में: मैं जब मैं क्लिक करें अनुप्रयोग को बंद करना चाहते हैं विंडो 2 में रद्द करें, लेकिन मैं ऐसा नहीं करना चाहता हूं कि विंडो 2 स्वयं बंद हो जाए, लेकिन मुख्य विंडो में कुछ अधिसूचना भेजकर, और मुख्य खिड़की आवेदन बंद कर देता है।

public delegate void ShutdownEventHandler (object sender, EventArgs data); 
public event ShutdownEventHandler Shutdown; 
protected void OnShutdown(EventArgs args) 
{ 
    if(Shutdown != null) 
     Shutdown(this, args); 
} 

तो फिर तुम MainWindow में शटडाउन घटना की सदस्यता, और वहाँ बंद तर्क संभाल:

उत्तर

14

यदि उपयोगकर्ता नियंत्रण कक्ष के "कोड पीछे" में उपयोगकर्ता नियंत्रण का तर्क लागू किया गया है, तो निम्न कार्य करें। पीछे SomeUserControl वर्ग के लिए

<Button Click="Button_Click">Close App</Button> 

फिर, अपने कोड में, निम्न करें:

मैं XAML फाइल है एक बटन एक क्लिक करें घटना के साथ यह मानते हुए कि कर रहा हूँ कहीं

public partial class SomeUserControl : UserControl 
{ 
    public event EventHandler CloseApp; 

    ... 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     if(CloseApp != null) { 
      CloseApp(this, new EventArgs()); 
     } 
    } 
} 

में अपने मुख्य विंडो, घटना को सुनें:

... 

someUserCtrl.CloseApp += new EventHandler(MyFn); 

private void MyFn(object sender, object EventArgs e) { 
    ... 
} 
+0

समाधान AkselK प्रदान किए गए समाधान की तरह, मैं इसे वीबी में कैसे कर सकता हूं? विशेष रूप से अगर (CloseApp! = null) में हिस्सा। क्योंकि इंटेलिजेंस सिर्फ CloseApp नहीं ढूंढ सकता है। - will0809 20 मिनट पहले – will0809

+0

मेरे पास एक ही प्रश्न है लेकिन मैं एमवीवीएम का उपयोग कर रहा हूं, इसलिए मैं इसका उपयोग नहीं कर सकता: - someUserCtrl.CloseApp + = new EventHandler (MyFn); इसके बजाय मैंने एमवीवीएम लाइट लाइब्रेरी का उपयोग किया और मेरे मेनविंडो में एक ईवेंट ट्रिगर जोड़ा क्योंकि < /i :Interaction.Triggers> लेकिन यह काम नहीं करता है। –

1

यह करने के लिए सबसे आसान तरीका है एक कस्टम ईवेंट घोषित करने के लिए है। और कुछ यूज़र कंट्रोल में, जब आप अपना एप्लिकेशन बंद करना चाहते हैं तो आप बस ऑनशूटडाउन चलाते हैं।

+1

मैं इसे उन लोगों के लिए वीबी में परिवर्तित कर रहा हूं जिनकी आवश्यकता है। 'लोक प्रतिनिधि उप ShutdownEventHandler (इस वस्तु के रूप में, EventArgs के रूप में ई) सार्वजनिक घटना ShutItDown ShutdownEventHandler' ' सार्वजनिक घटना ShutItDown रूप ShutdownEventHandler' के रूप में, लेकिन मैं तीसरे भाग के बारे में भी यकीन नहीं है। Intellisense अगर कथन के अंदर "ShutItDown" पहचान नहीं है। – will0809

+0

भी, मैं शटडाउन ईवेंट की सदस्यता लेने के तरीके पर पढ़ने के लिए जा रहा हूं, क्योंकि मुझे नहीं पता कि कैसे करें। यदि आप इसे डबल त्वरित समय में समझा सकते हैं तो यह बहुत अच्छा होगा। – will0809

+1

'ShutdownEventHandler' को परिभाषित करने की कोई आवश्यकता नहीं है, क्योंकि यह' System.EventHandler' के समान है। घटना की घोषणा को 'सार्वजनिक कार्यक्रम इवेंट हैंडलर शट डाउन' के रूप में लिखा जा सकता है; – Clemens

संबंधित मुद्दे