という 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
(コントロールのどこをクリックしても発火させたいので、2つのコントロールに関連付けています)
形:
this.tglSound.Click += new System.EventHandler(this.toggleSoundClick);
UserControl の予想される動作は、起動することですtoggleClick
(発生します)。その後、フォームが起動しますtoggleSoundClick
(発生しません)。この同じプロジェクトで設計および使用した他の UserControls で、この動作が正常に機能することを確認しました。
明確にするために:
という UserControl がありServerDisplay
ます。ServerDisplay
ランダムな MessageBox を表示する (ServerDisplay のコード内の)バックグラウンド パネルのクリック イベントに関連付けられたメソッドがあります。
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
。