循環,並找到控制是不是真的有必要。您應該所有的面板添加到同一容器中,用Controls
收集和傳遞之名,以獲得控制:
public void setMeVisible(string PanelName) {
PageMainScreen.Visible = false;
PageNewRegistration.Visible = false;
PageSelectedPatient.Visible = false;
Control c = sameContainer.Controls[PanelName];
if(c != null) c.Visible = true;
}
如果每次只有1面板可見,你應該使用一些變量來跟蹤當前顯示面板和隱藏只(而不是因爲你做了所有的控件)這是這樣的:
Control currentShown;
public void setMeVisible(string PanelName) {
Control c = sameContainer.Controls[PanelName];
if(c != null) {
c.Visible = true;
if(currentShown != null) currentShown.Visible = false;
currentShown = c;
}
}
而最後,如果你不想使用相同的容器您的所有面板。你應該申報一些List<Panel>
包含所有的面板,那麼你可以通過它們方便地瀏覽:
List<Panel> panels = new List<Panel>();
panels.AddRange(new[]{PageMainScreen, PageNewRegistration, PageSelectedPatient});
public void setMeVisible(string PanelName) {
var c = panels.FirstOrDefault(panel=>panel.Name == PanelName);
if(c != null) {
c.Visible = true;
if(currentShown != null) currentShown.Visible = false;
currentShown = c;
}
}
注意:不要嘗試你的用戶界面不必要地複雜。我想表示您應將所有面板放在同一個容器(如您的表單)上。這就是我們的方式,這樣你就可以使用第一種方法,不需要循環,易於維護。您還應該考慮Dock
和BringToFront()
和SendToBack()
等方法來顯示/隱藏視圖。
windows還是web? – Liam
幸運的是在C#中沒有eval:D – giammin
[windows解決方案](http://stackoverflow.com/questions/1536739/c-sharp-get-control-by-name) – Liam