C#,无法关闭第二种形式

时间:2018-04-11 15:47:52

标签: c#

我在c#中遇到了一个奇怪的问题,我有2个表单,wForm和FormOverlay,在FormOverlay上我想要在x进程上打印/绘制的文本。为了使这项工作我也是复选框。这是我的代码

public void Overlay()
        {
            FormOverlay fo = new FormOverlay();

            if (Watermark.Checked)
            {
                fo.Show();
            }
            else if (!Watermark.Checked)
            {
                fo.Close();
            }
        }

我现在面临的问题是,当我再次按下复选框时,我的第二个表单不想关闭。到目前为止,我试图制作另一种方法并使用Environment.Exit(0);然后我意识到这关闭了整个应用程序,而不仅仅是第二种形式。任何想法如何解决这一问题 ?

亲切的问候。

2 个答案:

答案 0 :(得分:1)

看看这一行:

FormOverlay fo = new FormOverlay();

尤其是这个关键字:

new

每次代码运行时,您都在使用表单的不同实例。您需要为此方法添加代码,以便为表单的同一实例保留引用,并且只创建new实例(如果您还没有实例)。

答案 1 :(得分:1)

问题是你每次都要创建一个新对象。要关闭现有对象,您需要存储对它的引用:

    private FormOverlay _myOverlay;

    public void Overlay()
    {
        if (Watermark.Checked)
        {
            _myOverlay = new FormOverlay();
            _myOverlay.Show();
        }
        else  //The "if (!Watermark.Checked) is redundant here
        {
            _myOverlay?.Close();
            _myOverlay?.Dispose();  //Please dispose of your waste properly
            _myOverlay = null;
        }
    }

这将确保您使用相同的参考。