2012-08-23 123 views
1

我有一個TabControl,它以三個TabPages開始。在第一個選項卡上有一個NumericUpDown(微調),它顯示標籤的數量,並允許用戶添加多達10個額外的標籤。一旦它們添加超過5或6,它將超出表格的寬度,其餘的標籤可以通過頂部的幾個左/右箭頭訪問。當一直走到右側,然後使用微調器回到0(移除所有額外的選項卡並保留開始的三個選項卡)時,它將從窗格頂部刪除所有選項卡,並且只需將微調器設置回1它會刷新並顯示全部4個(從開始加3個微調器)。 我已經試過的 Application.DoEvents() this.Refresh() this.Invalidate() this.Update() 幾個commbinations但似乎沒有任何工作。任何人都可以提出一個不更新/刷新的原因嗎?tabcontrol不刷新

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(new Action (()=> tabControl1.SelectTab(0))); – MethodMan

+0

爲什麼會出現selectedindex問題? – user1584120

+0

我在黑暗中沒有任何代碼刺傷,看看你是怎麼做的......任何人都很難給出一個具體的答案..我會建議發佈一些代碼 – MethodMan

回答

1

沒有看到任何代碼或知道什麼類型的項目,這是的WinForms,WPF,ASP.NET等。 很難給出一個明確的答案,我會認爲這是的WinForms

我不確定你是否可以。以下是來自MSDN的引用:

「TabPage中包含的控件只有在顯示選項卡頁面之後纔會創建,並且只有在顯示選項卡頁面之後,纔會激活這些控件中的任何數據綁定。

但是,並不是讓更新代碼直接從控件獲取值,也許可以創建一個類來存儲用於填充控件的數據,然後在調用更新代碼時要求類爲值和類會檢查控件是否加載,否則它會從Data中獲取值。

+0

我如何知道這是什麼類型的項目? – user1584120

+0

嗯,它是一個Web應用程序,例如你有.aspx文件嗎?如果是的話,這是一個ASP.NET項目..張貼你正在使用的一些代碼,我很確定,如果你把正確的類定義,我們可以告訴你什麼類型的項目,你正在使用..我真的不能相信你不知道你正在使用什麼類型的項目.. – MethodMan

+1

對不起,新的C#....這是一個表單應用程序。我在一個小測試應用程序中複製它: – user1584120