[英]TextChanged event firing although I use bool to disable that
我需要重置框架上的所有字段,但是同時我需要disable textchanged event
為此,我嘗試使用布爾變量。 像這樣:
第一種使我能夠找到框架上所有TextBox
子級的方法。
bool skipChange = false;
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (T childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
}
這使我能夠找到某種類型的所有子代並將其重置。
我像這樣重置它:
public void resetForm() {
foreach (TextBox tb in FindVisualChildren<TextBox>(sPanelMain))
{
tb.Text = "";
}
}
最后,我需要調用resetForm方法並禁用textchnged觸發。
private void btnAddForm_Click(object sender, RoutedEventArgs e)
{
skipChange = true;
resetForm();
skipChange = false;
}
private void PDText_TextChanged(object sender, TextChangedEventArgs e)
{
if (skipChange) { return; }
....
}
這樣,如果skipChange
為true,我將嘗試從TextChanged方法退出。
但是在TextChanged方法中,skipChange始終為false,盡管我在調用之前將其設置為true。
謝謝
skipChange = true;
resetForm();
//Your final assignment is false, try to run it by just assigning it to true
這行:
skipChange = false;
我不確定是否可行,但是您可以嘗試刪除並重新附加事件處理程序,如下所示:
public void resetForm() {
foreach (TextBox tb in FindVisualChildren<TextBox>(sPanelMain))
{
tb.TextChanged -= PDText_TextChanged;
tb.Text = "";
tb.TextChanged += PDText_TextChanged;
}
}
最后我明白了。 @Rubidium 37的Whit正確方向以及@Florian Gl和@ pammy的建議Bhat我更改了代碼,現在可以工作了。
我從btnAddForm
方法中刪除skipChange = true;
和skipChange = false;
private void btnAddForm_Click(object sender, RoutedEventArgs e)
{
resetForm();
}
在resetForm
methof我設置skipChange
在foreach循環為真,與每一個TextBox控件我把它放在正確的方式。
public void resetForm() {
foreach (TextBox tb in FindVisualChildren<TextBox>(sPanelMain))
{
skipChange = true;
tb.Text = "";
}
}
然后在和我改變
if (skipChange) { return; }
至:
if (skipChange) { skipChange=false; return; }
這項工作很棒。 感謝所有人的建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.