如何删除控件
C# visual studio 2010 程序为监控电池电压,在tabpage 里 采用 chart 方式 显示每个电芯电压,当一tabpage显示不了所有电池信息时,会自动添加tabpage以便显示所有电池信息。
要求是当外接信号源断开时,删除所有的chart,以及添加的tabpage。因为再次接上的电池可能第一个tabpage就能全部显示。
注:第一页(页名:tabPageCellDetail1)总是保留,只删除添加的页面。
删除部分的代码如下:
- C# code
private void clearChart(int batNum, byte batCell) { if (batCell> 5) { pageNo = (byte)(batNum / 10 + 1); } else { pageNo = (byte)(batNum / 19 + 1); } if (pageNo > 2) { for (int ii = 2; ii <= pageNo; ii++) { string name = "tabPageCellDetail" + ii.ToString(); tabPageCellDetail1.Controls.RemoveByKey(name); } } else { foreach (Control charts in tabPageCellDetail1.Controls) { tabPageCellDetail1.Controls.Remove(charts); } } }
上述程序运行后只删除tabPageCellDetail1里面的chart 控件,程序添加的tabPageCellDetail2却没有被删除。
我还试过以下方法:
- C# code
private void clearChart(int batNum, byte batCell) { if (batCell> 5) { pageNo = (byte)(batNum / 10 + 1); } else { pageNo = (byte)(batNum / 19 + 1); } if (pageNo > 2) { foreach (Control findControl in this.Controls) { TabPage findTabPage = (findControl as TabPage); if (findControl.Name.Length > 17) { //first page, remain page, remove control if (findControl.Name == "tabPageCellDetail1") { foreach (Control charts in tabPageCellDetail1.Controls) { tabPageCellDetail1.Controls.Remove(charts); } } else { string tempStr = string.Empty; tempStr = findControl.Name.Substring(0, 17); if (tempStr == "tabPageCellDetail") { //not first page, remove page and control foreach (Control charts in findControl.Controls) { findControl.Controls.Remove(charts); } this.Controls.Remove(findControl); } } } } } else { foreach (Control charts in tabPageCellDetail1.Controls) { tabPageCellDetail1.Controls.Remove(charts); } } }
但第二页的chart和第二页本身还是没有删除,只删除tabPageCellDetail1里面的chart 控件,这到底是为什么?搞不懂,请高手解决?
[解决办法]
个人觉得,dispose不可以,因为dispose这是起到释放资源的作用,并没有解决。。。你要删除控的问题。