2016-07-28 73 views
0

我有一個包含選項卡控件(page1,page2和page3)的WPF。在TabControl中循環Groupbox

在2標籤控制頁面上,我有3組框(groupbox_Agroupbox_B,和groupbox_C),並且每個組框中的含有3文本框

我可以知道什麼是C#代碼來遍歷所有文本框並清除內容。

+0

您是否嘗試過類似groupbox_A。 textbox1.clear()? –

+0

我強烈建議您使用數據綁定並清除* data *。 –

+0

最初的代碼是使用提到的代碼(textbox1.clear())。考慮到接近60的文本框,維護代碼將會很困難。 – user6648485

回答

0

該函數將返回選項卡控件中的所有文本框。

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; 
      } 
     } 
    } 
} 

您可以通過列舉這樣得到的所有文本框:

foreach (var textbox in FindVisualChildren<TextBox>(window)) 
{ 
    // do something with tb here 
} 

來源:Find all controls in WPF Window by type

+0

感謝您分享代碼。看起來我需要確保標籤頁2被激活,以便第2頁中的文本框存儲清除。 – user6648485

+0

我的stackpanel_1的方向設置爲垂直。在stackpanel_1中,它由stackpanel_A,B,C和D組成,方向設置爲水平幷包含幾個按鈕。一些代碼像foreach(stackpanel_1.Children中的stackepanel stkpnl)是如何工作的。 – user6648485

+0

同樣的事情也發生在這裏。請參閱'for(int i = 0; i ViVi

0

這不`噸看起來像一個好辦法..找到另一個邏輯來清除文本..但如果你只是想知道它會如何工作...

最簡單的方法:

IEnumerable<myType> collection = control.Children.OfType<myType>(); 

(控制窗口的根元素的myType將groubBox你的情況)

微軟的方式,通過所有元素Link獲得:

// Enumerate all the descendants of the visual object. 
static public void EnumVisual(Visual myVisual) 
{ 
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(myVisual); i++) 
    { 
     // Retrieve child visual at specified index value. 
     Visual childVisual = (Visual)VisualTreeHelper.GetChild(myVisual, i); 

     // Do processing of the child visual object. 

     // Enumerate children of the child visual object. 
     EnumVisual(childVisual); 
    } 
} 
+0

您能否詳細介紹一下最簡單的方法和Microsoft的方式,因爲我仍然嘗試獲取C#技能並應用於我的工作。 (我用VB在2周前練習,我從C#開始)。 – user6648485