注册 登录
编程论坛 C# 论坛

怎样使当点击多次按钮后,弹出的窗体始终只有一个???

lelejiayou 发布于 2013-04-18 09:59, 7283 次点击
点击按钮,,只出现一个窗体,而不是点几次出现几个窗体,,怎么弄??试过Visible,没用。。。
10 回复
#2
shangsharon2013-04-18 10:36
//定义一个form的静态全局变量
static Form f;
//按钮的点击事件
{
if(f==null)
{
f=new Form1();
}
f.Show();
}
#3
yhlvht2013-04-18 14:03
被打开窗体引用为全局,例如Form1打开Form2
Form1中,Form2的引用为全局 Form2 f2 = null;
Form1的某个方法中
if(f2 == null || f2.IsDisposed)
{
   f2 = new Form2();
}
if(!f2.Created)
{
    f2.Show();
}
#4
party6202013-04-18 15:47
学习
#5
mangix2013-04-18 22:57
当然,你也可以定义一个 bool 变量来判断这个事情。例如:

bool formCreated = false;
private void button1_Click(object sender, EventArgs e)
{
    if (!formCreated)
    {
       Form2 f = new Form2();
       formCreated = true;
     }
    f.Show();
 }
#6
yhlvht2013-04-19 00:31
以下是引用mangix在2013-4-18 22:57:50的发言:

当然,你也可以定义一个 bool 变量来判断这个事情。例如:

bool formCreated = false;
private void button1_Click(object sender, EventArgs e)
{
    if (!formCreated)
    {
       Form2 f = new Form2();
       formCreated = true;
     }
    f.Show();
 }

若是Form2窗体关闭后,再次点击按钮打开Form2窗体,这样就有问题了
另外还有个手误吧, f引用定义在if里面,在if外面取不到的,编译会报错
#7
moridiansha2013-04-19 09:20
建议楼主参考设计模式中的 单例模式,这个是专门处理这个问题的
#8
mangix2013-04-19 23:39
回复 6楼 yhlvht
谢谢提醒。这个方法确实是错误的,我该严谨些。
#9
ming_cl2013-04-22 16:04
private bool isOpen = false;
private void OnClick()
{
    if(!isOpen)
    {
        isOpen = true;
        ***
    }
}
#10
tpjln2013-12-10 22:14
单例模式 Singleton Pattern

using System;
using System.Collections.Generic;
using
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SingletonPattern
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {           
            Form f2 = Singleton.getInstance();
            f2.Text = "Form2";
            f2.Show();           
        }
    }

    public class Singleton
    {
        private static Form instance = null;  

        public static  Form getInstance()
        {
            if(instance == null)
            {
                 instance = new Form();            
            }
            return instance;
        }
   }
}

希望能帮到你
#11
a12195927862014-06-23 17:11
又学习了 真的是活到老学到老
1