0

我创建了一个名为的 UserControl Toggle,这是我的代码

[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;
    }

我已确保正确的方法与我的 UserControl 和表单的 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);

UserControl 的预期行为是触发toggleClick(它会触发)然后表单应该触发toggleSoundClick(它不会触发)。我已经看到这种行为适用于我在同一个项目中设计和使用的其他用户控件。

澄清:

我有一个名为ServerDisplay. 我有一个与ServerDisplay(在ServerDisplay的代码中)的背景面板的点击事件相关的方法,它显示了一个随机的MessageBox:

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

然后,我的ServerDisplay表单中包含一个控件。我也有一个与它的点击事件相关的方法(在我的表单的代码中)

    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.

4

1 回答 1

0

我终于想通了!我设置控件的方式是控件本身,一个面板填充整个背景(我使用它作为颜色),然后第一个面板内的另一个面板充当“开关”。

当我摆脱第一个面板并只使用控件的背景颜色和一个小面板作为开关时,它在我单击背景时起作用,但在我单击“开关”面板时不起作用。我想这会引发更多问题,我必须与这个问题分开提出,但至少我得到了答案。

于 2014-06-05T13:53:10.520 回答