private void button1_Click(object sender, EventArgs e)
{
private void button1_Click(object sender, EventArgs e)
{
//Form1 frm1 = new Form1();
//frm1.Hide();
this.Hide();
//Form3 frm3 = new Form3();
//frm3.Show(); }为什么我写成//Form1 frm1 = new Form1();
//frm1.Hide();
这样后就无法隐藏窗口1呢?而写成this. Hide();就对呢?
难道我对this有理解偏差?
this.hide()隐藏的是你的主窗体
frm1是新对象,你的主窗体,应该是在main函数里创建的吧.
this的form1是本身的 在load时候就存在
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
frm1.Show();
frm1.Hide(); Form3 frm3 = new Form3();
frm3.Show();
}
}
}你是不是这个意思啊?我试了下 还是无法隐藏Form1
不是你没hide掉。
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
AdminLoginForm admin = new AdminLoginForm();
if (admin.ShowDialog() == DialogResult.OK) {
Application.Run(new MainForm(admin.Admin));
} else {
MessageBox.Show("没有登录,程序退出!");
}
登录成功时候,AdminLoginForm 登录按钮的单击事件中要写 this.DialogResult = DialogResult.OK;
这样就实现了,登陆成功打开主窗体,登陆失败退出程序。
看问题:关于运行时主窗体隐藏,显示窗体1,点击FORM1上的BUTTON1后关闭窗体1,显示主窗体3。
Form1 frm1 = new Form1();
frm1.Show();
//frm1.Hide(); Form3 frm3 = new Form3();
frm3.Show();
如此会出现3个form
this是一个 你那个frm1是一个 frm3是一个
只不过this和frm是同一个类的不同实例
所以你的那个new form1本省就不好 你想要的在项目生成是已经为你做好form1的分配了
明白?
主程序
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private Boolean flg = false;
public Form1()
{
InitializeComponent();
} private void Form1_Activated(object sender, EventArgs e)
{
this.Visible = flg;
} private void Form1_Load(object sender, EventArgs e)
{
Form2 f = new Form2();
f.ShowDialog();
flg = f.loginFlg;
if (!flg)
{
Application.Exit();
} }
}
}
Loginnamespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Boolean loginFlg = false;
public Form2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
if (!"1".Equals(textBox1.Text))
{
MessageBox.Show("!!!");
return;
}
loginFlg = true;
}
}
}
public partial class Form1 : Form
{ public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
Form2 frm1 = new Form2();
Form2 frm3 = new Form2();
frm3.Text = "form3";
((Button)frm1.Controls["button1"]).DialogResult = DialogResult.OK;
frm1.ShowDialog();
if (frm1.DialogResult == DialogResult.OK)
{
frm1.Close();
frm3.ShowDialog();
}
}
}
</code>拿分走人,form2是另外新建的一个窗体项目,否则得话会创建窗体句柄错误,简单来说就是会陷入死循环,form2上就拖了一个button其他的什么都没做
为什么我写成//Form1 frm1 = new Form1();
//frm1.Hide();
这样后就无法隐藏窗口1呢?而写成this. Hide();就对呢?
难道我对this有理解偏差?=============================================================
frm1是你新申请的一个Form1类的实体,而this是程序的主窗体本身这个实体。
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 form1= new Form1();
if (form1.ShowDialog() == DialogResult.OK) {
Application.Run(new Form3());
} else {
MessageBox.Show("没有登录,程序退出!");
}
要不在主窗体的LOAD事件里SHOWDIALOG登录窗体
登录成功后 this.Close()
this代表当前的窗体当然可以了啊
在主窗体的LOAD事件里SHOWDIALOG登录窗体
登录成功后 this.Close()
ok啦!!!!!!!!!!