1

わかりましたので、wysiwyg 編集を処理するカスタム コントロールを作成しました。基本的に 1 つのコントロールに、wysiwyg エディターの複数のインスタンスがあります。たとえば、レシピを編集するためのものかもしれません。もう 1 つは、そのレシピのメモ用です。

私の wysiwyg エディターには、インターフェイスを使用して両方を保持するコントロールへのコールバックを行うボタンがあるため、ボタンがクリックされたときに親コントロールでわかります。どのコントロールがコールバックを起動したかを調べるにはどうすればよいですか?

メインフォーム

public partial class MyCustomControl: RecipeControl.ISavedButton {

    private void SaveButton_Clicked(){
        //Do Work but how do I find out which control fired this event?
        //Was it RecipeControl1 or RecipeControl2
    }

}

私の解決策

私のレシピ管理では、これを行いました。

private void RecipeSaveButton_Clicked(object sender, EventArgs e){
    if (RecipeSaveButtonListener != null) {
        RecipeSaveButtonListener.RecipeSaveButton_Clicked(this, EventArgs.Empty); //This referring to the control, not the button.
    }
}

私の主なコントロールでは、これを行いました。

private void RecipeSaveButton_Clicked(object sender, EventArgs e){
    if (sender == RecipeControl1){ 

    } else if (sender == RecipeControl2) { 

    }
}

私は両方の答えを実装しましたが、どちらも非常に優れています。申し訳ありませんが、両方を受け入れることはできません。

4

2 に答える 2

2

設計上、すべてのイベントハンドラーは次の2つのパラメーターを受け取ります。

  • オブジェクト送信者:イベントを発生させたオブジェクトを参照します
  • EventArgs e:イベントタイプに応じて、EventArgsまたはEventArgsから派生した特殊なクラス

通常、別のイベントハンドラーが単一のコントロールにアタッチされているため、送信者について心配する必要はありません。しかし、あなたの場合、すべてのコントロールに同じハンドラーを使用しているようです。この場合、送信者に応じて異なるものを作成する必要があります。

そのためには、次のように、送信者が関心のある送信者であるかどうかを確認する必要があります(ボタン名はButton1だと思います)

public ButtonClick(object sender, EventArgs e)
{
    if (sender== RecipeControl1.Button1)
    {
    }
    else if (sender == RecipeControl2.Button1)
    {
    }
}
于 2012-05-08T17:35:40.657 に答える
2

ほとんどのイベント ハンドラー (ボタン クリックなど) は、アクションを実行したユーザーを通知する標準インターフェイスを使用して構築されています。RecipeControl'sButton Click イベントの「イベント ハンドラー」の修正版を使用します。

 private void SaveButton_Clicked(object sender, EventArgs e){
        //Do Work but how do I find out which control fired this event?
        RecipeControl ctl = sender as RecipeControl;
    }

したがって、ボタンがクリックされるとRecipeControl、次のようなイベントが発生するはずです。

this.SaveButtonClick(this, EventArgs.Empty);
于 2012-05-08T17:24:34.470 に答える