当前位置: 首页 > 编程语言 > C#

清除C#窗体上所有控件的最佳方法是什么?Share

时间:2023-04-11 01:07:42 C#

清除C#窗体上所有控件的最佳方法是什么?我确实记得前一段时间看到过这些问题,但我进行了搜索,但找不到任何内容。我正在尝试想出最干净的方法来将表单上的所有控件清除回默认值(例如清除文本框、取消选中复选框)。你会怎么做?我知道这是一个老问题,但只是我的2美分。这是我的表清理助手类。使用系统;使用System.Windows.Forms;namespaceFormClearing{classHelper{publicstaticvoidClearFormControls(Formform){foreach(Controlcontrolinform.Controls){if(controlisTextBox){TextBoxtxtbox=(TextBox)control;txtbox.Text=string.Empty;}elseif(controlisCheckBox){CheckBoxchkbox=(CheckBox)control;chkbox.Checked=false;}elseif(controlisRadioButton){RadioButtonrdbtn=(RadioButton)control;rdbtn。检查=假;}elseif(controlisDateTimePicker){DateTimePickerdtp=(DateTimePicker)control;dtp.Value=DateTime.Now;}}}}}我从任何表单调用该方法,将表单对象作为参数传递。Helper.ClearFormControls(这个);您可以将其扩展到其他类型的控件。你只需要施放它。您可以使用foreach(Controlctrlinthis){if(ctrlisTextBox)(ctrlasTextBox).Clear();循环控制我投票支持Nathan的解决方案,但想添加一条评论而不是可以处理它。他实际上非常好,但我认为最好的解决方案是在将每个控件类型添加到GUI之前对其进行子类化。让它们都实现一个“可清除”或类似的接口(我是一名Java程序员,但概念应该在那里),然后将其作为“可清除”对象的集合进行迭代,在每个对象上调用唯一的方法.clear()其中之一就是GUI在OO系统中的实现方式。这将使您的代码在将来易于扩展——几乎太容易了,您会感到震惊。编辑:(基于Nathan关于不改变现有控件的评论)也许您可以创建引用您的控件的“容器”类(每种控件一个)。在您在答案中设置的循环中,您实例化了正确的容器,将实际控件放入容器中并将容器存储在集合中。这样你就可以重新迭代一个集合。这将是一个很好的简单解决方案,并不比您建议的复杂多少,但更具可扩展性。上述解决方案似乎忽略了嵌套控件。可能需要递归函数,例如:publicvoidClearControl(Controlcontrol){TextBoxtb=controlasTextBox;if(tb!=null){tb.Text=String.Empty;}//重复组合框、列表框、复选框和任何其他您想要清除的控件if(control.HasChildren){foreach(Controlchildincontrol.Controls){ClearControl(child)}}}不检查控件类型的文本属性。在一组派生控件上实现一个接口,如IClearable(如BillK所建议的)将减少此函数的长度,但每个控件需要更多的工作。这与我在第一个答案中提出的相同,但在VB中,在我们获得VB10之前,这是我们在VB中可以做的最好的事情,因为它不支持lambda中的非返回函数:VB解决方案:公共模块扩展PrivateSubClearTextBox(ByValTAsTextBox)T.Clear()EndSubPrivateSubClearCheckBox(ByValTAsCheckBox)T.Checked=FalseEndSubPrivateSubClearListBox(ByValTAsListBox)T.Items.Clear()结束子PrivateSubClearGroupbox(ByValTAsGroupBox)T.Controls.ClearControls()EndSub_PublicSubClearControls(ByValControlsAsControlCollection)对于控件中的每个控件IfControlDefaults.ContainsKey(Control.GetType())ThenControlDefaults(Control.GetType()).Invoke(Control)EndIfNextEndSubPrivate_ControlDefaultsAsDictionary(OfType,Action(OfControl))PrivateReadOnlyPropertyControlDefaults()AsDictionary(OfType,Action(OfControl))GetIf(_ControlDefaults是Nothing)Then_ControlDefaults=NewDictionary(OfType,Action(OfControl))_ControlDefaults.Add(GetType(TextBox),AddressOfClearTextBox)_ControlDefaults.Add(GetType(CheckBox),AddressOfClearCheckBox)_ControlDefaults.Add(GetType(ListBox),AddressOfClearListBox)_ControlDefaults.Add(GetType(GroupBox),AddressOfClearGroupbox)EndIfReturn_ControlDefaultsEndGetEnd属性结束模块调用:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickMe.Controls.ClearControls()EndSub我只是把它贴在这里,这样人们就可以看到如何在VB中做同样的事情privatevoidFormReset(){ViewState.Clear();Response.Redirect(Request.Url.AbsoluteUri.ToString());下面是我用来清除实现ITextBox的控件类型的文本的方法。我注意到在示例中设置了默认布尔值。我相信你可以修改它来为布尔组件设置默认值。将控件类型(TextBox、Label等)和控件集合传递给Clear方法,它将清除实现ITextBox的控件中的所有文本。像这样://清除文本框WebControlUtilities.ClearControls(myPanel.Controls);Clear方法适用于页面或母版页。控件集合类型可能会有所不同。现在。Form、ContentPlaceHolder等以上是C#学习教程:清除C#窗体上所有控件的最佳方法是什么?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——//////ClearsTextfromControls...ieTextBox,Label,anythingthat实现ITextBox/////集合类型,即。ContentPlaceHolder..///即TextBox、Label、任何实现ITextBox的东西///publicstaticvoidClear(ControlCollectioncontrols)whereC:ITextControlwhereT:Control{列表持有者=placeHolders.ToList();foreach(Tholderinholders){IEnumerableenumBoxes=holder.Controls.OfType();列表框=enumBoxes.ToList();foreach(Cboxinboxes){box.文本=string.Empty;}}}//////从控件中清除文本。/////////控件。publicstaticvoidClearControls(ControlCollectioncontrols)whereC:ITextControl{IEnumerableenumBoxes=controls.OfType();列表框=enumBoxes.ToList();foreach(Cboxinboxes){box.Text=string.Empty;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: