8

actionsパネルの場合Click、その親のイベントを発生させることはできますか?現在このコードを持っていますが、Clickイベントはメソッドではないため、このコードは無効です。
誰かが私がこれを達成する方法を知っていますか?

actions.Click += delegate(object Sender, EventArgs e)
{
    ((Panel)Sender).Parent.Click();
}
4

5 に答える 5

10

eventC#を別のC#から直接上げることはできませんclass(たとえそうであってもpublic)。eventを代行して起動するメソッド(十分なアクセス修飾子を使用)を提供し、他のメソッドでそのメソッドを呼び出すことができますclass

ちなみに、これはリフレクションで可能ですが、汚いハックだと思います。

于 2009-04-26T07:10:03.413 に答える
5

イベントを発生させる CLR のほとんどの型には、イベントの発生を処理する保護された On[EventName] メソッドがあります。リフレクションを使用して、この保護されたメソッドを「外部から」呼び出すことができます。

 Control parent = ((Control)sender).Parent;
 Type parentType = parent.GetType();
 MethodInfo onClickMethod = parentType.GetMethod("OnClick", BindingFlags.Instance | BindingFlags.NonPublic);

 onClickMethod.Invoke(parent, new object[] { e });
于 2009-04-26T07:26:27.990 に答える
2

リフレクション メソッドと拡張メソッドを使用してこれを実装したので、次のように呼び出すだけで (この場合は) LinkLabel クリック イベントを呼び出すことができます。

var link = new LinkLabel()'
link.Text = "Some link";
link.click();

click() メソッドは C# 拡張メソッドです。

    public static void click(this LinkLabel linkLabel)
{
    var e = new LinkLabelLinkClickedEventArgs((LinkLabel.Link)(linkLabel.prop("FocusLink")));
    linkLabel.invoke("OnLinkClicked", e);
}

別の拡張メソッドを使用して、次のことを行います。

  • LinkLabel からプライベート プロパティを取得します (LinkLabelLinkClickedEventArgs オブジェクトの作成に必要)
  • OnLinkClicked メソッドを呼び出します (イベントを発生させます)
于 2010-02-07T23:58:37.000 に答える
1

Clickイベントを発生させたい理由として私が考えることができる唯一の理由は、ユーザー入力をシミュレートしている場合です。自動テストドライバーなどに取り組んでいますか?もしそうなら、テストのみの補助メソッドでコードを汚すよりも良い解決策があるかもしれません。 これはグーグルで最初に出てきます、それが何か良いかどうかはわかりません。

アプリケーション自体で一種のフロー制御としてこれを実行しようとしている場合は、これが正しいことであるかどうかを確認するために一歩後退します。これは一種の「悪臭」です。

于 2009-04-26T20:20:05.713 に答える
1

使用しているフレームワークによっては、親、WPFASP.NETでクリックイベントを手動で呼び出す必要はありません。たとえば、要素ツリーの上のバブルイベントなどです。

それが選択肢ではない場合は、Mehrdadが提案するように行うことができます。

于 2009-04-26T07:19:09.897 に答える