- PR -

DataGridViewのカレントセルの位置を座標で取得する方法

1
投稿者投稿内容
reiko
ベテラン
会議室デビュー日: 2004/11/19
投稿数: 84
投稿日時: 2007-09-03 14:05
いつもお世話になっております。

DataGridViewのカレントセルに、コンボボックスを重ねる動作をしたいのですが、
どのように座標を取得すればよいのかわからず困っています。

このような事を行いたい理由は、データグリッドの
入力に、手入力可のコンボボックスを使用したいからです。


DataGridViewのセルタイプで指定できるコンボボックスでは
手入力を許可する際、手入力した値をリストに追加しないとエラーになると知りました。
ですが、リストには反映しないで、リストにない値の手入力も許可したいのです。

そこで、該当セルにフォーカスが移動した際に、該当セルの位置に
セルと全く同じ大きさのコンボボックスを表示させて、
そのコンボボックスで入力を行い、Enterキー押下時には
入力値を該当セルに反映、コンボボックスを非表示にする・・・
という苦肉の策を思いついたのです。

実際VB6.0だかVB5.0だかの時代にMSFlexGridに対して、
入力用テキストボックスを表示させるような動作をした記憶が
あるのですが・・・。

いかがでしょうか?
なにかアドバイスがあれば、よろしくお願い致します。

KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-09-03 15:17
件名の質問への回答としては、
使ったことはないですが、DataGridViewCell.ContentBounds プロパティで取得できると思います。

ただし、DataGridView のセルの編集コントロールを拡張したい場合に、
むりやり重ねるのは得策とは言えません。
以下の記事が参考になると思います。

方法 : Windows フォーム DataGridView Cells でコントロールをホストする
reiko
ベテラン
会議室デビュー日: 2004/11/19
投稿数: 84
投稿日時: 2007-09-03 15:40
KIさん、親切なご回答有難うございます。

早速アドバイス頂いた「コントロールをホストする」
方法を試してみようと思います。

結果は改めて報告させていただきます。
本当にありがとうございました。
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2007-09-03 15:57
過去ログに同じ話題がありましたので。

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

DataGridView.GetCellDisplayRectangleメソッドでも可能ですね。
これでセルのクライアント座標が取得できます。
reiko
ベテラン
会議室デビュー日: 2004/11/19
投稿数: 84
投稿日時: 2007-09-04 09:01
Ahfさん、ご回答ありがとうございます。

私もそれを見てやってみたのですが・・・。
なんだか変な位置にコンボボックスが出てきちゃって(泣)

でも、それを試してみた事も記述するべきでしたね。
大変失礼しました。これから気をつけます。

reiko
ベテラン
会議室デビュー日: 2004/11/19
投稿数: 84
投稿日時: 2007-09-04 13:19
解決の報告です。

KIさんにご紹介頂いた
「Windows フォーム DataGridView Cells でコントロールをホストする」
で、無事希望の処理を行う事が出来ました。

皆様有難うございました。
今後ともよろしくお願い致します。
1

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