日期:2014-05-18  浏览次数:21348 次

C#Winform让打开的窗体不重复(没事干,发个老掉牙的问题)
非MDI子窗体,单独的两个窗体。窗体1通过按钮实现弹出窗体2。


------解决方案--------------------
你指的窗体不重复是什么意思?
不能弹出同一个窗体类生成的两个实例?
你可以用哈希表,存储实例化实窗体的id,和对应的窗体。
然后再创建实例的时候先判断哈希表中有没有对应的id
------解决方案--------------------
//保证每个窗体只有一个实例 
private static TestForm tf;


/// <summary>
/// 创建实例
/// </summary>
/// <returns></returns>
public static TestForm CreateInstance()
{
if (tf == null || tf.IsDisposed)
tf = new TestForm();

return tf;
}
------解决方案--------------------
这简单易看吧。。
------解决方案--------------------
哇靠,,,

这玩意还用整API呀,
------解决方案--------------------
http://topic.csdn.net/u/20080111/14/c1f6b49e-edd9-44dd-be02-a5201039ab7c.html
------解决方案--------------------
我没话说了。。


------解决方案--------------------
是只窗口不重叠啊?得到窗口坐标?
------解决方案--------------------
^_^
------解决方案--------------------
用变量,打开一个窗口后.变量加一..
------解决方案--------------------
…… 默默走过……
------解决方案--------------------
这就叫分多没处花。。。。

C# code
private Form2 form2;
private void button1_Click(object sender, EventArgs e)
{
    if (form2 == null || form2.IsDisposed)
        form2 = new Form2();
    form2.Show();
}

------解决方案--------------------
public static bool IsOpened(string frmName)
{
bool isOpened = false;

foreach (Form frm in Application.OpenForms)
{
if (frm.Name == frmName)
{
isOpened = true;
}
}
return isOpened;
}

true 为重复
------解决方案--------------------
是来学习的 看看

------解决方案--------------------
22楼的方法还成,省去一个局部变量,并且可以处理其他类创建的同类窗体,可以改改。。。
C# code
private Form FindForm(Type type)
{
    foreach(Form form in Application.OpenForms)
        if (form.GetType() == type) return form;
    return null;
}

private void button1_Click(object sender, EventArgs e)
{
    Form form2 = FindForm(typeof(Form2));
    if (form2 == null) form2 = new Form2();
    form2.Show();
}

------解决方案--------------------
省去一个局部变量字段。

勘误
------解决方案--------------------
我在学习
------解决方案--------------------
ShowDialog行不行,能不能满足你的要求?
------解决方案--------------------
用Form.ShowDialog()就可以
------解决方案--------------------
学习了。
------解决方案--------------------
用那个互斥体的模式,具体的词想不起来了.回家得翻翻书.
------解决方案--------------------