2013-08-23 72 views
1

我正在用C#編寫一個應用程序,並在窗體上使用以下控件安排。如何訪問tabcontrol中的控件?

首先,有一個子窗體包含一個splitcontainer,它帶有兩個面板,Panel1在左邊,Panel2在右邊。 Panel1包含複選框和文本框。 Panel2包含一個選項卡控件。每個選項卡以編程方式創建時都包含複選框和文本框。

當我點擊子窗體頂部的保存時,Panel1中所有控件的所有數據都會正確保存到二進制文件中。然後保存例程將不得不迭代選項卡控件中的每個選項卡,並保存每個選項卡中複選框和文本框的數據。以下是我迄今爲止:「不會在當前的背景下存在」

   foreach (TabPage tab in tabControl1.TabPages) 
      { 
       string Question = tbQuestion.Text(tabControl1.SelectedIndex); 
      } 

不幸的是,tbQuestion.Text結束了下它波浪線,該錯誤消息,表明每個選項卡中的所有其他控件也會發生同樣的情況。我需要做什麼來訪問每個標籤中的控件?

回答

2

可以嘗試像:

foreach (TabPage tab in tabControl1.TabPages) 
{ 
    Control ctl = tp.Controls.Cast<Control>().Where(c=>c.Name=="tbQuestion").FirstOrDefault(); 

    string Question = ... ctl.Text; 
} 
0

那麼如果你正在創建它們編程爲你創建的控制對添加一個條目,你可以做類似

Dictionary<TextBox,Checkbox> questionsAndAnswers = new Dictionary<TextBox,CheckBox>(); 

然後。 你可以進一步使用Dictionary<string,bool>。 另一種選擇是將所有迭代並綁定到List<T>,其中T是一些包含QuestionAnswer抽象的類,以編程方式設置綁定,並且您的加載和保存代碼只需處理簡單的問題List<T> 聽起來更復雜,但是你可以用它去除非常多的非常脆弱的代碼。更好的是,你可以敲一個UserControl,並最好通過一個接口建立所有這些行爲。

無論如何都會從糟糕的經驗教訓中獲得一些想法。

所有你需要的是一個選擇題的新要求(單個或多個選擇等),或者只是一對夫婦當前標籤頁內板得到一些伸縮動作和所有突然

(CheckBox)Form.Controls[0].Controls[2].Controls[8]不僅不容易理解,它已經壞了...

+0

謝謝你的想法,託尼。我一定會給列表想法一試。這聽起來就像我需要的東西。通過多個選項卡進行迭代聽起來比我真正需要做的工作多得多。如果有更簡單的方法,爲什麼不呢? – user2272380

相關問題