我在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);然后我意识到这关闭了整个应用程序,而不仅仅是第二种形式。任何想法如何解决这一问题 ?
亲切的问候。
答案 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;
}
}
这将确保您使用相同的参考。