簡體   English   中英

單擊事件未觸發窗體上的自定義UserControl

[英]Click event not firing for custom UserControl on a form

我創建了一個名為Toggle的UserControl,這是我的代碼

[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中控件的click事件相關; 這很好。

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

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

我已經確保正確的方法與UserControl和表單的Designer.cs文件中的click事件相關聯

用戶控件:

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);

UserControl的預期行為是觸發toggleClick (確實如此),然后窗體應觸發toggleSoundClick (事實並非如此)。 我已經看到此行為對於我在同一項目中設計和使用的其他UserControl效果很好。

澄清:

我有一個稱為ServerDisplay的UserControl。 我有一個方法綁定到ServerDisplay的背景面板的click事件(在ServerDisplay的代碼中),該事件顯示一個隨機的MessageBox:

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

然后,我的ServerDisplay包含一個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內的ServerDisplay ),然后更新我在代碼中指定的標簽(表單中的代碼)。 這是預期的行為,但不適用於其他UserControl

我終於想通了! 我設置控件的方式,控件本身,一個填充整個背景的面板(我將其用作顏色),然后在第一個面板中使用另一個面板作為“開關”。

當我擺脫了第一個面板,僅將控件的背景用作顏色,將一個小的面板用作開關時,單擊背景可正常使用,但單擊“開關”面板則無法使用。 我想這會帶來更多的問題,我將不得不單獨回答這個問題,但至少我得到了答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM