• ベストアンサー

C#でイベントハンドラを呼び出す方法

すいませんが調べてもわからなかったのでお伺いします。 C#でイベントハンドラを呼び出す方法なのですが たとえばクリックの中のプログラムを別の所から呼び出すと言うことができるのでしょうか? 中身の一部ではなく全体です。 VBだとsubの名前を書いておけばよかったんですが..... 最近始めたばかりでよくわかりませんよろしくお願いいたします。

  • gotyan
  • お礼率91% (172/188)

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

C# だと、例えば、ボタンのクリックのハンドラは以下のようになります。 private void button1_Click(object sender, System.EventArgs e) {   ... } 普通のメソッドですから、スコープがあっていて、適切に sender と イベント引数を 設定できれば、呼び出すことは可能です。 きちんと動くかどうかは、イベントハンドラの処理内容と、それに応じて呼び出す前に 適切な処理をしているかどうかに関わってきますが、これは VB でも同じことですよね。 # 基本的に、C# は、記述の仕方が違うだけで VB の延長だと思って良いですよ

gotyan
質問者

お礼

C系は型がしっかりしていて難しいですね (それが利点なんでしょうが) ありがとうございます もう少しがんばってみます。

関連するQ&A

  • C# イベントハンドラについて

    http://bbs.wankuma.com/index.cgi?mode=al2&namber=70546 ここで紹介されているソースをさんこうにしていたのですが、 public event EventHandler TextBox1Changed; が果たしている役割がよくわかりません。 これは何のためにあるのでしょうか? たとえば、 http://dobon.net/vb/dotnet/vb2cs/event.html コチラのサイトでは、 public event EventHandler Time; と System.Threading.Thread.Sleep(5000); if (Time != null) { Time(this, EventArgs.Empty); } のように書かれていますが、いきなりif (Time != null)を記述してエラーがでないということは、Cのプロトタイプ宣言のような機能を有しているのでしょうか? また、この例ではなにもしないので具体的な使い方もみえてこず、この次の例はすでに理解を超えていてさっぱりわかりません。 イベントハンドラはいったいどのような役割を担っているのでしょうか?

  • イベントハンドラ処理が終了しているかどうかを確認するには?

    イベントハンドラ処理が終了しているかどうかを確認するには? 前回以下のページにて「c#でボタンのアクションが終わった後に再度同じ動作をさせるには?」 という質問をしました所、イベントハンドラ処理が終了していないのでは?という回答を頂きました。 http://okwave.jp/qa/q5833308.html しかし、残念ながら当方初心者の為、 デバッガを利用して 「LoadData()処理」や「ボタンのClickイベントに対応付けしたイベントハンドラ処理」が  ・ちゃんと最後まで終了しているか  ・無限ループに陥っていないか  ・IO入力待ちで止まっていないか というのをどのように確認してよいかすらわかりません。 どうすれば確認できるのでしょうか? 何か参考になるページなどでも結構ですので教えてください。 よろしくお願いします。

  • VB.NET イベントハンドラの意識的な呼び出し

    いつもお世話になっております。 イベントが発生したときに呼び出される関数ですが、 Private Sub btn閉じる_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn閉じる.Click こういうプロトタイプが一般的と思います。 VB6のときは引数がなかったので別の関数内から上記のハンドラを呼び出すことは 簡単だったのですが、VB.NETになったら2つの引数があるので簡単ではないようです。 btn閉じる_Click( Me.btn閉じる, New System.EventArgs ) とでもすれば呼び出せるとは思うのですが、あまりスマートとも思えず、 何かWindows側から呼び出しをさせる方法があればそちらの方法を検討したいと 思いますが、こういう場合、一般的にはどのようにされているのでしょうか? なお、上記関数内で実際にはこの2つの引数は使っていない場合を想定しています。

  • イベントハンドラが取得できない VC++ MFC

    おはようございます(><) VC++.NETで開発を行っています。 MFCを使って開発をしています。 CDialogを継承したCmyDialogでOnLButtonDownのイベントがとれません。 OnLButtonDownのイベントを使いたかったのですが 自動でイベントを設定するプロパティのメニュー(雷のマークみたいなもの)にイベントがなかったので 自分でCmyDialog::と書いたらリストの中に OnLButtonDown( UINT nFlags,CPoint point)がでたので 定義に追加、イベントの記述を追加しました。 雷マークで作ったイベントのコードには // TODO : ここにコントロール通知ハンドラ コードを追加します。 と自動で記述され、ブレイクポイントを設定するとそこで止まるのですが 私が記述したLButtonDownのイベントでは実行してもブレイクポイントで止まりません。 他のイベントと比べて違うのは BEGIN_MESSAGE_MAP(CmyDialog, CDialog)の中に ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, OnLvnColumnclickList1) のように イベントハンドラ名、リソース名?、イベント名 と自動で記述があります。 ここを追加すればいいのかなと思いましたが 左クリックに対応するイベントハンドラ名が分かりません。 問題解決に有効な情報をお持ちの方 お力をお貸しください。 よろしくお願いします(><)

  • C#プログラムで、ボタンをショートカットキー付きで作りたいのですが、方

    C#プログラムで、ボタンをショートカットキー付きで作りたいのですが、方法が分からず困っています。 方法が分からない点は、クリックイベントとKeyDownイベントに対して同一のイベントハンドラーにする方法です。サンプルがあったらご提示頂けないでしょうか?

  • イベントの発生から対応する処理実行までの作り方

    以前に、ボタンクリックなどのイベントが起きたら すぐにそのボタンクリックに対応した処理をその場(イベント ハンドラ)で実行するのではなく、 "イベントが発生しました関数"のようなものに最初に イベント情報を渡してしまい、あとはその関数からイベントが 振り分けられていき、最終的にそのイベントに対応した処理が 実行される。といったプログラムを見たことがあるのですが、 このような技法は一般的に行われるものなのでしょうか? 巨大なプログラムになるとこのような技法が使われる気が しますが・・・ また、この技法には何か名前がついているのでしょうか? また、これに関して記載しているサイト・書籍などありましたら 教えてください。

  • c# イベントの命名

     こんにちは。c#初心者兼、java始めました、です。  c#のイベントの命名(規約?)について皆さんにお尋ねしたいことがあります。  最近はjavaをやっていのですが、ふとc#をやってみたくなり、コードをボーっと眺めていると、c#のイベントが目に入りました。javaと比べて便利だったなーくらいの気持ちで流し読みしていたのですが、Clickイベントの所で手が止まりました。  以前はそんなに気にせず使っていたのですが、よく考えてみれば、ほとんどのプロパティ変更系のイベントは~Changed と過去形を使っているのですが、入力系統などはKeyDown, KeyPress, Click, MouseEnter, Resizeのように過去形ではありません(原型? そもそも動詞ではなく、名詞・副詞として使っている?)。Paint, Layoutイベントなどもそうですよね。  これらの命名が違う理由が知りたいのですが、どなたかご存じの方はいらっしゃらないでしょうか?

  • 不要なイベントを削除したい

    フォームにコマンドボタン(名前:コマンド0)を置いて、 [イベント プロシージャ]にしてクリックするとVBE画面にプロシージャーが作成されますよね。 しかしそのコマンドボタンの名前を変更して(新しい名前:新コマンド0)、さっきと同じように [イベント プロシージャ]にしてクリックすると新たなプロシージャの型が作成されますよね。 Private Sub コマンド0_Click() End Sub Private Sub 新コマンド0_Click() End Sub こんなかんじで。 そんな事を一杯やり過ぎて、 Private Sub コマンド0_Click() End Sub の方がいっぱい余ってる?浮いてる?イベントに紐づいてない状態なのですが、 量が多すぎてどれが不要なプロシージャーなのかわからないのですが、 一気に削除する方法はありますか? 別にほっといても問題ないとは思うのですが、不要なものは削除したいです。

  • C#での書き方

    vb.netでは別のイベントを呼び出すとき下記のような書き方ができたのですが、C#ではどう書くんでしょうか? (ボタン2を押したらボタン1の処理が走る) Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click MessageBox.Show("AAA") End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Button1_Click(sender, e) End Sub

  • Visual-C#の event キーワードの「意義」が分かりません

    Visual-C#というものを初めて触っている者です。 フォーム上にボタン等のコントロールを配置して、ボタンをダブルクリックすると、イベントハンドラをユーザが記述するコード部分(partial class)が表示されてくるのですが(Form1.cs)、このpartial classの残りの、ユーザが編集する必要のないコードはForm1.Designer.cs内に自動生成されます。 このForm1.Designer.cs内に、たとえば this.Button1.Click += new System.EventHandler( this.Button1_Click );  ←(1) のようなコードが自動生成されているわけです。 ここで、Button1とはButtonクラスのオブジェクトであり、ClickとはButtonクラスの(Controlクラスから継承した)Clickイベントだということです。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.click(VS.85).aspx public event EventHandler Click  ←(2) ここで使用されているEventHandlerとは何かというと、delegateです。 http://msdn.microsoft.com/ja-jp/library/system.eventhandler.aspx public delegate void EventHandler(Object sender, EventArgs e)  ←(3) 「イベントとは、コンピュータ・プログラムの実行に際し、何らかのアクションが発生した際にプログラムに発信される信号(これをメッセージと呼んだりする)をいう。」(『ウィキペディア(Wikipedia)』) この「イベント」を、.NetFrameworkのクラスライブラリでは、(2)のように「EventHandler」という名前のデリゲートクラス型の変数として定義しているわけですが、(2)の中の「event」というキーワードの「意義」が分かりません。 Controlクラス定義内で(2)式のように、コントロールの「クリック」イベントを、「EventHandler」という名前のデリゲートクラス型の変数と定義するというのなら、それはそれで分かるのですが、なぜ更に「event」というキーワードを付ける必要があるのかが、よく分からないのです。

専門家に質問してみよう