- PR -

DataGridView内のカレントセルの表示位置が知りたい

1
投稿者投稿内容
未記入
常連さん
会議室デビュー日: 2007/04/09
投稿数: 21
投稿日時: 2007-12-17 19:15
環境はVB2005です
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31833&forum=7&7
上記のリンク先の方とほぼ状況は同じなのですが

私の場合は、DataGridView内(dgv1)に別のDataGridView(dgv2)を表示して
そのDataGridView(dgv1)のカレントセルの位置にあわせて、DataGridView(dgv2)を呼び出して表示を行いたいのです。

上記に書かれている b.AccessibilityObject.Bounds を試してみましたが
これはDataGridView内の座標ではなく画面上の座標を見ているらしく
フォームの位置によってdgv2の表示位置が変わってしまったので、使用しないことにしました。

http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.datagridview.getcelldisplayrectangle.aspx
なので 上記のDataGridView.GetCellDisplayRectangle メソッドを使用してみましたが
コード:
        Dim columnIndex As Integer
        Dim rowIndex As Integer
        Dim cutOverflow As Boolean
        Dim returnValue As Rectangle

        returnValue = dgv1.GetCellDisplayRectangle(columnIndex, rowIndex, cutOverflow)
        dgv2.Location = New Point(returnValue.X, returnValue.Y)



dgv2のどこのセルをクリックしても、表示位置が全く変わりません。

returnValueの値を調べても {X=値,Y=値,Width=値,Height=値} となり
dgv2のどこのセルをクリックをしても、同じ数値が返されるだけでした。

いったい何が原因なのでしょうか?
よっし〜。
ベテラン
会議室デビュー日: 2007/04/17
投稿数: 89
お住まい・勤務地: 北のほうの国
投稿日時: 2007-12-17 20:59
引用:

未記入さんの書き込み (2007-12-17 19:15) より:

dgv2のどこのセルをクリックしても、表示位置が全く変わりません。

returnValueの値を調べても {X=値,Y=値,Width=値,Height=値} となり
dgv2のどこのセルをクリックをしても、同じ数値が返されるだけでした。

いったい何が原因なのでしょうか?



dgv2のどこをクリックしても変わらないのでは?
dgv1の間違いですか?

コード:

    Private Sub dgv1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv1.CellClick
        Dim columnIndex As Integer = e.ColumnIndex
        Dim rowIndex As Integer = e.RowIndex
        Dim cutOverflow As Boolean = False
        Dim returnValue As Rectangle

        returnValue = dgv1.GetCellDisplayRectangle(columnIndex, rowIndex, cutOverflow)
        dgv2.Location = New Point(returnValue.X + dgv1.Location.X, returnValue.Y + dgv1.Location.Y)
    End Sub



上記コードでは動作を確認できました。
未記入
常連さん
会議室デビュー日: 2007/04/09
投稿数: 21
投稿日時: 2007-12-18 10:45
引用:

よっし〜。さんの書き込み (2007-12-17 20:59) より:
dgv2のどこをクリックしても変わらないのでは?
dgv1の間違いですか?


おっしゃる通りdgv1の間違いでした。
文章はちゃんと読み返さないと駄目ですね。申し訳ありませんでした。
引用:

Dim columnIndex As Integer = e.ColumnIndex
Dim rowIndex As Integer = e.RowIndex
Dim cutOverflow As Boolean = False
Dim returnValue As Rectangle

returnValue = dgv1.GetCellDisplayRectangle(columnIndex, rowIndex, cutOverflow)
dgv2.Location = New Point(returnValue.X + dgv1.Location.X, returnValue.Y + dgv1.Location.Y)


上記コードで正常に動作しました。
ちゃんとイコールで指定してやらないといけなかったのですね。まだまだ勉強不足で申し訳ありません。
よっし〜。さんありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)