我有一些texBox
用户必须输入一些数据。
textBox1
textBox2
textBox3
textBox4
填写textBox
后,用户按下按钮,其他内容完成。
我想在用户点击按钮后立即清除所有textBox
。
我知道我可以使用.clear
textBox1.clear();
textBox2.clear();
textBox3.clear();
textBox4.clear();
但是这对我来说有点像 dirty ,因为我有超过4个textBoxes。
所以我考虑从1循环到number_of_textboxes
然后.clean
每个循环,但我不知道如何获得number_of_texboxes
。有没有办法得到它所以我可以做这个循环,或任何其他简单的方法来实现这一点?
提前致谢。
答案 0 :(得分:1)
您可以遍历UI中的所有元素并仅提取Textbox
es,但与直接代码相比,它几乎没有效率。但是,您可以使用VisualTreeHelper
class的递归方法执行此操作,如下所示:
GetChildrenOfType<TextBox>(this).ToList().ForEach(textBox => textBox.Clear());
...
public static IEnumerable<T> GetChildrenOfType<T>(DependencyObject dependencyObject) where T : DependencyObject
{
if (dependencyObject != null)
{
for (int index = 0; index < VisualTreeHelper.GetChildrenCount(dependencyObject); index++)
{
DependencyObject child = VisualTreeHelper.GetChild(dependencyObject, index);
if (child != null && child is T) yield return (T)child;
foreach (T childOfChild in GetChildrenOfType<T>(child)) yield return childOfChild;
}
}
}
这当然假设this
是相关TextBox
es的父控件......如果没有,你可以这样调用:
GetChildrenOfType<TextBox>(ParentGrid).ToList().ForEach(textBox => textBox.Clear());
答案 1 :(得分:1)
与Sheridan说的有些相似:
void ClearAllTextBoxes(DependencyObject obj)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
if (obj is TextBox)
((TextBox)obj).Text = null;
LoopVisualTree(VisualTreeHelper.GetChild(obj, i));
}
}
但是对于WPF,通常最好清除文本框绑定的对象。这可以确保您的逻辑不依赖于UI实现。