您好,欢迎访问一九零五行业门户网

从0自学C#05--窗体之间的相互访问

在父窗体上,改变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--窗体之间的相互访问的内容。
其它类似信息

推荐信息