C#窗体怎样才可以让同一窗体只出现一次

zym19825 2012-10-07 11:48:22
共三个界面,一个主界面,两个子界面,通过主界面进入子界面,并隐藏主界面,并通过子界面上的button返回主界面,这是会出现两个主界面,每重复一次就出现一个主界面,怎样解决啊?那位朋友可以帮我一下,谢谢
...全文
410 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zym19825 2012-10-09
  • 打赏
  • 举报
回复
谢谢你们,这几天有点忙忘了还发了个帖子,不好意思,各位热心朋友,嘿嘿
SocketUpEx 2012-10-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
记得在子窗体的FormClosing事件中同时关掉主窗体。不然子窗体关了,主窗体还隐藏着呢。
[/Quote]

我只说:
1. 关掉主窗体,可能会关闭整个程序,除非再来一次:Application.Run(new FrmMain());
2. 如果我的主窗体
需要读取365个数据库
3000个表
1000000条记录
你觉得每次关闭打开主窗体
是否合理呢?

Hauk 2012-10-07
  • 打赏
  • 举报
回复
主窗体:

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



子窗体:

public Form parentForm;

private void button1_Click(object sender, EventArgs e)
{
parentForm.Show();

this.Dispose();
}

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
parentForm.Dispose();
}
SocketUpEx 2012-10-07
  • 打赏
  • 举报
回复
主窗体:
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
this.Text = this.Handle.ToString();
}

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

Form1:
public partial class Form1 : Form
{
private FrmMain _FrmMain;
public Form1(FrmMain frmMain)
{
InitializeComponent();

_FrmMain =frmMain;
}

private void button1_Click(object sender, EventArgs e)
{
Close();

_FrmMain.Visible=true;
}
}


继续写垃圾代码

Hauk 2012-10-07
  • 打赏
  • 举报
回复
主窗体:

Form2 f2 = new Form2();
f2.Show();
this.Hide();



子窗体:

Form1 f1 = new Form1();
f1.Show();
this.Hide();



记得在子窗体的FormClosing事件中同时关掉主窗体。不然子窗体关了,主窗体还隐藏着呢。
SocketUp 2012-10-07
  • 打赏
  • 举报
回复
坐等楼下贴出优雅的写法

SocketUpEx 2012-10-07
  • 打赏
  • 举报
回复
主窗体:
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
this.Text = this.Handle.ToString();
}

private void ShowMainForm()
{
this.Visible = true;
}

private void button1_Click(object sender, EventArgs e)
{
this.Visible = false;
Form1 frm = new Form1();
frm.OnShowMainForm += ShowMainForm;
frm.Show();
}
}

Form1:
public partial class Form1 : Form
{
public delegate void ShowMainFormHandler();
public event ShowMainFormHandler OnShowMainForm;

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Close();

if (OnShowMainForm != null)
{
OnShowMainForm();
}
}
}


越搞越麻烦的做法

SocketUpEx 2012-10-07
  • 打赏
  • 举报
回复
Program.cs
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(FrmMain.CreateMainForm());
}

主窗体:
public partial class FrmMain : Form
{
private static FrmMain _Instance;

private FrmMain()
{
InitializeComponent();
}

public static FrmMain CreateMainForm()
{
if (_Instance == null || _Instance.IsDisposed)
{
_Instance = new FrmMain();
}

return _Instance;
}

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

Form1:
private void button1_Click(object sender, EventArgs e)
{
Close();

FrmMain frm = FrmMain.CreateMainForm();
frm.Show();
}


不优雅,而且麻烦的做法

SocketUpEx 2012-10-07
  • 打赏
  • 举报
回复

主窗体:
this.Visible = false;
Form1 frm = new Form1();
frm.ShowDialog();
this.Visible = true;

Form1:
private void button1_Click(object sender, EventArgs e)
{
Close();
}


不优雅的做法

JohnsonShu 2012-10-07
  • 打赏
  • 举报
回复
SocketUpEx写的够好了吧? 看不懂的话,楼主自己去学点基本的再来吧
SocketUpEx 2012-10-07
  • 打赏
  • 举报
回复
楼主明显是直接要代码而不是要人帮他优化的

rayyu1989 2012-10-07
  • 打赏
  • 举报
回复
都没看到楼主的代码 不知道楼上几位根据什么优化的 是我弱爆了?
fsstolw 2012-10-07
  • 打赏
  • 举报
回复
呵呵,SocketUpEx,再接再厉!

110,578

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧