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

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

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

Re[3]: データグリッドビューRowHeaderMouseClick


(過去ログ 93 を表示中)

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

■55820 / inTopicNo.1)  データグリッドビューRowHeaderMouseClick
  
□投稿者/ jun (11回)-(2010/12/15(Wed) 11:22:44)

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

VB2010EE

お世話になります。

DataGridViewのRowHeaderMouseClickイベントについて、知恵をお貸し下さい。
事象は、セルが編集中状態の時、行ヘッダをクリックしてもイベントが発生しません。 ←(1)
ところが、再度、行ヘッダをクリックするとイベントが発生します。         ←(2)
(フォーカスを持った状態でないと発生しないイベント?)
(1)の時にイベントを発生させるにはどうしたらよろしいでしょうか。

よろしくお願いします。

引用返信 編集キー/
■55821 / inTopicNo.2)  Re[1]: データグリッドビューRowHeaderMouseClick
□投稿者/ jun (12回)-(2010/12/15(Wed) 11:27:39)
追記

EditModeプロパティを「EditOnEnter」としています
引用返信 編集キー/
■55822 / inTopicNo.3)  Re[1]: データグリッドビューRowHeaderMouseClick
□投稿者/ 魔界の仮面弁士 (1986回)-(2010/12/15(Wed) 11:39:11)
No55820 (jun さん) に返信
> DataGridViewのRowHeaderMouseClickイベントについて、知恵をお貸し下さい。
> 事象は、セルが編集中状態の時、行ヘッダをクリックしてもイベントが発生しません。 ←(1)
> ところが、再度、行ヘッダをクリックするとイベントが発生します。         ←(2)
> (フォーカスを持った状態でないと発生しないイベント?)
> (1)の時にイベントを発生させるにはどうしたらよろしいでしょうか。

編集中の鉛筆アイコンが表示されている状態で、任意レコードの行ヘッダをクリックしてみましたが、
当方の VB2008 環境では問題無くイベントが発生します。
2010 だけの現象なのでしょうか…。
それとも、何か追加のコードや設定があるのでしょうか?

Public Class Form1
    Private WithEvents DataGridView1 As New DataGridView() With {.Dock = DockStyle.Fill}
    Private Sub Form1_Load(ByVal sender As Object, _
                           ByVal e As EventArgs) Handles Me.Load
        DataGridView1.RowCount = 30
        DataGridView1.ColumnCount = 5
        DataGridView1.AllowUserToAddRows = False
        DataGridView1.EditMode = DataGridViewEditMode.EditOnEnter
        DataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect
        DataGridView1.MultiSelect = True
        Controls.Add(DataGridView1)
    End Sub

    Private Sub DataGridView1_RowHeaderMouseClick( _
            ByVal sender As Object, _
            ByVal e As DataGridViewCellMouseEventArgs _
            ) Handles DataGridView1.RowHeaderMouseClick
        MsgBox(e.RowIndex)
    End Sub
End Class

引用返信 編集キー/
■55830 / inTopicNo.4)  Re[2]: データグリッドビューRowHeaderMouseClick
□投稿者/ jun (13回)-(2010/12/15(Wed) 13:07:40)
魔界の仮面弁士 さん

早急な返信ありがとうございます。

当方、イベントの発生タイミングを以下のようにMSGBOXで確認していました。
こうすると初回のRowHeaderMouseClickイベントが発生しません。
そこで、MsgBoxをやめて、ListBoxに内容を出力したところ期待する結果が得られました。
MsgBox関数を使用することでイベントがキャンセル?されるようなことがあるのでしょうか?

#本題ではありませんが
行ヘッダをクリックしDeleteキーを押しても行は削除されず、その行の編集セルの内容が
クリアされるのですね。
これを、行ごと削除する方法はありますか。


Private Sub DataGridView1_CellEnter( _
                ByVal sender As System.Object, _
                ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
                Handles DataGridView1.CellEnter
    MsgBox("CellEnter")
End Sub

Private Sub DataGridView1_EditingControlShowing( _
                ByVal sender As System.Object, _
                ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) _
                Handles DataGridView1.EditingControlShowing
    MsgBox("EditingControlShowing")
End Sub

Private Sub DataGridView1_CellValidating( _
                ByVal sender As System.Object, _
                ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) _
                Handles DataGridView1.CellValidating
    MsgBox("CellValidating")
End Sub

Private Sub DataGridView1_CellValidated( _
                ByVal sender As System.Object, _
                ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
                Handles DataGridView1.CellValidated
    MsgBox("CellValidated")
End Sub

Private Sub DataGridView1_RowHeaderMouseClick( _
                ByVal sender As System.Object, _
                ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) _
                Handles DataGridView1.RowHeaderMouseClick
    MsgBox("RowHeaderMouseClick row=" & e.RowIndex)
End Sub

引用返信 編集キー/
■55837 / inTopicNo.5)  Re[3]: データグリッドビューRowHeaderMouseClick
□投稿者/ 魔界の仮面弁士 (1988回)-(2010/12/15(Wed) 14:23:56)
No55830 (jun さん) に返信
> 当方、イベントの発生タイミングを以下のようにMSGBOXで確認していました。
「マウス操作」、「キーボード操作」、「フォーカス遷移」、「選択操作」などに
関連するイベントは、それぞれが連続して起こりえますので、MsgBox 等で阻害するのは不味いです。

単一のイベントの発生を確認する程度ならば良いですが、連続した動作のトレースなら、
今回のように ListBox を使うとか、Trace.WriteLine を使った方が望ましいでしょう。


> MsgBox関数を使用することでイベントがキャンセル?されるようなことがあるのでしょうか?
沢山ありますよ。DataGridView だけの話ではありませんが、単純な所では、
 AddHandler PictureBox1.DoubleClick, Function() ListBox1.Items.Add("DblClick")
 AddHandler PictureBox1.Click, Function() ListBox1.Items.Add("Click")

 AddHandler PictureBox2.DoubleClick, Function() MsgBox("DblClick")
 AddHandler PictureBox2.Click, Function() MsgBox("Click")
とか。PictureBox1 の方はクリックもダブルクリックも通知されますが、
PictureBox2 の方は、ダブルクリックイベントが阻害されてしまいますね。


> 行ヘッダをクリックしDeleteキーを押しても行は削除されず、その行の編集セルの内容が
> クリアされるのですね。
セル単位で選択している最中には行は削除されません。
行を Delete で削除されるのはは、行全体を選択している最中で、かつ、
AllowUserToDeleteRows = True の状態に限ります。
ただし行選択されていても、セルの内容を編集している最中にはそのセルの中身が削除されます。

> これを、行ごと削除する方法はありますか。
セルの編集モードを解除した状態で Delete してもらえば削除されます。
あるいは、プログラムから .Rows.RemoveAt か .Rows.Remove で削除する事もできます。
データバインドしている場合には、データソース側に対して削除操作を行うのも手です。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -