2012-12-26 91 views
1

我有一個Windows窗體應用程序用C#編寫,它有三個選項卡,我希望接受按鈕更改與活動選項卡。就像當我在選項卡1中時,我希望按鈕_1是接受按鈕,但是當我在選項卡3中時,我希望button_3成爲我的接受按鈕。我無法弄清楚如何做到這一點,也許我沒有在我的搜索中使用正確的術語,但我找不到任何好的資源在線向我展示如何做到這一點。更改接受按鈕與標籤

+0

我編輯了您的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

不要忘記接受適用的答案。 –

回答

4

最好的猜測是掛鉤到選項卡控件上的SelectedIndexChanged事件,並根據選擇哪個選項卡更改AcceptButton。僞代碼:

Form_OnLoad(...) 
{ 
    this.tabControl.SelectedIndexChanged += (s,e) => { 
     TabControl tab = s as TabControl; 
     switch (tab.SelectedIndex){ 
      case 3: 
       this.AcceptButton = this.button_3; 
       break; 
      case 2: 
       this.AcceptButton = this.button_2; 
       break; 
      case 1: 
      default: 
       this.AcceptButton = this.button_1; 
       break; 
     } 
    }; 
} 

或類似的東西。

+0

整潔的想法+1。這可以讓你改變'AcceptButton'的文本,但是我真的不認爲這對改變函數是實用的。 (另外,我認爲你的意圖是鉤住「SelectedIndexChanged」事件,每次單擊控件時都會觸發「Selected」)。 –

+0

我的印象是他們想改變按鈕綁定,而不僅僅是文本。你可能是正確的,你想綁定到索引變化時,而不是當標籤iis簡單點擊時 –

1

你可以做基於標籤當前通過使用AcceptButton_Click事件處理程序下面的代碼選擇的不同的東西:

if (tabControl1.SelectedTab == tabPage1) 
{ 
    //Do something 
} 
else if (tabControl1.SelectedTab == tabPage2) 
{ 
    //Do something different 
} 

如果你喜歡用字符串的工作,每個標籤頁都有一個唯一的名稱:

switch (tabControl1.SelectedTab.Name) 
{ 
    case "Tab1Name": 
     //Do something 
     break; 
    case "Tab2Name": 
     //Do something different 
     break; 
} 

如果這回答了你的問題,請mark it as the answer to your question

0

TabControl有SelectedIndexChanged事件。

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (tabControl1.SelectedTab == tabControl1.TabPages["RenewalTab"]) 
     { 
      this.AcceptButton = btnRenewal; 
     } 
     else if (tabControl1.SelectedTab == tabControl1.TabPages["SellerTab"]) 
     { 
      this.AcceptButton = btnSeller; 
     } 
    } 
+0

一些解釋會顯着提高你的答案的質量 – mrun