一叶障目,没有接触到的知识点真是太多了......
最近项目里需要用到一个小工具,就用winform写了一个出来,然后需要一个功能就是清空控件内容,我这个工具就用到了textbox和combobox,就拿这两个做示例了。
对于清空winform控件,网上搜索答案基本都是需要转化成string然后比较name的硬编码,参考:
https://stackoverflow.com/questions/7252186/switch-case-on-type-c-sharp
https://www.cnblogs.com/lonelyxmas/p/5472462.html
当我这么写了之后,就像下面这样,被review代码的资深嫌弃了......
private void ClearCntrValue(Control parContainer) { for (int index = 0; index < parContainer.Controls.Count; index++) { // 如果是容器类控件,递归调用自己 if (parContainer.Controls[index].HasChildren) { ClearCntrValue(parContainer.Controls[index]); } else { switch (parContainer.Controls[index].GetType().Name) { case "TextBox": parContainer.Controls[index].Text = ""; break; case "RadioButton": ((RadioButton)(parContainer.Controls[index])).Checked = false; break; case "CheckBox": ((CheckBox)(parContainer.Controls[index])).Checked = false; break; case "ComboBox": ((ComboBox)(parContainer.Controls[index])).Text = ""; break; } } } }
于是就学了在现在的我看起来的神操作,就像这样:
private void ClearCntrValue(Control.ControlCollection controls) { foreach (Control ctr in this.Controls) { switch (ctr) { case TextBox text: text.Text = ""; break; case ComboBox comboBox: comboBox.SelectedItem = OperateType.PleaseWait; break; } } }
参考官方文档:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/switch
每天进步一点点,咱不能什么都知道,但是看到了好的东西就记下来,慢慢积累就牛起来啦。