C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: イベントの呼出し方法


(過去ログ 100 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■59581 / inTopicNo.1)  イベントの呼出し方法
  
□投稿者/ hs (251回)-(2011/06/01(Wed) 10:59:17)

分類:[VB.NET/VB2005 以降] 

VB2008

いつもお世話になっております。

タイトル通りなのですが、イベントの呼出し方法について質問です。

例えば、Formに配置してあるButtonのClickイベントを呼び出す時...
ButtonのClickイベントの引数を使わない処理があった場合には単純に
Call Button_Click(Nothing, Nothing)
とすれば良いですが、

DataGridView等のイベントの、ByVal e As System.EventArgs を使用している処理がある場合には
どの様に呼び出せばよいのか判りません。

Private Sub Datagridview_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) _
                                                     Handles Datagridview.CellFormatting
  Dim dgv As Datagridview = CType(sender, Datagridview)
  If dgv.Columns(e.ColumnIndex).Name = "Column" AndAlso e.RowIndex >= 0 Then
  End If
End Sub

この場合の、
Call Datagridview_CellFormatting(Datagridview, ここには何を与えればよいのでしょうか?)
senderはわかるのですが、eに与えるべきものが判りません。

よろしくお願いします。


引用返信 編集キー/
■59584 / inTopicNo.2)  Re[1]: イベントの呼出し方法
□投稿者/ shu (743回)-(2011/06/01(Wed) 11:25:01)
No59581 (hs さん) に返信

> Private Sub Datagridview_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) _
>                                                      Handles Datagridview.CellFormatting
>   Dim dgv As Datagridview = CType(sender, Datagridview)
>   If dgv.Columns(e.ColumnIndex).Name = "Column" AndAlso e.RowIndex >= 0 Then
>   End If
> End Sub
> 
> この場合の、
> Call Datagridview_CellFormatting(Datagridview, ここには何を与えればよいのでしょうか?)
> senderはわかるのですが、eに与えるべきものが判りません。

Private Sub Datagridview_CellFormatting(〜) Handles 〜
  Dim dgv As Datagridview = CType(sender, Datagridview)
  Datagridview_CellFormatting_Sub(dgv, e.ColumnIndex, e.RowIndex)
End Sub

Private Sub Datagridview_CellFormatting_Sub(dgv as 〜, Col as Integer, Row as Integer)
  If dgv.Columns(Col).Name = "Column" AndAlso Row >= 0 Then
  End If
End Sub


としてしまえば、Datagridview_CellFormatting_Subを呼ぶだけでいいです。
引数は処理ないで使っているものを渡すよう記述すればいいです。

引用返信 編集キー/
■59585 / inTopicNo.3)  Re[1]: イベントの呼出し方法
□投稿者/ 魔界の仮面弁士 (2187回)-(2011/06/01(Wed) 11:25:39)
No59581 (hs さん) に返信
> イベントの呼出し方法について質問です。
イベントを呼び出すのは、コンポーネント側の仕事です。(RaiseEvent)

コンポーネントを利用する側にとっては、イベントとは
“呼び出すもの”ではなく、“呼び出されるもの”であるべきです。

利用側から、以下のような流れで呼び出される事はありますけれどね。

・Button.PeformClick メソッドを呼ぶと、Click イベントが呼び出される。
・TextBox.Text プロパティを変更すると、TextChanged イベントが呼び出される。
・Form.Close メソッドを呼ぶと、FormClosing イベントが呼び出される。
・Invalidate メソッドを呼ぶと、Paint イベントが呼び出される。



> 例えば、Formに配置してあるButtonのClickイベントを呼び出す時...

そういう場合は、

 Sub Button1_Click(…) Handles Button1.Click
  '
  '処理内容
  '
 End Sub

 Sub 何某()
  Button1_Click(Button1, EventArgs.Empty)
 End Sub

のようにするのではなく、以下のように実装した方が良いと思いますよ。

 Sub Button1_Click(…) Handles Button1.Click
  処理メソッド()
 End Sub

 Sub 何某()
  処理メソッド()
 End Sub

 Sub 処理メソッド()
  '
  '処理内容
  '
 End Sub


> Handles Datagridview.CellFormatting

CellFormatting イベント内の処理を、外部から意図的に行いたいという質問に
みえるのですが、それは何のために必要なのでしょうか?

理由がよく分かりませんが、CellFormatting イベントを直接発行させたいのであれば、
OnCellFormatting メソッドを呼び出せば OK です。とはいっても、このメソッドを呼べるのは
継承クラスの場合だけですけれどね(イベント発行は、コンポーネント側の仕事なので)。

なお、DataGridViewCellFormattingEventArgs 引数については
下記のようにして用意できます。引数は適宜指定しましょう。

 Dim arg As New DataGridViewCellFormattingEventArgs( _
  columnIndex, 
  rowIndex, _
  value, _
  value.GetType(), _
  New DataGridViewCellStyle() _
 )

引用返信 編集キー/
■59586 / inTopicNo.4)  Re[2]: イベントの呼出し方法
□投稿者/ hs (252回)-(2011/06/01(Wed) 12:27:01)
No59584 (shu さん) に返信
No59585 (魔界の仮面弁士 さん) に返信

いつもありがとうございます。
わたしの今までの概念がおかしかった様で勉強になります。

イベント以外でPGを記述するのが面相で、
処理が同じになる場合は、なるべくイベントを呼び出すことで事を済ませるようにしておりました。

例えば登録Formなどで、初期値に戻す時はLoadイベントを呼び出すとか、
FormClosing時に値に変更があれば、登録用ButtonのCliclイベントを呼び出すとか、

根本的にソースを見直した方がよさそうですね...

また何かあった時はよろしくお願いします。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -