在父窗体上,改变checkbox控件的状态,实现子窗体的打开和关闭。在子窗体上,点击关闭按钮后,父窗体checkbox控件变为未选中状态。
1.方法
这里用委托事件的方法,实现窗体的相互访问。
2.父窗体(主窗体)
父窗体上放置5个checkbox控件。并将他们赋值到checkbox[]数组,以便代码进行循环调用。
checkbox[] checkbox;public mainformbert()
{
initializecomponent();
checkbox = new checkbox[5];
checkbox[0] = this.checkbox1;
checkbox[1] = this.checkbox2;
checkbox[2] = this.checkbox3;
checkbox[3] = this.checkbox4;
checkbox[4] = this.checkbox5;
}
给checkbox控件添加事件。并定义openorclosesubformppg(int i)方法实现打开或关闭子窗体。该方法调用了子窗体的事件,以相应recvinfo(int number)方法,设置checkbox控件为未选中状态:
subformppgtx[i].sendtoparent += new subformppg.sendfun(recvinfo);
private void checkbox1_checkedchanged(object sender, eventargs e)
{
openorclosesubformppg(0);
}private void checkbox2_checkedchanged(object sender, eventargs e)
{
openorclosesubformppg(1);
}private void checkbox3_checkedchanged(object sender, eventargs e)
{
openorclosesubformppg(2);
}private void checkbox4_checkedchanged(object sender, eventargs e)
{
openorclosesubformppg(3);
}private void checkbox5_checkedchanged(object sender, eventargs e)
{
openorclosesubformppg(4);
}
subformppg[] subformppgtx = { null, null, null, null, null};private void openorclosesubformppg(int i)
{
try
{ if (checkbox[i].checked)
{ string formtitle, formname; if (i < 0 || i > 4)
{ throw new indexoutofrangeexception("channel is out of range");
} else if (i == 4)
{
formtitle = "parallelwrite";
formname = "subformppg" + formtitle;
} else
{
formtitle = "tx" + i;
formname = "subformppg" + formtitle;
} if (subformppgtx[i] == null || subformppgtx[i].isdisposed)
{
subformppgtx[i] = new subformppg();
subformppgtx[i].text = formtitle;
subformppgtx[i].name = formname;
subformppgtx[i].tag = i;
subformppgtx[i].sendtoparent += new subformppg.sendfun(recvinfo);//调用子窗体的事件
subformppgtx[i].show(this);
} else
{
subformppgtx[i].windowstate = formwindowstate.normal;
subformppgtx[i].activate();
}
} else
{ //subformppgtx[0].close();
subformppgtx[i].dispose();
subformppgtx[i] = null;
}
} catch (indexoutofrangeexception ex)
{
messagebox.show(ex.message);
} catch (exception ex)
{
messagebox.show(ex.message);
}
}private void recvinfo(int number)
{ this.checkbox[number].checked = false;
}
3.子窗体
添加事件sendtoparent,当子窗体关闭时,响应事件,将信息传递给父窗体。
public delegate void sendfun(int number);
public event sendfun sendtoparent;
private void subformppg_formclosed(object sender, formclosedeventargs e)
{ if (sendtoparent != null)
{
sendtoparent((int)this.tag);
}
}
以上就是 从0自学c#05--窗体之间的相互访问的内容。
