क्या कोई तरीका है कि मैं एक फ़ंक्शन को कॉल कर सकता हूं जो मूल रूप (उपयोगकर्ता) में मौजूद है, जहां दूसरे फॉर्म (addNewUser) का एक उदाहरण कहा जाता है? मैं जो करना चाहता हूं वह यह है कि जब दूसरा फॉर्म बंद हो जाता है, तो मूल रूप (उपयोगकर्ता) में एक फ़ंक्शन निष्पादित करने के लिए जो एक तालिका अपडेट कर रहा है ताकि दूसरे में किए गए परिवर्तन (addNewUser) पहले फॉर्म में तालिका में अपडेट हो जाएं ( उपयोगकर्ता)।

मैं जो हासिल करने की कोशिश कर रहा हूं उसका एक सरल चित्र

1
dannkis 27 नवम्बर 2021, 12:41
आपके पास सीधे फॉर्म कोड में डेटाबेस एक्सेस कोड नहीं होना चाहिए, इसे सेवा कक्षाओं में निकालें और ये सभी मुद्दे दूर हो जाएं।
 – 
DavidG
27 नवम्बर 2021, 12:43
यदि आपके पास फॉर्म है तो आप ऑब्जेक्ट द्वारा इंस्टेंस विधि को कॉल कर सकते हैं अन्यथा आप फॉर्म क्लास नाम का उपयोग करके स्थिति विधि को कॉल कर सकते हैं
 – 
vivek nuna
27 नवम्बर 2021, 12:45

2 जवाब

सबसे बढ़िया उत्तर

WinForms जैसे ईवेंट संचालित प्रतिमान के साथ, ईवेंट का उपयोग करना सबसे अच्छा तरीका है जब कोई ऐसा हो जिसे आप इंटरसेप्ट कर सकते हैं।
आप किसी भी वर्ग से किसी ईवेंट की सदस्यता ले सकते हैं जो ईवेंट रेज़र के उदाहरण बनाता है। इस मामले में आप किसी ईवेंट हैंडलर को दूसरे फॉर्म द्वारा उठाए गए फॉर्मक्लोज्ड इवेंट में आसानी से बांध सकते हैं।

// Suppose you have a button click that opens the second form.
private void button_Click(object sender, EventArgs e)
{
    SecondForm f = new SecondForm();
    f.FormClosed += onSecondFormClosed;
    f.ShowDialog();
}

private void onSecondFormClosed(object sender, FormClosedEventArgs e)
{
    // Do whatever you need to do when the second form closes
}
1
Steve 27 नवम्बर 2021, 12:56
मैं इसे इतने लंबे समय से ढूंढ रहा था कि मैं भी नहीं कर सकता ...
 – 
dannkis
27 नवम्बर 2021, 13:03
यदि आप वास्तव में ईवेंट व्यवसाय में खुदाई करना चाहते हैं तो आप एक कस्टम ईवेंट को बढ़ाने के बारे में सोचना शुरू कर सकते हैं जब आप उस ऐड बटन को दबाते हैं और दूसरे फॉर्म को बंद नहीं करते हैं ताकि आपका उपयोगकर्ता दूसरे फॉर्म को बंद और फिर से खोले बिना एक और प्रविष्टि जोड़ सके। कस्टम ईवेंट कस्टम डेटा को मूल रूप में भी पोस्ट कर सकता है (जैसे उपयोगकर्ता वर्ग का उदाहरण ताकि माता-पिता अपनी सूची में जानकारी जोड़ सकें)
 – 
Steve
27 नवम्बर 2021, 13:06
मैं एक डेटाबेस का उपयोग कर रहा हूं, ताकि दूसरा फॉर्म खोले जाने पर आप एक से अधिक उपयोगकर्ता जोड़ सकें। मेरा onSecondFormClosed डेटाबेस से नई जानकारी प्राप्त कर रहा है और इसे डेटा ग्रिड व्यू तालिका में आउटपुट करता है जो मेरे पास मेरे पहले फॉर्म में है
 – 
dannkis
27 नवम्बर 2021, 13:16

अपने रूपों के अपने उदाहरणों की पहचान करने के लिए वैश्विक चर परिभाषित करें:

internal static Form1 CurrentForm1 { get; set; }
internal static Form2 Frm2 { get; set; }

फिर चर को इस प्रकार प्रभावित करें:

  public Form1()
    {
        InitializeComponent();
        CurrentForm1 = this;
    }

अपने कोड में कहीं, आप फॉर्म 2 को परिभाषित करेंगे:

Frm2 = new Form2();

अब, Frm2 कोड से, आप form1 के गैर-स्थैतिक तरीकों तक पहुंच पाएंगे:

Form1.CurrentForm1.UpdateMyThings();

और Frm1 कोड से, आप Frm2 पर चीज़ें देख पाएंगे, जैसे:

bool notified = false;
while (Frm2.backgroundWorker1.IsBusy)
{
    if (notified == false)
    {
        Message("Please wait...");
        notified = true;
    }
    Application.DoEvents();
}

इस उदाहरण में, Frm1 जाँचता है कि क्या बैकग्राउंड वर्कर #1 अभी भी Frm2 में चल रहा है (संदेश फ़ंक्शन संदेश को किसी लेबल या किसी चीज़ में प्रदर्शित कर सकता है)।

0
Fredy 27 नवम्बर 2021, 13:00
इसे करने का एक बहुत अच्छा तरीका है, मैं जो करने की कोशिश कर रहा हूं उसके लिए मुझे यह बहुत जटिल लगता है (मुझे पता है कि यह नहीं है)। आपकी प्रतिक्रिया के लिए धन्यवाद!
 – 
dannkis
27 नवम्बर 2021, 13:05
2
अगर मैं अपने विचार साझा कर पाता तो मैं इस तथ्य की ओर भी इशारा करता कि इस तरह से वैश्विक स्थिर चर होना बहुत खतरनाक है। यदि आप प्रपत्र बंद होने पर उन चरों को साफ़ नहीं करते हैं तो आप बहुत छोटी स्थिति में समाप्त हो सकते हैं।
 – 
Steve
27 नवम्बर 2021, 13:11
धन्यवाद, @Steve, चेतावनी के लिए, क्या आप कृपया अधिक सटीक हो सकते हैं? मैं उन स्थिर चरों का उपयोग करता हूं जिनमें कोई बग नहीं है, शायद मेरे पास एक बहुत ही विशिष्ट उपयोग है ...
 – 
Fredy
27 नवम्बर 2021, 13:27
क्या होगा अगर Frm2 बंद हो जाता है? वेरिएबल अभी भी एक डिस्पोजेड फॉर्म की ओर इशारा कर रहा है। यदि आप फॉर्म (2) बंद होने के बाद इसे फिर से उपयोग करने का प्रयास करते हैं तो आपको क्रैश मिल जाएगा। बेशक मुझे आपके वर्तमान कोड और सटीक संदर्भ के बारे में कुछ भी नहीं पता है, इसलिए यह मेरे दिमाग में सिर्फ एक लाल झंडा चेतावनी है।
 – 
Steve
27 नवम्बर 2021, 13:59