2013-08-31 68 views
0

我一直在嘗試使用Visual Inheritance進行遊戲,以便我可以在多種形式中重用一組按鈕。從基本形式的派生形式上的調用方法

基本上我想要實現,我想的按鈕具有相同的視覺行爲在不同的形式,但是,他們應該執行,這取決於形式繼承它不同的動作。

假設我有FormButtonBar

新以下按鈕|編輯|搜索|取消|關閉

他們應禁用或有自己的文字和圖標根據當前形勢事情改變(我這樣做,使用.Tag),這些都是可供選擇的選項顯示

保存|保存|刪除|取消|關閉

即使我按照繼承這個的形式工作,我顯然希望這些按鈕處理不同的內容,具體取決於我擁有哪些形式。

我想的是什麼辦法叫像saveNewItem()saveChangedItem()removeItem()方法,每一個表格繼承FormButtonBar應該有。

但是,如何從FormButtonBar打電話給他們?

例如:

private void buttonSearchRemove_Click(object sender, EventArgs e) 
    { 

     if (buttonSearchRemove.Tag == "search") 
     { 

      //call the search form here and wait for something to be returned 

      //the following 3 lines are the ones that switch text, icons and enabled/disabled on the buttons 

      utils.hablitarBotoes(panelBotoes, "abc"); 
      utils.alternarBotoes(panelBotoes, "b"); 
      buttonBuscarExcluir.Text = "Excluir"; 

     } 
     else if (buttonSearchRemove.Tag == "remove") 
     { 
      DialogResult reply = MessageBox.Show("Are you sure you want to remove it?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
      if (reply == DialogResult.Yes) 
      { 

        //CALL REMOVE METHOD THAT SHOULD BE IN THE FORM INHERITING THIS ONE, BUT HOW? 

        removeItem(); 

       } 

       utils.hablitarBotoes(panelBotoes, "nbf"); 
       utils.alternarBotoes(panelBotoes, ""); 

       buttonNovoSalvar.Text = "New"; 
       buttonBuscarExcluir.Text = "Search"; 
       buttonAlterarSalvar.Text = "Edit"; 
      } 
     } 
+0

您應該聲明基類中的所有方法(您提到過)並覆蓋派生類中的這些方法。 –

+0

但是如果我這樣做,我不會失去在基類中實現的用於切換文本和圖標的代碼,並最終不得不在實現的表單中重新實現它們? –

回答

0

你應該在聲明基類的虛擬方法,這些方法,然後在子類覆蓋它們。

public class MyBaseClass 
{ 
    public virtual void RemoveItems() 
    { 
    } 
} 

public class MyDerivedClass : MyBaseClass 
{ 
    public override void RemoveItems() 
    { 
     //your specific implementation for this child class 
    } 
} 
+0

我想這就是工作!我現在遠離家鄉,我會盡快測試。真的非常感謝你! –