C#窗体怎样才可以让同一窗体只出现一次 共三个界面,一个主界面,两个子界面,通过主界面进入子界面,并隐藏主界面,并通过子界面上的button返回主界面,这是会出现两个主界面,每重复一次就出现一个主界面,怎样解决啊?那位朋友可以帮我一下,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 主窗体:this.Visible = false;Form1 frm = new Form1();frm.ShowDialog();this.Visible = true;Form1:private void button1_Click(object sender, EventArgs e){ Close();}不优雅的做法 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(); }不优雅,而且麻烦的做法 主窗体: 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(); } } }越搞越麻烦的做法 主窗体: Form2 f2 = new Form2(); f2.Show(); this.Hide();子窗体: Form1 f1 = new Form1(); f1.Show(); this.Hide();记得在子窗体的FormClosing事件中同时关掉主窗体。不然子窗体关了,主窗体还隐藏着呢。 主窗体: 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; } }继续写垃圾代码 主窗体: 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(); } 我只说:1. 关掉主窗体,可能会关闭整个程序,除非再来一次:Application.Run(new FrmMain());2. 如果我的主窗体需要读取365个数据库3000个表1000000条记录你觉得每次关闭打开主窗体是否合理呢? SocketUpEx写的够好了吧? 看不懂的话,楼主自己去学点基本的再来吧 C#中如何挂起一个线程 如果动态检测某函数的内存使用情况? 请问WPF一定要手写XAML吗? WPF中如何删除一个UIElement 虚心请教:C#中怎样用DataSet直接插入或者更新数据库? treeview 使用 imagelist 关于在treeView中添加节点的问题 如何频繁更改 Textbox 内文本 熟悉Java进来看下. WPF,DataGrid如何设置列标题分割线的颜色 c# 保存控件属性的控件 C# 导出 Excel 单元格选中内容上颜色
主窗体:
this.Visible = false;
Form1 frm = new Form1();
frm.ShowDialog();
this.Visible = true;Form1:
private void button1_Click(object sender, EventArgs e)
{
Close();
}
不优雅的做法
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();
}不优雅,而且麻烦的做法
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();
}
}
}越搞越麻烦的做法
f2.Show();
this.Hide();子窗体: Form1 f1 = new Form1();
f1.Show();
this.Hide();记得在子窗体的FormClosing事件中同时关掉主窗体。不然子窗体关了,主窗体还隐藏着呢。
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;
}
}继续写垃圾代码
{
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();
}
我只说:
1. 关掉主窗体,可能会关闭整个程序,除非再来一次:Application.Run(new FrmMain());
2. 如果我的主窗体
需要读取365个数据库
3000个表
1000000条记录
你觉得每次关闭打开主窗体
是否合理呢?