C#が例えば、great lengths to ensure that you cannot "fire" an eventに行ってきました。:C#:オブジェクトの外部からのイベントを発生させる目的は何ですか?
form.FormClosed(this, new FormClosedEventArgs(CloseReason.UserClosing));
button.Click(this, new EventArgs());
customer.AddressChanged(this, new EventArgs());
を使用すると、イベントをこのように発射することができないため、コンパイルされません。
これは、言語設計者の意識的な決定だったようです。彼らは意図的に "悪い行為"を防止しようとしているようです。
私はの代わりにを見つけようとしています。
実践例:
void ShowPopup(Form form)
{
ToolStripDropDown toolDrop = new ToolStripDropDown();
ToolStripControlHost toolHost = new ToolStripControlHost(form);
toolHost.Margin = new Padding(0);
toolDrop.Padding = new Padding(0);
toolDrop.Items.Add(toolHost);
toolDrop.Closed += toolDrop_Closed;
toolDrop.Show(screenLocation);
}
void toolDrop_Closed(object sender, ToolStripDropDownClosedEventArgs e)
{
//The form's FormClosed event doesn't fire when shown as a popup
//Fire the event manually
form.FormClosed(this, new FormClosedEventArgs(CloseReason.UserClosing));
}
私はいないよ場合は、オブジェクトの外部からのイベントを発射するをはず - それを置き換えるためにを意図技術は何ですか?イベントを発射するための意図代替がない場合
、私はこの状況をどのように処理するかを説明し任意の記事、書籍、またはチャンネル9のビデオはありますか?通常
public class Foo {
public event FooDelegate FooEvent;
public void RaiseFoo() {
if (FooEvent != null) FooEvent();
}
}
イベントが、このような公共の「トリガー」を行方不明であれば、それは:
これは何の関係もないと思います。 NET、それ自体。代わりにオブジェクトのメンバのアクセシビリティの関数です。 –