2010-06-30 7 views
5

से फॉर्म 1 को नियंत्रित करना चाहता हूं, इसलिए मैं मूल रूप से उपयोगकर्ता को दूसरे फॉर्म का उपयोग करने के लिए पहले लॉगिन करना चाहता हूं। हालांकि, मेरी दुविधा यह है कि लॉगिन बॉक्स फॉर्म 2 में है, और मुख्य रूप फॉर्म 1 है।मैं फॉर्म 2

if ((struseremail.Equals(username)) && (strpasswd.Equals(password))) 
{ 
    MessageBox.Show("Logged in"); 
    form1.Visible = true; 
    form1.WindowState = FormWindowState.Maximized; 
} 
else 
{ 
    MessageBox.Show("Wow, how did you screw this one up?"); 
} 

हालांकि, Form1, दिखाई नहीं बन जाता है (के बाद से मैं के रूप में दृश्यमान = false इसे लॉन्च) के बाद वे में प्रवेश करें। किसी की मदद कर सकते हैं?

संपादित करें:

शानदार प्रतिक्रिया है, लेकिन मेरी समस्या अभी भी यहाँ है। मैं मूल रूप से फॉर्म 2 को लोड करना चाहता हूं, (जो आसान है मैं फॉर्म 1 चलाता हूं और इसे छिपाने के लिए सेट करता हूं) लेकिन जब फॉर्म 2 बंद हो जाता है, तो मैं फॉर्म 1 को भी बंद करना चाहता हूं।

private void Form2_FormClosing(Object sender, FormClosingEventArgs e) 
{ 
    Form1 form1 = new Form1(); 
    form1.Close(); 
    MessageBox.Show("Closing"); 
} 

इस काम करने के लिए प्रतीत नहीं होता ...

+0

फॉर्म 2 बंद होने पर मेरे फॉर्म को बंद फॉर्म 1 में संपादित किया। 'form2_closed' ईवेंट पर 'form1.Close()' पर कॉल करें। –

उत्तर

10

आप इतना है कि यह अन्य रूप में इस्तेमाल किया जा सकता, एक रूप के संदर्भ पारित करने के लिए की आवश्यकता होगी। यहां मैंने एक उदाहरण दिया है कि कैसे दो अलग-अलग रूप एक-दूसरे के साथ संवाद कर सकते हैं। यह उदाहरण लेबल के पाठ को किसी अन्य रूप से एक रूप में संशोधित करता है।

Download Link for Sample Project

// आपका Form1

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 frm = new Form2(this); 
     frm.Show(); 
    } 

    public string LabelText 
    { 
     get { return Lbl.Text; } 
     set { Lbl.Text = value; } 
    } 
} 

// आपका Form2

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private Form1 mainForm = null; 
    public Form2(Form callingForm) 
    { 
     mainForm = callingForm as Form1; 
     InitializeComponent(); 
    } 

    private void Form2_Load(object sender, EventArgs e) 
    { 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     this.mainForm.LabelText = txtMessage.Text; 
    } 

    //Added later, closing Form1 when Form2 is closed. 
    private void Form2_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     mainForm.Close(); 
    } 
} 

alt text http://demo.ruchitsurati.net/files/frm1.png

alt text http://demo.ruchitsurati.net/files/frm2.png

+0

आपकी शानदार प्रतिक्रिया के लिए धन्यवाद। कृपया मेरा अपडेट किया गया प्रश्न देखें ... –

+0

फॉर्म 2 दबाएं। फॉर्म 1 से बंद घटना और इसे लागू होने पर बंद फॉर्म 1। – jgauffin

0

जब आप में प्रवेश करें और Form1.visible = true; आप भी Form1.Show(); कि Form2

दिखाना चाहिए हालांकि की कोशिश की है, व्यक्तिगत रूप से, मैं program.cs फ़ाइल में सीधे form2 चलाने के लिए आवेदन की स्थापना पसंद करेंगे।

static void Main() 
{ 
    Application.Run(new Form2()); 
} 

फिर जब उपयोगकर्ता को सफलतापूर्वक में लॉग करता है,

मन आप, Form2, जब/तुम Form1 का दृष्टांत के बाद, आप भी इस जोड़ सकते हैं में कार्य करें:

newform1.FormClosed += delegate(System.Object o, FormClosedEventArgs earg) 
       { this.Close(); }; 

फॉर्म 1 बंद होने पर यह फॉर्म 2 बंद हो जाता है

बेहतर अभी तक form1.Show() एक नए धागे में करें, और फिर फॉर्म 2 के लिए this.Close();। यह फॉर्म 2 के FormClosed ईवेंट में जोड़ने की आवश्यकता को हटा देता है: आप इस प्रकार एक नए थ्रेड में फॉर्म 1 शुरू करने के तुरंत बाद फॉर्म 2 बंद कर सकते हैं। लेकिन धागे के साथ काम करना थोड़ा जटिल हो सकता है।

संपादित करें: फॉर्म 2 फॉर्म 1 के माता-पिता है। यदि फॉर्म 2 आपका मुख्य आवेदन पत्र है, तो इसे बंद करना आपके प्रोग्राम को बंद कर देता है (आमतौर पर)। इस प्रकार आप या तो फॉर्म 2 को छिपाना और अक्षम करना चाहते हैं, और फॉर्म 1 बंद होने के बाद इसे बंद करें, या एक नए थ्रेड में फॉर्म 1 शुरू करें।आपका संपादन फॉर्म 1 खोलता है, फिर तुरंत इसे बंद कर देता है।

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