- PR -

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

1
投稿者投稿内容
やましたC
会議室デビュー日: 2006/07/04
投稿数: 4
投稿日時: 2006-07-04 18:35
DataGridViewのカレントセルの表示位置が知りたいのですがどのような方法があるのでしょうか?
やりたいことはDataGridViewにボタンを表示してそのボタンの位置にあわせてフォームを呼び出して表示を行いたいのです。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-07-04 23:21
ボタンをクリックしたときの画面座標を取りたいって言うことですか?
DataGridView のリファレンスを見ると
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.datagridview_properties.aspx

MousePosition がそれっぽいですね
やましたC
会議室デビュー日: 2006/07/04
投稿数: 4
投稿日時: 2006-07-05 13:30
アドバイスありがとうございます。おっしゃるとおり知りたいのは画面の座標位置です。MousePositionですとマウスのカーソルの位置になってしまうため、キーボードでグリッドを操作していた場合にマウスカーソルがあるとは限らないため無理そうです。
イメージとしてはコンボボックスみたいにセルのすぐ下に画面を開きたいと考えています。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-07-05 14:59
引用:

やましたCさんの書き込み (2006-07-05 13:30) より:
アドバイスありがとうございます。おっしゃるとおり知りたいのは画面の座標位置です。MousePositionですとマウスのカーソルの位置になってしまうため、キーボードでグリッドを操作していた場合にマウスカーソルがあるとは限らないため無理そうです。
イメージとしてはコンボボックスみたいにセルのすぐ下に画面を開きたいと考えています。



うーん、これでいくかなー
思いっきり間違えている気もする・・・
コード:
        private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
            {
                DataGridView dgv = (DataGridView)sender;
                DataGridViewButtonCell b = (DataGridViewButtonCell)dgv.CurrentCell;
                Point bPoint = dgv.PointToScreen(new Point(b.Size));
            }
            
        }


やましたC
会議室デビュー日: 2006/07/04
投稿数: 4
投稿日時: 2006-07-06 10:00
 かるあさん度々ありがとうございます。サンプルで示し
ていただいたコードを試してみました。
 グリッドにスクロールが存在しない場合はセルの行と列
分セルサイズを足していって綺麗に表示できたのですが、
スクロールが発生した場合はカレントセルのピクセル単位
の座標位置がわからないため計算できませんでした。
 ヘルプ等を参照してもセルが画面上のどこにあるかを判断
するようなプロパティやメソッドを見つけられませんでした。
 前に同じようなことを「FlexGrid」という製品を使用して
できたので、標準のグリッドできそうなのですがものが違う
ので無理なんですかねぇ。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-07-06 10:25
ウォッチで値を眺めていたら

b.AccessibilityObject.Bounds

に色々入っているようなのですが、こんな感じでどうでしょうか
#Accessibility への参照が必要みたいです
[code]
-Point bPoint = dgv.PointToScreen(new Point(b.Size));
+Point bPoint = dgv.PointToScreen(new Point(b.AccessibilityObject.Bounds.X, b.AccessibilityObject.Bounds.Y));
[code]
やましたC
会議室デビュー日: 2006/07/04
投稿数: 4
投稿日時: 2006-07-06 10:52
大変参考になりました。私がやりたいことは以下のソースで解決しました。
いろいろ調べていただいてありがとうございました。

コード:
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
{
DataGridView dgv = (DataGridView)sender;
DataGridViewButtonCell b = (DataGridViewButtonCell)dgv.CurrentCell;
Point bPoint = new Point(b.AccessibilityObject.Bounds.X, (b.Size.Height + b.AccessibilityObject.Bounds.Y));

Form SelectForm = null;
SelectForm = new Form2();
SelectForm.Location = bPoint;
SelectForm.ShowDialog();

}

}
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-07-06 12:30
DataGridView.GetCellDisplayRectangle メソッド なんてどうでしょ。
1

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