1.昨天在做项目时,发现一个问题,就是我使用的是C#来创建一个字窗口,这个窗口依附在父窗口中,但是每当我点击一次按钮,就会出现一个子窗口,导致结果是这样的

C#中点击按钮出现多个子窗口该怎么解决?_c#

我们可以看到这个子窗口出现了两次【百分比数组……等均出现了两次】,但是为什么会出现这种情况呢?我们来看一下我写的代码

PieForm pieForm = PieForm.getPieForm();
pieForm.FormBorderStyle = FormBorderStyle.None;//设置窗体无扩大,无缩小
pieForm.Dock = DockStyle.Fill;//完整填充父边框
pieForm.MdiParent = this;//将其父边框设置为当前边框
pieForm.Show();//显示当前自边框

2.从代码中我们可以看到,我们新建了一个子窗口对象,对应的是pieForm ,但是假设我们又点击了一下这个子窗口按钮,但是实际上我们只是想在不同的功能按钮区域之间切换,却又发现,生成了一个新的按钮,这里面所涉及的就是单例模式在实际问题中的解决。

3.假若有人不了解单例模式,仔细了解什么是单例模式之后,我们来解决这个问题。

(1)首先我们去子窗口中,对应本文的即是“PieForm”窗口,修改该窗口的构造方法;

(2)在类中添加语句该类的一个实例化对象;

(3)使用一个公共可访问的静态方法,来返回该对象值。代码如下:

private PieForm()//将构造方法私有化
{
InitializeComponent();
}

private static PieForm pieForm = new PieForm();//加载一个静态的私有的成员变量

public static PieForm getPieForm()//返回这个实例化后的静态变量
{
return pieForm;
}


我这里使用的是饿汉式单例模式,直接实例化,而在返回的时候直接返回当前这一个即可。问题就迎刃而解了。当然我们也可以使用C#中的同步锁方式,但是我还没有研究到,故不深述。