2014-06-04 50 views
0

我創建了一個用戶控件稱爲Toggle一個形式,這是我的代碼,它Click事件不觸發自定義用戶控件

[DefaultEvent("Click")] 
public partial class Toggle : UserControl { 

    public bool ToggleStatus { get { return toggleStatus; } } 
    private bool toggleStatus { get; set; } 

    public Toggle() { 
     InitializeComponent(); 
     toggleStatus = true; 
    } 

    private void toggleClick(object sender, EventArgs e) { 
     if (toggleStatus) { // currently set as "true" or "on" 
      this.lblSwitch.Dock = DockStyle.Right;     
      this.pnlBackground.BackColor = System.Drawing.Color.Red; 
      toggleStatus = false; 
     } else { // currently set as "false" or "off" 
      this.lblSwitch.Dock = DockStyle.Left;     
      this.pnlBackground.BackColor = System.Drawing.Color.Green; 
      toggleStatus = true; 
     } 
    } 
} 

toggleClick方法是聯繫在一起的控制UserControl內的點擊事件;這發生得很好。

但是,當我將Toggle控件放在窗體上並嘗試將事件綁定到窗體上時,它不會觸發。

private void toggleSoundClick(object sender, EventArgs e) { 
     soundToggle = !soundToggle; 
    } 

我確信,正確的方法是聯繫在一起的單擊事件在兩個我的用戶我的Designer.cs文件和我的形式

用戶控件:

this.lblSwitch.Click += new System.EventHandler(this.toggleClick); 
this.pnlBackground.Click += new System.EventHandler(this.toggleClick); 

(我已經把它系在兩個控件我Toggle,因爲我希望它火無論你在哪裏點擊控制)

形式:

this.tglSound.Click += new System.EventHandler(this.toggleSoundClick); 

用戶控件的預期行爲是關閉toggleClick(它確實),然後表單應該觸發toggleSoundClick(它沒有)。我已經看到這種行爲對於我在同一個項目中設計和使用的其他用戶控件而言工作正常。

澄清:

我有一個用戶控件稱爲ServerDisplay。我有綁的ServerDisplay背景面板(在ServerDisplay的代碼)的單擊事件的方法,其示出了隨機的MessageBox:

private void ServerDisplay_Click(object sender, EventArgs e) { 
     MessageBox.Show("test"); 
    } 

然後,我有包含我的形式內的ServerDisplay控制。我(對我的形式在代碼中)依賴於它,以及click事件的方法

private void serverDisplayClick(object sender, EventArgs e) { 
     if (loaded) { 
      ServerDisplay display = (ServerDisplay)sender; 
      this.lblLastServer.Text = "Last server joined was " + display.Server.Name + " at " + DateTime.Now.ToString("h:mm tt"); 
      centerControl(this.lblLastServer); 
     } 
    } 

當我點擊我的形式ServerDisplay控制,它顯示在MessageBox(代碼ServerDisplay內),然後更新我在代碼中指定的標籤(來自表單的代碼)。這是預期的行爲,但它不適用於我的其他UserControl

+0

你是如何連接事件?在代碼中還是在設計器中? – phoog

+0

在設計器中(在事件設置[屬性窗格中的閃電圖標]中,並通過仔細檢查Designer.cs –

+0

請在設計器中將實際訂閱您的事件的行發佈到toggleSoundClick。意外地訂閱錯誤的控件甚至是從設計者那裏做出來的形式並不罕見。 – TyCobb

回答

0

我終於明白了!我設置了控制的方式,我有控制器本身,一個面板填滿整個背景(我用這個顏色),然後第一個面板內的另一個面板作爲「開關」。

當我擺脫了第一個面板,只使用控件的背景顏色和開關的小面板時,它可以在單擊背景時起作用,但當單擊「開關」面板時不起作用。我想這會帶來更多的問題,我不得不單獨詢問這個問題,但至少我得到了答案。