C# WinForms でユーザー コントロールを作成しました。この例では、その中にボタンを作成し、クリックするとイベントがトリガーされるとします。
このカスタム ユーザー コントロールを現在のフォームにリアルタイムで追加します。問題。ボタン (ユーザー コントロール内) をクリックすると、現在のフォームでイベントを更新する方法がわかりません。それを達成する方法を知っている人はいますか?
C# WinForms でユーザー コントロールを作成しました。この例では、その中にボタンを作成し、クリックするとイベントがトリガーされるとします。
このカスタム ユーザー コントロールを現在のフォームにリアルタイムで追加します。問題。ボタン (ユーザー コントロール内) をクリックすると、現在のフォームでイベントを更新する方法がわかりません。それを達成する方法を知っている人はいますか?
このカスタム ユーザー コントロールをリアルタイムで追加するということは、設計時ではなく実行時に追加したことを意味し、イベントを更新する方法がわからないということは、このイベントをサブスクライブする方法を意味します。
Event
ユーザー コントロールに新しいパブリックを作成し(例: YourEvent
)、ボタン クリックを処理して を上げYourEvent
ます。
+=
内のそのイベントをサブスクライブするために使用しますForm
。
yourControl.YourEvent += YourEventHandler;
Visual Studio を使用していると思いますので、入力yourControl.YourEvent +=
して 2 回押すだけTABで、Visual Studio が適切なイベント ハンドラー メソッドを作成します。
ユーザーコントロールに ButtonClicked という名前のカスタムイベントを追加し、ボタンがクリックされたときに発生させ、フォームにイベントハンドラーを追加して、ユーザーコントロールの ButtonClicked イベントを処理します。
基本的に、ユーザーコントロールの観点からイベントを外の世界に公開しています。
イベントを発生させる必要はありません (少なくとも提供された質問によると)。必要なのは、イベント発生時に実行されるすべてのコードを 1 つのpublic
関数に入れ、「外部」からその関数を呼び出すだけです。
回答を提供するのはこれが初めてなので、正しくやっているといいのですが。他のすべての回答は役に立ちましたが、あいまいだったと思います(おそらくあいまいな質問に対して)。解決策をできるだけ明確に提供しようとしました。何か問題がある場合は遠慮なく改善してください。「承認済み」とマークする必要があるかどうか教えてください。皆さんのサポートに感謝します!
まず、UserControl でボタンを作成し、Button1Click を委任します。
this.button1.Location = new System.Drawing.Point(25, 17);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(95, 23);
this.button1.TabIndex = 0;
this.button1.Text = "Click";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.Button1Click);
UserControl のソースの後半:
void Button1Click(object sender, EventArgs e)
{
}
次に、MainForm デザイナで、TextBox (結果をテストするため) とカスタム UserControl を追加します。最後の行では、UserControl からのイベントを監視し、トリガーされると MainForm 内から Button1Click を呼び出します。
this.textBox1.Location = new System.Drawing.Point(12, 151);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(202, 20);
this.textBox1.TabIndex = 1;
this.uControl1.Location = new System.Drawing.Point(12, 12);
this.uControl1.Name = "uControl1";
this.uControl1.Size = new System.Drawing.Size(304, 95);
this.uControl1.TabIndex = 0;
this.uControl1.button1.Click += new System.EventHandler(this.Button1Click);
したがって、Text プロパティが変更されます。
void Button1Click(object sender, EventArgs e)
{
this.textBox1.Text = "Hurrah!";
}