首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#Winform让打开的窗体不重复(没事干,发个老掉牙的有关问题)

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

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()就可以
[解决办法]
学习了。
[解决办法]
用那个互斥体的模式,具体的词想不起来了.回家得翻翻书.
------解决方案--------------------


好象用 private static Mutex mut = new Mutex();
mut.WaitOne();
应该可以吧.具体代码得调试一把.只是思路.
[解决办法]
单例模式
class newform:form
{
newform fm=new newform;
private newform()
{
}
}
应该是这样写吧
还有一种方式
声明一个静态变量。
判断是否被初始化。
[解决办法]

探讨
22楼的方法还成,省去一个局部变量,并且可以处理其他类创建的同类窗体,可以改改。。。

C# codeprivate 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();…

[解决办法]
探讨
这就叫分多没处花。。。。


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



先蹭点分再说!

[解决办法]
路过,学过.谢谢楼主,谢谢19 楼 zswang.
[解决办法]
飘过
[解决办法]
使用单件模式吧,在from2中设置一个静态bool变量,使用方法如下:
public partial class Form2 : Form
{
private static bool _isRunning=false;
private Form2()
{
InitializeComponent();
}
static public Form2 CreateNew()
{
if(_isRunning)
{
return null
}
else
{
_isRunning=true;
return new Form2();
}
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
_isRunning=false;
}
}
并在form1的按钮点击事件中进行判断
Form2 frm=Form2.CreateNew();
if(frm!=null)
{
frm.show()
}
else
{
MessageBox.Show("该窗体正在运行")
}

[解决办法]
设置一个字典静态结构,用来存储表单引用,每次创建表单,就先检查表单是否已经存在,若存在,则激活,并更新,不存在则新建
[解决办法]
ShowDialog 方法不可以吗?
如果这个不是 那么是不是 就是通过 窗体类的继承 然后主窗体的对象重新构造?


我是小菜鸟! 说的不好清见谅, 希望能够帮到你!
[解决办法]



学习了。。
[解决办法]
tedious

热点排行