2017-04-20 83 views
-1

我正在尋找簡化以下操作:單擊一個面板,面板將其顏色更改爲綠色,如果它是綠色,則將其更改爲灰色。我想知道如何將控件作爲參數寫入方法,以便它可以用於任何控件而不必複製事件方法。C#簡化點擊事件方法以包含其他控件

通常情況下:面板中點擊事件

panel_Click() 
    //some if statement 
    panel1.BackColor = green 
    panel1.BackColor = gray 

那麼每個控制重複。取而代之的是,我想創建所有的控件都訂閱到中央方法,即閱讀面板類似的名稱:

genericpanel_Click(){ 
    ChangeColor(thisPanelname); 
} 

,然後會利用參數/參數:

public void ChangeColor(panel? Mypanel) { 
    //some if... 
    Mypanel.BackColor = Green 
    Mypanel.BackColor = Gray 
} 

什麼是這個僞代碼到工作的準確等值?

編輯:好的,是的,我現在可以看到它是重複的,不需要進一步下調。我只是不知道要具體搜索什麼。無論如何,我現在已經找到了答案。

+1

在事件方法中包含'object sender'參數,將其轉換爲面板並更改其顏色? – schroedingersKat

回答

1

控件的所有事件都將其源作爲第一個參數。你只需將它轉換爲正確的類型:

void panel_Click(object sender, EventArgs e) { 
    Panel myPanel = (Panel)sender; 
    ChangeColor(myPanel); 
} 

的事件處理程序委託的所有定義爲發送,例如:

public delegate void EventHandler(object sender, EventArgs e); 
public delegate void EventHandler<T>(object sender, T e); 

如果你定義自己的事件,只是使用這些代表作爲第一個參數輸入並傳遞事件的來源。

1

您可以訂閱的所有面板以這種方法:

private void panel_Click(object sender, EventArgs e) 
{ 
    Panel clickedPanel = sender as Panel; 
    if (clickedPanel != null) 
    { 
     if (clickedPanel.BackColor == Color.Blue) 
     { 
      clickedPanel.BackColor = Color.Red; 
     } 
     else 
     { 
      clickedPanel.BackColor = Color.Blue; 
     } 
    } 
} 

如果你只訂閱面板這甚至第一次檢查就沒有必要,但爲了安全起見它的存在。

該方法將發件人(激活事件的面板)並檢查其背景顏色。如果顏色A設置爲顏色B - >其他顏色A