c#で独自のイベントをコントロールにディスパッチすることは可能ですか?
つまり、Javaでできるように:
MouseEvent leftClick = new MouseEvent(image, MouseEvent.MOUSE_PRESSED,
0, 0, 100, 100, 1, false, MouseEvent.BUTTON1);
image.dispatchEvent(leftClick);
c#で独自のイベントをコントロールにディスパッチすることは可能ですか?
つまり、Javaでできるように:
MouseEvent leftClick = new MouseEvent(image, MouseEvent.MOUSE_PRESSED,
0, 0, 100, 100, 1, false, MouseEvent.BUTTON1);
image.dispatchEvent(leftClick);
C#のイベントの動作は少し異なります。オブジェクトにイベントをディスパッチする代わりに、オブジェクトが使用可能なイベントをサブスクライブして、デリゲートを提供します。参考のために、イベント(C#とJava)を参照してください。ただし、イベントに添付されたコードを実行する場合は、デリゲートを直接呼び出すことができますが、ほとんどの人はこの悪い形式を検討すると思います。アクションを実行し、デリゲートとクリックイベントをシミュレートする場所の両方からアクションを呼び出すメソッドがある方がよい場合があります。
SomeControl.LeftMouseButtonDown += new LeftMouseButtonDown(SomeControl_LeftMouseButtonDown);
protected void SomeControl_LeftMouseButtonDown(object sender, EventArgs e) //Might be typed EventArgs instead of generic.
{
//Run some code or call some method.
}
できれば、LeftMouseButtonDownとLeftMouseButtonUpが連続して発生すると、Clickイベントがスローされるため、LeftMouseButtonDownの代わりにClickイベントを使用することをお勧めします。
LeftMouseButtonDownまたはClickイベントがないコントロールを使用していますか?その場合は、そのコントロールから継承する独自のコントロールを作成し、独自のイベントを作成する必要があります。
また、使用している.NETテクノロジ(WPF、WinForms、ASP.NET、Silverlightなど)の詳細を提供すると、それぞれに異なるコントロールセットがあるので役立ちます。そのテクノロジーからどのコントロールを使用しているかを知ることも役立つ場合があります。
これがお役に立てば幸いです。
NUnitFormsMouseController
用に書きました。Windows フォームで動作するように設計されており、イベントを Windows イベント キューに配置することでイベントをシミュレートします。
ソースはhttp://nunitforms.svn.sourceforge.net/viewvc/nunitforms/trunk/nunitforms/source/NUnitForms/MouseController.cs?revision=69&view=markupで表示できます