我创建了一个名为的 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
.