2010-06-30 108 views
5

所以我基本上想要用戶先登錄才能使用其他表單。然而,我的困境是登錄框在Form2中,主窗體是Form1。我想從Form2控制Form1

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上不會成爲可見的,(因爲我啓動它作爲visble = FALSE),他們在登錄後,有人能幫助?

編輯:

輝煌的迴應,但我的問題仍然存在。我基本上想要加載Form2第一,(這很容易我運行Form1並將其設置爲隱藏)但是當Form2關閉時,我想Form1也關閉。

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

這似乎並沒有工作...

+0

當form2關閉時,編輯我的答案以關閉form1。在Form2_closed事件中調用'form1.Close()'。 – 2010-06-30 07:50:45

回答

10

您將需要某種形式的引用傳遞到另一個,以便它可以在其他形式使用。在這裏我舉了兩個不同形式可以相互交流的例子。本示例從另一個表單修改一個表單中的Label的文本。

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

// 你的窗體2

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

​​

+0

感謝您的精彩回覆。請參閱我更新的問題... – 2010-06-30 05:46:01

+0

從form1掛鉤form2.Closed事件,並在調用時關閉form1。 – jgauffin 2010-06-30 06:23:10

0

當你登錄並做Form1.visible = true;有你也試過Form1.Show();應該顯示窗口2

不過,就個人而言,我寧願設置直接在program.cs文件運行form2應用程序。

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

那麼當用戶成功登錄,做

你要知道,在窗口2,當/你實例Form1上後,你可能還想補充一點:

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

當form1關閉時,這會關閉form2

更好但是在新線程中做form1.Show(),然後對於form2使用this.Close();。這消除了添加到form2的FormClosed事件的需要:因此,可以在新線程中啓動form1後立即關閉form2。但使用線程可能會有點複雜。編輯: form2是form1的父項。如果form2是你的主要申請表格,那麼關閉它會關閉你的程序(通常)。因此,您要麼隱藏並禁用form2,只能在關閉form1後關閉它,或者在新線程中啓動form1。您的編輯幾乎打開form1,然後立即關閉它。