我用C#做winfrom怎么能让一个窗口只弹出一次呀?(希望能有代码)
解决方案 »
- 求助!关于datagridview更新问题。。。
- C# 提示DataReader must be closed first 咋办呀
- 求帮忙。。无法创建数据库连接
- 高手才进------文本替换中的几个高级问题.
- 请教高手 c# 调用dns类怎么有时候报错
- 在WEB程序中怎样打开数据库中图片的字段。
- 求教求教! 远程控制和线程的问题!
- 数据库操作时,用数据组件设计时写好参数好,还是在程序动态生成组件并自己写SQL好呀。
- C#如何在多线程里面访问窗体控件和更改控件的属性?在线结贴
- 引以为戒。
- GetManifestResourceStream如何使用?
- Net里,无论b/s还是c/s,有没有相应的框架,能自动生成部分代码?
private void Form1_Load(object sender, EventArgs e)
{
try
{
if (Form1.poped)
{
throw new Exception("Form has poped,and it can only poped once!");
}
else
{
Form1.poped = true;
}
}
catch (Exception ex)
{
//your logic code
}
}
存在则不弹出. '----------------------------------------------------------------------------------------------
' @(f)
' 函数名 : FormOpen()
' 返回值 : 无
' 参数 : ARG1 - mainfrm
' ARG2 - OpenForm.
' ARG3 - iReOpen(需要选中记录后开启的Form,需要关闭当前Form,再重新开启一个Form).
' 功能说明 : 多Form模式打开Form,Form未开启则开启Form,否则不开启。
'----------------------------------------------------------------------------------------------
Public Function FormOpen(ByVal mainfrm As frmMainForm, ByVal OpenForm As Form, Optional ByVal iReOpen As Long = 0)
Dim bIsOpen As Boolean
bIsOpen = IsFormOpen(mainfrm, OpenForm.Name)
If bIsOpen Then '未开启,直接开
OpenForm.MdiParent = mainfrm
OpenForm.Show()
Else '已开启
If iReOpen <> 0 Then
Dim i As Integer
For i = 0 To mainfrm.MdiChildren.Length - 1
If mainfrm.MdiChildren(i).Name = OpenForm.Name Then
mainfrm.MdiChildren(i).Close()
End If
Next
OpenForm.MdiParent = mainfrm
OpenForm.Show()
End If
End If
End Function
如private frm1 objfrm1 = null;
private void objfrm1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
objfrm1 = null;
}使用时如下:
code=C#]if (this.objfrm1== null)
{
this.objfrm1= new frm1(tag);
this.objfrm1.Closing += new CancelEventHandler(objfrm1_Closing);
}
this.objfrm1.Show();[[/code]
存在则不弹出. '----------------------------------------------------------------------------------------------
' @(f)
' 函数名 : FormOpen()
' 返回值 : 无
' 参数 : ARG1 - mainfrm
' ARG2 - OpenForm.
' ARG3 - iReOpen(需要选中记录后开启的Form,需要关闭当前Form,再重新开启一个Form).
' 功能说明 : 多Form模式打开Form,Form未开启则开启Form,否则不开启。
'----------------------------------------------------------------------------------------------
Public Function FormOpen(ByVal mainfrm As frmMainForm, ByVal OpenForm As Form, Optional ByVal iReOpen As Long = 0)
Dim bIsOpen As Boolean
bIsOpen = IsFormOpen(mainfrm, OpenForm.Name)
If bIsOpen Then '未开启,直接开
OpenForm.MdiParent = mainfrm
OpenForm.Show()
Else '已开启
If iReOpen <> 0 Then
Dim i As Integer
For i = 0 To mainfrm.MdiChildren.Length - 1
If mainfrm.MdiChildren(i).Name = OpenForm.Name Then
mainfrm.MdiChildren(i).Close()
End If
Next
OpenForm.MdiParent = mainfrm
OpenForm.Show()
End If
End If
End Function
这句话,是必要的,以防止你关闭窗体时,再次打开不能显示窗体
/// <summary>
/// 打开MDI子窗体
/// </summary>
/// <param name="FrmNameSpace"></param>
/// <param name="ChildTypeName"></param>
private void OpenMdiChild(string FrmNameSpace, string ChildTypeName)
{
bool isOpen = false;
foreach (Form frm in MdiChildren)
{
if (frm.GetType().Name == ChildTypeName)
{
frm.Activate();
isOpen = true;
break;
}
}
if (!isOpen)
{
string className = FrmNameSpace + "." + ChildTypeName;
Form Instance = (Form)Assembly.Load(FrmNameSpace).CreateInstance(className);
Instance.MdiParent = this;
Instance.Show();
}
}
private void ActivateChild(string ChildName)
{
foreach (DevComponents.DotNetBar.TabItem ti in this.tabStrip1.Tabs)
{
if (ti.Text == ChildName)
{
if (this.tabStrip1.SelectedTab != ti)
this.tabStrip1.SelectedTab = ti;
break;
}
}
}另外一种办法,用在MDI窗体里的,请参考
Form2 f2;
private void Button1_Click(object sender, EventArgs e)
{
if (f2== null || f2.IsDisposed)
{
f2= new Form2();
f2.Show();
}
else
{
f2.Activate();
}
}
try C# codeForm2 f2;
private void Button1_Click(object sender, EventArgs e)
{
if (f2== null || f2.IsDisposed)
{
f2= new Form2();
f2.Show();
}
else
{
f2.Activate();
}
}
这个是正解啊
就是要使用到模式设计里面的 单件模式
private void Button1_Click(object sender, EventArgs e)
{
if (f2== null ¦ ¦ f2.IsDisposed)
{
f2= new Form2();
}
f2.ShowDialog();
}
我可以举出一个反例——用户在t1时刻关闭窗体的单件实例form1后,代码可以在稍后的t2时刻再次弹出form1。
因此我个人认为单件模式在这里可能并不合适。
private void toolButtonFzDy_Click(object sender, EventArgs e)
{
DyFzForm fzdy = new DyFzForm(); foreach (Form mdifrm in this.OwnedForms)
{
if (fzdy.Text == mdifrm.Text)
{
mdifrm.WindowState = FormWindowState.Normal;
mdifrm.Activate();
fzdy.Close();
return;
}
}
fzdy.Owner = this;
fzdy.Show();
}