日期:2014-05-20  浏览次数:20846 次

怎么避免同一个用户拥有多个窗体?急!
比如一个窗体内有很多的用户图标,双击一个用户便会打开一个窗体,怎么避免同一个用户拥有多个窗体??
解决掉立刻给分!!!!

------解决方案--------------------
楼主说的是不是这样的单例模式,这是我写的一个代码,就是这样的。
/// <summary>
/// 引入改进的单件模式,保证一个用户之对应一个对话框
/// </summary>
/// <param name= "_ui "> </param>
/// <returns> </returns>
public static ChatForm GetChatFormInstance(MainForm _parent,UserInfo _ui,int _myuid)
{
lock (formtable)//一个静态的formtable表。用于存放已经打开的form,
{
if (formtable.Contains(_ui.Uid))
return (formtable[_ui.Uid] as ChatForm);
else
{
ChatForm cf= new ChatForm(_parent,_ui,_myuid);
formtable.Add(_ui.Uid,cf);
return cf;
}
}
}
------解决方案--------------------
打开按钮:
for (int i = 0; i < this.MdiChildren.Length; i++)
{
if (this.MdiChildren[i].Name == "CarType ")
{
frm = this.MdiChildren[i];
break;
}
}
if (frm == null)
{
this.Refresh();
Member.CarType.ShowCarType(this) ;//打开的方法
}
else
{
frm.BringToFront();
frm.Activate();
}
//打开的方法:
public static void ShowCarType(Form FName)
{
CarType frm = new CarType();
frm.MdiParent = FName ;
frm.Show();
}
------解决方案--------------------
最简单办法,把窗体都改成模式的!showDialog
------解决方案--------------------
不知道用户是不是都是打开的同一类型的窗体。
如果是:在窗体中加一个public static arrylist;把用户名作为参数传递到要打开的窗体,打开之前判断用户名是否存在 arrylist中,不存在则把用户名增加到 arrylist 中,打开窗体,如果存在在不重复打开。窗体关闭时从arrylist删除用户。
------解决方案--------------------
此问题最好的也是最简单的解决方法就是互斥体
bool isCreated;
//创建一个互斥体,使窗体只能创建一个实例。
Mutex mutex = new Mutex(true, "要创建的窗体名 ", out isCreated);
if (isCreated)
{
Form1 form1 = new Form1();
form1.ShowDialog();
mutex.ReleaseMutex();
}