DOBON.NET DOBON.NETプログラミング掲示板過去ログ

自動処理コマンド

  • 題名: 自動処理コマンド
  • 著者: 神楽
  • 日時: 2004/08/26 14:11:19
  • ID: 5823
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[WinXP .Net2003]
分類:[.NET]

フォーム上にボタン1を配置します。
このフォーム画面が開いたらボタン1のクリックイベントが起動するにはどうすればよろしいのでしょうか?
call Button2_Click()でVB6は出来たネット上には書いてありますが、.Netだと引数がいりますよね?
Button2_Click(引数)の引数は何を入れたらよいのですか?
VB初心者の私に教えてください
2004/08/26(Thu) 14:25:40 編集(投稿者)

■No5823に返信(神楽さんの記事)
> フォーム上にボタン1を配置します。
> このフォーム画面が開いたらボタン1のクリックイベントが起動するにはどうすればよろしいのでしょうか?
> call Button2_Click()でVB6は出来たネット上には書いてありますが、.Netだと引数がいりますよね?
> Button2_Click(引数)の引数は何を入れたらよいのですか?
> VB初心者の私に教えてください

Button2.PerformClick()メソッドを使ってください。
# ただし、PerformClick()はたまに利かない時がある(バグ?)
# まあ、普通に使ってる分には大丈夫なのですが。

本当は、OnClick()メソッドでやった方が良いが、
OnClick()メソッドは、Protectedなので普通には使えない。



ちなみに、

> call Button2_Click()でVB6は出来たネット上には書いてありますが

「イベントの概念」から考えると、個人的には、これは良い組み方でないと思う。
複数箇所から呼び出すのなら、イベントではなく関数(メソッド)で実装すべき。
その方が、第三者から見てもわかりやすい。(複数から呼ばれてる可能性があると理解できる)

# 実際、イベントを直接Callするようにやってるサイトは少ないと思われます。

私は、下記のやり方をお勧めします。

Private Sub Form1_Load(略
  Call MyClass.HogeHoge()
End Sub

Private Sub Button2_Click(略
  Call MyClass.HogeHoge()
End Sub

Private Sub HogeHoge()
  ' 〜 やりたい処理 〜
End Sub

# まあ、人それぞれかもしれませんから、コーディング規約のような強制はしません。

>>Button2_Click(引数)の引数は何を入れたらよいのですか?
>>VB初心者の私に教えてください

Call Button2_Click(Button2, New System.EventArgs)

で動きます。

> Button1.PerformClick()使ってください。
> ただし、PerformClick()はたまに利かない時がある(バグ?)

ちょっと正確な記憶ではないのですが、FormのEnabledをFalse
にしているとPerformClick()が効かなかったと思います。
処理によっては、そのようなコーディングをする可能性もある
と思うので・・・。
2004/08/26(Thu) 15:12:45 編集(投稿者)

■No5825に返信(ihcioyさんの記事)
>>Button1.PerformClick()使ってください。
>>ただし、PerformClick()はたまに利かない時がある(バグ?)
>
> ちょっと正確な記憶ではないのですが、FormのEnabledをFalse
> にしているとPerformClick()が効かなかったと思います。
> 処理によっては、そのようなコーディングをする可能性もある
> と思うので・・・。

いや、Enabled = True でも起きていました。
実際、デバッガで見てもメッセージキューにすら入ってこなかったです。
ライブラリ内だったので、複雑すぎるとできなくないのかと勝手に自己完結して、OnClick()メソッドに変えましたが...。

さて、実装内容にもよるのですが、関数化できるなら関数化した方が、
わかりやすい & 見た目もよい と思います。(イベントの概念を考えると)

関数化したくないなら、OnClick()なり、直接Callなり、PerformClick()なり...
たくさん方法はありますから、先にも言ったように、「人それぞれ」なので強制はしません。

■追記

 私はVB.NET以前より、イベントプロシージャというのは、
 定義された場所以外(RaiseEventの場所以外)で呼び出すのは邪道と考えています。
 Call で呼んでしまうとイベント以外で実行されることになりますから、
 「イベントの概念」としての「独立性」が損なわれるからです。
 「独立性」ってプログラミングの基本のように思えます。

 ただ、例外的にどうしてもClick()イベントなどを起こさせたい時に、
 Callさせたくないがために、OnClick()があると考えています。
 実際、私はカスタムコントロールを作成する時は、On〜を用意します。

 他の方の意見が聞きたいです。
 実際、みんなどうしているのかすごく気になってきた...

 # くどいようですが、この意見を「提供」したことはあっても「強制」したことはありません。
  • 題名: Re[4]: 自動処理コマンド
  • 著者: はる
  • 日時: 2004/08/27 10:28:01
  • ID: 5846
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
どうもありがとうございました

いろいろな手があるみたいですね
私なりにもう少し調べてみます。

DOBON.NET | プログラミング道 | プログラミング掲示板