2015-03-03 65 views
0

我正在使用winforms應用程序。我正在處理的表單繼承基礎表單。在基本形式中,AcceptButton屬性設置爲cmdOK(基本上是保存和退出按鈕)。這是必需的行爲。覆蓋繼承的Windows窗體上的AcceptButton設置

但是,我正在處理的表單有一些dropdownlist,雖然焦點在他們身上,但我需要更改回車鍵的行爲。

例如,如果重點是cboTags輸入是按我需要調用cmdAddTag_Click,如果轉變 + 輸入是按我需要調用cmdRemoveTag_Click。我加入以下代碼:

private void cboTags_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter && e.Modifiers == Keys.Shift) 
    { 
     cmdRemoveTag_Click(new object(), new EventArgs()); 
    } 
    else if (e.KeyCode == Keys.Enter) 
    { 
     cmdAddTag_Click(new object(), new EventArgs()); 
    } 
} 

當我測試了一下,發現窗口關閉我意識到AcceptButton財產被設定的繼承形式。我無法找到它。

編輯

如果焦點是其他地方窗體上的行爲應該保持原樣。只有當重點是某些控件時,我需要更改Enter鍵的行爲。

+1

您可以將繼承形式的'AcceptButton'屬性單獨更改爲(更正我)'null'或繼承形式的新按鈕。 – Sinatr 2015-03-03 13:09:54

+0

@Sinatr無論焦點在哪裏,這個形式都會改變。正如我在問題中所說的,如果重點在某些控制上,我只想改變它。我已經添加了一個編輯,使其更清晰。 – Fred 2015-03-03 13:19:26

+0

您已經回答了您的問題:*如果焦點位於某些控件上,則只想更改它。* - 處理焦點事件以啓用/禁用想要的行爲。例如。設置'AcceptButton = null'時,*某些控件*獲得焦點,否則重置(即手動控制行爲)。我不知道更簡單的方法。可能如果你想以基本形式處理'Enter'鍵事件並提供一些方法/屬性來啓用/禁用它,那麼它會更容易。 – Sinatr 2015-03-03 13:24:21

回答

0

this.AcceptButton = null;

(或一些變化,您編程控制)

編輯

通過「控制編程」,我的意思是,當你專注於一個區域,你不想擁有的AcceptButton火然後你運行該代碼,然後當你離開它時,你將AcceptButton設置回原來的狀態。

+0

沒有這個不會工作 – Fred 2015-03-03 13:20:18

+0

是的,它會......當焦點是你不想讓AcceptButton工作的區域時,你設置它。然後當你失去焦點時,你將它重新設置。 – Ceisc 2015-03-03 13:21:08

+0

那麼你對每個控件所說的我想改變這一點,我必須在獲取焦點時取消AcceptButton行爲,然後恢復失去焦點時的行爲? – Fred 2015-03-03 13:24:49