फॉर्म टेक्स्ट को किसी अन्य फॉर्म से बदलें

मेरे पास 2 विनफॉर्म हैं (दृश्य सी # पर)। फॉर्म 1 पर मेरे पास एक बटन है और जब उपयोगकर्ता इसे क्लिक करता है, तो मैं फॉर्म 2 खोलने से पहले फॉर्म 2 का टेक्स्ट बदलना चाहता हूं (टेक्स्ट जो मेरे विनफॉर्म के ऊपरी बाएं कोने पर दिखाई देता है)।

मैंने इन (1) (2) लेकिन वे डॉन नहीं करते काम नहीं करता

फॉर्म 2 पर मेरे पास है

public string formtext
{
   get {return this.Text;}
   set {this.Text = value;}
}

यह फॉर्म 1 पर मेरा बटन है

public void kryptonButton2_Click(object sender, EventArgs e)
{             
   //Form2
    Form2 form2 = new Form2();
    form2.Text = "Η πόλη του Πειραιά";
 }

ध्यान दें कि मैं टेक्स्ट को बदलने के लिए उस बटन पर क्लिक करता हूं और फिर मैं फॉर्म 2 खोलने के लिए किसी अन्य बटन पर क्लिक करता हूं।

फॉर्म 2 खुलता है, लेकिन पाठ नहीं बदला जाता है।

0
मैं उसको कैसे करू?
जोड़ा लेखक Shevliaskovic, स्रोत
आप फॉर्मटेक्स्ट संपत्ति सेट नहीं कर रहे हैं।
जोड़ा लेखक Mike Cheel, स्रोत
मैंने आपका शीर्षक संपादित किया है। कृपया देखें, " प्रश्नों में उनके शीर्षक में" टैग "शामिल होना चाहिए? ", जहां आम सहमति है "नहीं, उन्हें चाहिए नहीं"।
जोड़ा लेखक John Saunders, स्रोत

4 उत्तर

आपका Form2 उदाहरण आपके टेक्स्ट बदलने वाले दिनचर्या से पहुंच योग्य होना चाहिए।

private Form2 m_form2;

public Form1() {
  InitializeComponent();
  m_form2 = null;
}

अब जब आपके पास जमीन का काम है, तो आपको दिखाएं() और नहीं ShowDialog() का उपयोग करके अपने m_form2 ऑब्जेक्ट को कॉल करने की आवश्यकता होगी :

private void ShowForm2(string optionalText) {
  if (m_form2 == null) {
    m_form2 = new Form2();
    m_form2.Show();
  } else {
    m_form2.Focus();
  }
  if (!String.IsNullOrEmpty(optionalText)) {
    m_form2.Text = optionalText;
  }
}

इस सेटअप के साथ, ऐसा करने के लिए अपने दिनचर्या को संशोधित करके अपने बटन को Form2 के लिए काम करना चाहिए:

public void kryptonButton2_Click(object sender, EventArgs e) {             
  ShowForm2(null);
  m_form2.Text = "Η πόλη του Πειραιά";
}

OR using the optionalText parameter:

public void kryptonButton2_Click(object sender, EventArgs e) {             
  ShowForm2("Η πόλη του Πειραιά");
}

आप प्रतिनिधियों का उपयोग करके भी ऐसा कर सकते हैं। यह सी # की एक बहुत ही शक्तिशाली विशेषता है। यदि आप इसका एक कोड उदाहरण देखना चाहते हैं, तो यहां इस प्रश्न का मेरा उत्तर देखें:

https://stackoverflow.com/a/19146929/153923

अद्यतन

ऐसा लगता है कि आपको केवल माइक चेल के जवाब के एक अद्यतन संस्करण की आवश्यकता हो सकती है।

प्रयत्न:

public void kryptonButton2_Click(object sender, EventArgs e) {             
    Form2 form2 = new Form2();
    form2.formtext = "Η πόλη του Πειραιά";
    form2.Show();//Mike left this part out
 }
0
जोड़ा
@ शेव्लियास्कोविक - मैंने यह जवाब अपडेट किया है कि वैकल्पिक टेक्स्ट पैरामीटर का उपयोग कैसे सेट किया जाए।
जोड़ा लेखक jp2code, स्रोत
मैं आपके द्वारा Servy के उत्तर पर किए गए टिप्पणियों को पढ़ रहा था, और यह देखने के लिए मेरा जवाब संपादित किया कि यह कैसा लगता है जैसे आप पूरा करने की कोशिश कर रहे हैं। यदि आप बस इतना करना चाहते हैं, तो माइक चेल के जवाब का थोड़ा संपादित संस्करण आज़माएं। मैं अपने उत्तर में लगभग 30 सेकंड में अपडेट के रूप में जोड़ा होगा ....
जोड़ा लेखक jp2code, स्रोत
मैं केवल तभी प्राप्त कर सकता हूं यदि मैं उसी बटन के साथ नया फॉर्म खोलूं जिसे मैं टेक्स्ट बदलूं?
जोड़ा लेखक Shevliaskovic, स्रोत

प्रयत्न:

public void kryptonButton2_Click(object sender, EventArgs e)
{             
   //Form2
    Form2 form2 = new Form2();
    form2.formtext = "Η πόλη του Πειραιά";
 }
0
जोड़ा
यह अभी भी नहीं बदलता है
जोड़ा लेखक Shevliaskovic, स्रोत

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

private Form2 child;
public void openOtherForm_Click(object sender, EventArgs e)
{             
    child = new Form2();
    child.Show();
}

अब आप उस क्षेत्र का उपयोग इसे कुशल बनाने के लिए कर सकते हैं:

public void kryptonButton2_Click(object sender, EventArgs e)
{             
    form2.formtext = "Η πόλη του Πειραιά";
}
0
जोड़ा
तो सबसे पहले मुझे फॉर्म 2 खोलना है और फिर फॉर्म 1 पर बटन दबाएं?
जोड़ा लेखक Shevliaskovic, स्रोत
शायद मैं स्पष्ट नहीं था। मैं इसे खोलने से पहले इसे बदलना चाहता हूं। मैं इसे अपनी पोस्ट में जोड़ दूंगा
जोड़ा लेखक Shevliaskovic, स्रोत
नहीं, मैंने इसे बनाया है। जब मैं अपना प्रोग्राम चलाता हूं, फॉर्म 1 दिखाता है। उपयोगकर्ता इस फ़ॉर्म पर बटन क्लिक करता है जो फॉर्म 2 के टेक्स्ट को बदलता है, फिर दूसरे बटन पर क्लिक करता है और फॉर्म 2 खोलता है
जोड़ा लेखक Shevliaskovic, स्रोत
@ शेव्लियास्कोविक यही है आप ने कहा आप होना चाहता था। यदि आप कुछ और करना चाहते हैं तो आपको यह बताने की आवश्यकता होगी कि यह क्या होना चाहिए।
जोड़ा लेखक Servy, स्रोत
@ शेव्लियास्कोविक यदि आपने इसे नहीं बनाया है तो यह अस्तित्व में नहीं है। केवल स्ट्रिंग को एक आवृत्ति फ़ील्ड के रूप में स्टोर करें ताकि जब आप do फ़ॉर्म बनाते हैं तो आप टेक्स्ट सेट कर सकते हैं।
जोड़ा लेखक Servy, स्रोत
@ शेव्लियास्कोविक जिसका अर्थ है कि दूसरा रूप नहीं अभी तक मौजूद है। बस मेरी टिप्पणी में जो मैंने वर्णित किया है और फॉर्म के अस्तित्व के लिए स्ट्रिंग को स्टोर करें।
जोड़ा लेखक Servy, स्रोत

आपके दृष्टिकोण काम नहीं करते हैं इसके कुछ कारण हैं।

public void kryptonButton2_Click(object sender, EventArgs e)
{             
 Form2 form2 = new Form2(); //<-- this is a new instance for Form2
 form2.Text = "Η πόλη του Πειραιά"; //<-- and this is not your propery 
                                    //(as pointed out by @MikeCheel)
}

अगर आपके पास Form2 का कोई उदाहरण नहीं है तो आप कोशिश कर सकते हैं और उसे Application.OpenForms से प्राप्त कर सकते हैं लेकिन यह एक हैक है।

var frm2 = Application.OpenForms.Cast<form>()
                      .FirstOrDefault(c => c.Name == "Form2"); 
if(frm2 != null)
 form2.formtext= "Η πόλη του Πειραιά"; 
0
जोड़ा
आपका मतलब है 'हैक'? यह अभी भी नहीं बदलता है
जोड़ा लेखक Shevliaskovic, स्रोत
एक हैक एक बुरा समाधान है - लेकिन फिर भी, एक समाधान जो काम करता है। मेरा काम ठीक है। सुनिश्चित करें कि आपका Form2 का नाम प्रॉपर्टी "Form2" पर सेट है (यही कारण है कि यह एक हैक है :))
जोड़ा लेखक Jens Kloster, स्रोत