2013-10-09 16 views
0

我有x個TabPages,每個TabPages上都有一個AddressBar控件和一個WebBrowser控件。 WebBrowser控件(自定義控件)具有一個名爲BrowserCount的int類型的屬性。同步標籤頁及其控件

BrowserCount值應該與它所在的TabPage相同。因此TabPage [0]具有BrowserCount = 0的瀏覽器; etc

但是,當我刪除一個TabPage的數字不同步。很明顯,答案就是遍歷剩餘的TabePages並將BrowserCount重置爲TabPages新索引。

我有這樣的代碼:

private void UpdateTabs() 
    { 
     // Renumber Tabs and Browsers 
     int tabCount = 0; 
     foreach (TabPage tp in customTabControl1.TabPages) 
     { 
      tp.Tag = tabCount; 
      foreach (Control ctrl in tp.Controls) 
      { 
       if (ctrl.Name == "browser") 
       { 
        ctrl.BrowserCount = TabCount; // Error Unknown member BrowserCount 
       } 
      } 
     } 
    } 

這樣看來,我需要得到瀏覽器的實際實例持有該卡可訪問BrowserCount屬性(不是屬性在所有的,它是隻是一個公共(非靜態)變量)。

任何想法如何讓瀏覽器的BrowseCount重新編號,以便它們與父級TabPage的索引相同?

謝謝。

+3

您可以使用TabControl Count屬性作爲您的迭代器的源。 – Tico

+0

如何在你的'TabPage'上實現'INotifyPropertyChanged'並在索引改變時引發事件?你需要用這種方法創建你自己的'TabPage' –

+0

你可以做的一件事是你可以引發一個由你的customTabControl處理的事件。這樣您就不必在特定的標籤頁上保存瀏覽器的實際實例。 –

回答

1

//錯誤未知的成員BrowserCount

權...因爲你的變量 「CTRL」 是類型的控制,並且控制沒有這樣的屬性/字段名爲 「BrowserCount」。

您需要將CAST「ctrl」轉換爲正確的類型。這可能看起來像這樣:

 int tabCount = 0; 
     foreach (TabPage tp in customTabControl1.TabPages) 
     { 
      tp.Tag = tabCount; 
      foreach (Control ctrl in tp.Controls) 
      { 
       if (ctl is YourUserControlTypeHere) 
       { 
        YourUserControlTypeHere uc = (YourUserControlTypeHere)ctl; 
        uc.BrowserCount = TabCount; // Error Unknown member BrowserCount 
       } 
      } 
     }