我有一个mainForm和所有者表单cameraViewVS(child)。我有一个第二种形式的复选框,我希望当我检查或取消选中我在第一种形式中检索它的值时,我在mainForm中使用了这样的propertyName
public bool propertyZoomCam
{
get { return f1.checkBoxZoomCam.Checked; }
}
当我仅显示f2的一次实例时,我在f1中调用此属性。
public void timer()
{
for (int l = 0; l < 2; l++)
{
cameraInstance[l].Start();
if (cameraInstance[l].MoveDetection == true)
{
foreach (Form S in Application.OpenForms)
{
var frm = S as Formes.CameraViewVS;
if (frm != null && frm.Addresse == cameraInstance[l].adresse) {
// Match, activate it
cameraInstance[l].MoveDetection = false;
frm.WindowState = FormWindowState.Normal;
frm.Activate();
return;
}
}
// No match found, create a new one
var f1 = new Formes.CameraViewVS(cameraInstance[l], adresseIPArray[l]);
f1.Show(this);
if(propertyZoomCam)
zoom = 15;
}
}
}
我只检索第一个false值,因为它的开头值是false,当我更改检查或取消选中时,我不会检索它的值。
任何帮助?
答案 0 :(得分:0)
在代码中进行以下更改:
在表单级别声明一个变量,该变量将保存对子表单的引用。
现在用Timer函数中的frmCamera替换变量f1和frm,不要在计时器函数中声明变量f1和frm。
3.现在更新属性代码。
Formes.CameraViewVS frmCamera;
public bool propertyZoomCam
{
get
{
if (frmCamera!=null)
return frmCamera.checkBoxZoomCam.Checked;
else
return false;
}
}
public void timer()
{
for (int l = 0; l < 2; l++)
{
cameraInstance[l].Start();
if (cameraInstance[l].MoveDetection == true)
{
foreach (Form S in Application.OpenForms)
{
frmCamera = S as Formes.CameraViewVS;
if (frmCamera != null && frmCamera.Addresse == cameraInstance[l].adresse) {
// Match, activate it
cameraInstance[l].MoveDetection = false;
frmCamera.WindowState = FormWindowState.Normal;
frmCamera.Activate();
return;
}
}
// No match found, create a new one
frmCamera = new Formes.CameraViewVS(cameraInstance[l], adresseIPArray[l]);
frmCamera.Show(this);
if(propertyZoomCam)
zoom = 15;
}
}
}
再次触发计时器事件时,您丢失了Camera表单的引用,所以现在我们将表单存储在属性中使用的同一对象中。
答案 1 :(得分:0)
您应该在这里查看几件事情: