我创建了一个名为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
中控件的点击事件相关联;这火爆就好了。
但是,当我将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
控件。我有一个方法与它的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 :(得分:0)
我终于明白了!我控制设置的方式,我有控件本身,一个面板填满整个背景(我用这个颜色),然后在第一个面板内的另一个面板充当“开关”。
当我摆脱第一个面板并且仅使用控件的背景颜色和开关的小面板时,它在我单击背景时起作用,但是当我单击“开关”面板时它不起作用。我想这会打开更多问题,我将不得不单独提出这个问题,但至少我得到了答案。