1

C# WinForms でユーザー コントロールを作成しました。この例では、その中にボタンを作成し、クリックするとイベントがトリガーされるとします。

このカスタム ユーザー コントロールを現在のフォームにリアルタイムで追加します。問題。ボタン (ユーザー コントロール内) をクリックすると、現在のフォームでイベントを更新する方法がわかりません。それを達成する方法を知っている人はいますか?

4

4 に答える 4

2

このカスタム ユーザー コントロールをリアルタイムで追加するということは、設計時ではなく実行時に追加したことを意味し、イベントを更新する方法がわからないということは、このイベントをサブスクライブする方法を意味します。

Eventユーザー コントロールに新しいパブリックを作成し(例: YourEvent)、ボタン クリックを処理して を上げYourEventます。

+=内のそのイベントをサブスクライブするために使用しますForm

yourControl.YourEvent += YourEventHandler;

Visual Studio を使用していると思いますので、入力yourControl.YourEvent +=して 2 回押すだけTABで、Visual Studio が適切なイベント ハンドラー メソッドを作成します。

于 2012-12-12T07:55:36.403 に答える
1

ユーザーコントロールに ButtonClicked という名前のカスタムイベントを追加し、ボタンがクリックされたときに発生させ、フォームにイベントハンドラーを追加して、ユーザーコントロールの ButtonClicked イベントを処理します。

基本的に、ユーザーコントロールの観点からイベントを外の世界に公開しています。

于 2012-12-12T07:55:25.743 に答える
1

イベントを発生させる必要はありません (少なくとも提供された質問によると)。必要なのは、イベント発生時に実行されるすべてのコードを 1 つのpublic関数に入れ、「外部」からその関数を呼び出すだけです。

于 2012-12-12T07:50:56.227 に答える
0

回答を提供するのはこれが初めてなので、正しくやっているといいのですが。他のすべての回答は役に立ちましたが、あいまいだったと思います(おそらくあいまいな質問に対して)。解決策をできるだけ明確に提供しようとしました。何か問題がある場合は遠慮なく改善してください。「承認済み」とマークする必要があるかどうか教えてください。皆さんのサポートに感謝します!

まず、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!";
}
于 2012-12-12T18:29:48.690 に答える