2012-08-23 12 views
1

У меня есть TabControl, который начинается с трех вкладок в нем. На первой вкладке есть NumericUpDown (spinner), который отображает количество вкладок и позволяет пользователю добавить до 10 дополнительных вкладок. Когда они добавляют более 5 или 6, он выходит за пределы ширины формы, а остальные вкладки доступны с помощью пары стрелок влево/вправо вверху. Пройдя весь путь вправо, а затем используя счетчик, чтобы вернуться назад к 0 (удаление всех дополнительных вкладок и выход из трех стартов), он удаляет все вкладки с верхней части панели и только путем установки вертушки на 1 он обновляет и отображает все 4 (3 от начала плюс 1 от счетчика). Я попробовал несколько commbinations из Application.DoEvents() this.Refresh() this.Invalidate() this.Update() но ничего не похоже на работу. может ли кто-нибудь предложить причину, почему он не обновляется/обновляется?tabcontrol not refreshing

public partial class Form1 : Form 
{ 

TabPage[] tabs; 

    public Form1() 
    { 
     InitializeComponent(); 
     tabs = new TabPage[tabControl1.Controls.Count]; 
     tabs[0] = tabPage1; 
    } 

    private void numericUpDown1_ValueChanged(object sender, EventArgs e) 
    { 
     int numTabs = tabControl1.Controls.Count; 
     decimal spinnerValue = numericUpDown1.Value; 

     if (numTabs < spinnerValue) //add a tab 
     { 
      TabPage[] newTabs = new TabPage[(int)spinnerValue]; 
      for (int i = 0; i < numTabs; i++) 
      { 
       newTabs[i] = tabs[i]; 
      } 

      TabPage tab = new TabPage("Tab " + numTabs); 
      newTabs[(int)spinnerValue-1] = tab; 
      tabControl1.Controls.Add(tab); 
      tabs = newTabs; 
     } 
     else //remove a tab 
     { 
      TabPage[] newTabs = new TabPage[(int)spinnerValue]; 
      for (int i = 0; i < spinnerValue; i++) 
      { 
       newTabs[i] = tabs[i]; 
      } 
      tabControl1.Controls.Remove(tabs[(int)spinnerValue]); 
      tabs = newTabs; 
     } 
    } 
} 
+0

Как выглядит ваш код ..? похоже, что у вас есть 2 вопроса, один из которых - проблема SelectedIndex и другие DoEvents() не используют это. возможно, вы можете посмотреть BeginInvoke if (tabControl1.SelectedIndex == 1) { this.BeginInvoke (новое действие (() => tabControl1.SelectTab (0))); – MethodMan

+0

Почему возникла проблема selectindex? – user1584120

+0

Я принимаю удар в темноте без какого-либо кода, чтобы посмотреть, как вы поживаете ... трудно кому-либо дать конкретный ответ. Я бы предложил разместить код – MethodMan

ответ

1

Не видя никакого кода или знать, какой тип проекта это WinForms, WPF, ASP.NET и т.д .. это трудно дать однозначный ответ, я буду считать, что это WinForms

Я не уверен, если сможешь. Ниже приведена цитата из MSDN:

«Элементы управления, содержащиеся в TabPage, не создаются до тех пор, пока не будет показана страница закладки, и любые привязки данных в этих элементах управления не будут активированы до тех пор, пока не появится страница закладки».

Однако вместо того, чтобы код обновления получал значения из элементов управления напрямую, возможно, вы могли бы создать класс, который мог бы хранить данные, которые вы используете для заполнения элементов управления, а затем, когда вызывается код обновления, он запрашивает класс для значение и класс проверяет, загружен ли элемент управления, а в противном случае он получает значение из данных.

+0

, как я знаю, какой тип проекта это? – user1584120

+0

хорошо это веб-приложение, например, у вас есть .aspx-файл? если это проект ASP.NET .. опубликуйте какой-то код, который вы используете, и я уверен, что если вы введете правильное определение класса, мы сможем рассказать вам, какой тип проекта вы используете. Я, честно говоря, не могу поверить, что вы не знаете, какой тип проекта вы используете. – MethodMan

+1

извините за новый C# .... это приложение форм. iive воспроизвела его в небольшом тестовом приложении: – user1584120