2013-10-09 2 views
0

У меня есть x количество вкладок, на каждой из TabPages есть элемент управления AddressBar и элемент управления WebBrowser. Элемент управления WebBrowser (настраиваемый элемент управления) имеет свойство типа int, называемое BrowserCount.Синхронизация табулатур и их элементов управления

Значение BrowserCount должно быть таким же, как TabPage, на котором оно расположено. Итак, TabPage [0] имеет браузер с BrowserCount = 0; etc

Однако, когда я удаляю TabPage, номера выходят из строя. Очевидно, что ответ состоит в том, чтобы просто перебрать оставшиеся вкладки TabePage и сбросить значение 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 Browser, чтобы они были такими же, как и указатель родительского TabPage?

Спасибо.

+3

Вы можете использовать свойство CountControl Count как источник вашего итератора. – Tico

+0

Как «внедрить« INotifyPropertyChanged »на ваш« TabPage »и вызывать событие при изменении индекса? Вам нужно создать свою собственную «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 
       } 
      } 
     } 
Смежные вопросы