在这方面有过困惑,然后自己总结了一下。仅供参考,欢迎交流!
方法一:[实现从logInForm传值到MainForm,且点LogIn出现MainForm的同时把LogInForm关掉]
在Program.cs里:
static void Main(string[] args)
{
LoginForm lf = new LoginForm();
if(lf.ShowDialog() == DialogResult.OK)
{
Application.Run(new MainForm());//打开你指定的窗口
}
}
在登录窗口(LoginForm)中
的LogIn按钮事件里加上
this.DialogResult=DialogResult.OK; 即可
//---------------------------------------------------------------------------------------
方法二:[实现从logInForm传值到MainForm,且点LogIn出现MainForm的同时把LogInForm关掉]
在MainForm上添加一个名为txtMainForm的textBox
在LogInForm上添加一个名为txtLogInForm的textBox,和一个名为LogIn的Button
一).启动MainForm
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
二).在LogInForm里添加一个公共属性用于传值:
public partial class LogInForm : Form
{
private string valueSend = ""; //添加成员变量
public string ValueSend //添加属性
{
get { return valueSend; }
}
private void LogIn_Click(object sender, EventArgs e) //点击LogIn Button触发
{
valueSend = this.txtLogInForm.Text.Trim(); //设属性的值为LogInForm的txtLogInForm输
入的值
this.Close(); //关掉LogInForm
this.DialogResult = DialogResult.OK;
}
}
三).在MainForm里
在MainForm的Load事件中写如下代码[用于在MainForm Show出来前把LogInForm的值收到且主LogInForm关闭]
private void MainForm_Load(object sender, EventArgs e)
{
LogInForm lf = new LogInForm(); //在MainForm Show出来前,先把LogInForm
Show出来
if (lf.ShowDialog() == DialogResult.OK)
{
this.txtMainForm.Text = lf.ValueSend; //MainForm的textBox用于接收来自LogInForm
的textBox输入的值.
}
}
大功告成,主要用到了属性来传值,用Form_Load在Form_Show前的特点实现了关闭LogInForm的同时把MainForm
Show出来了.
//---------------------------------------------------------------------------------------
方法三:[实现从logInForm传值到MainForm,且点LogIn出现MainForm的同时把LogInForm关掉]
这方法是在学线程的时候意外发现的.相对比较简单,也好理解.
在主form即Form1上的button1里新建一线程,如下:
private void btnThread1_Click(object sender, EventArgs e)
{
Thread threadOne = new Thread(new ThreadStart(FirstMethod));
threadOne.Start();
}
然后写委托函数:
//这是因为:
// ThreadStart是.Net Framework定义的委托类型,即:public delegate void ThreadStart();
public void FirstMethod() //
{
Form2 fm2 = new Form2();
fm2.ShowDialog();
}
就这么简单就完了,你对Form1[主线程]做任何操作都将不会影响到Form2上的东西(当然也包括关闭Form1).
如果你说:我不按button或别的,我就需要在关闭Form1的同时弹出Form2呢?
换位一下思维就能知道了,把button事件里的代码写在Form1的FormClosed()里不就可以了.
即:
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Thread threadTwo = new Thread(new ThreadStart(FirstMethod));
threadTwo.Start();
}
public void FirstMethod()
{
Form2 fm2 = new Form2();
fm2.ShowDialog();
}
//---------------------------------------------------------------------------------------