Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建新winform时删除旧winform和托盘图标_C#_Winforms - Fatal编程技术网

C# 创建新winform时删除旧winform和托盘图标

C# 创建新winform时删除旧winform和托盘图标,c#,winforms,C#,Winforms,在我的应用程序中,我有两个winforms。第一个用作我的控制面板,第二个用作截屏。然而,当我从Winform 2返回Winform 1时,我创建了一个新的Winform和一个全新的托盘图标。这是我在程序第一次启动时创建的初始设置之上 当我从winform 1转到winform 2时,我会执行以下操作: this.Hide(); Form2 form2 = new Form2(); form2.InstanceRef = this; form2.Show(); this.Close(

在我的应用程序中,我有两个winforms。第一个用作我的控制面板,第二个用作截屏。然而,当我从Winform 2返回Winform 1时,我创建了一个新的Winform和一个全新的托盘图标。这是我在程序第一次启动时创建的初始设置之上

当我从winform 1转到winform 2时,我会执行以下操作:

 this.Hide();
 Form2 form2 = new Form2();
 form2.InstanceRef = this;
 form2.Show();
 this.Close();
 Winform1 form;
 form = new Winform1 (capturedImageObj);
 form.Show();
然后,当我想从Winform 2返回Winform 1时,我会执行以下操作:

 this.Hide();
 Form2 form2 = new Form2();
 form2.InstanceRef = this;
 form2.Show();
 this.Close();
 Winform1 form;
 form = new Winform1 (capturedImageObj);
 form.Show();
我一开始就知道问题在于我正在创建一个新的Winform1,但我需要这样做,这样我才能将capturedImageObj传递回Winform1

我尝试在我的第一段代码中调用
this.close()
this.dispose()
,但这只会关闭程序。是否有一种方法可以处理Winform 1,但仍然使用Winform 2,并将需要返回的对象传递回Winform 1的新副本

以下是我的Winform 1的构造函数:

public ControlPanel(Image imjObj)
{
   InitializeComponent();
   _screenCap = new ScreenCapture();
   _screenCap.OnUpdateStatus += _screen_CapOnUpdateStatus;
   capturedImage = imjObj;
   imagePreview.Image = capturedImage;
}

将Winform1更改为使用如下属性:

public Image CapturedImage {
   get { return imagePreview.Image; }
   set { imagePreview.Image = value; }
}
public ControlPanel(Image imjObj)
{
   InitializeComponent();
   _screenCap = new ScreenCapture();
   _screenCap.OnUpdateStatus += _screen_CapOnUpdateStatus;
    CapturedImage = imjObj;
}
然后像这样更改构造函数:

public Image CapturedImage {
   get { return imagePreview.Image; }
   set { imagePreview.Image = value; }
}
public ControlPanel(Image imjObj)
{
   InitializeComponent();
   _screenCap = new ScreenCapture();
   _screenCap.OnUpdateStatus += _screen_CapOnUpdateStatus;
    CapturedImage = imjObj;
}
最后,将Winform2更改为:

((Winform1)this.InstanceRef).CapturedImage = capturedImageObj;
this.InstanceRef.Show();
this.Close();


根据注释,听起来您的
InstanceRef
属性的类型是
Form
。将其更改为类型
Winform1
。或者,我更改了上面的代码来为您执行一些强制转换。

当capturedImageObj未传递给Winform1时,它是否按预期工作?为什么不在winform2中创建一个自定义事件,然后在Winform1中订阅它呢。或者,您可以侦听Winform2的FormClosing事件,向Winform2添加一个方法。在FormClosing EventHandlercapturedImageObj中,该方法会公开图像并从Winform2获取。HandlerCaptureDimageObj是Winform1的构造函数的一部分。我需要在第一个winform中显示一些内容。我将使用构造函数代码标记进行更新-我已经使用自定义事件来获取捕获的图像。您是否建议我从Winform 2中的事件中关闭Winform 1?如果是这样的话,我该怎么做呢?不,我没有,只是在看你发布的构造函数代码,我没有看到任何东西阻止你使用相同的表单。我会将您的_screenCap定义从构造函数中移除,并将其余部分移到我上面提到的方法之一中。谢谢,但是我在这个.InstanceRef.CapturedImage中遇到了一个错误。我的程序说它没有定义,即使我像你建议的那样将get和set放在我的winform1中。我还有别的事要做吗?