tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルテキストボックスの移動と配置に関して(MSflexGrid)
記事No7833
投稿日: 2008/07/18(Fri) 18:32
投稿者funnybunny

現在VS2008でMSflexGridを扱っているのですが

VB6.0ではMSflexGrid上にテキストボックスを移動する際に

With MSFlexGrid
textbox.Move .Left + .CellLeft, .Top + .CellTop, .CellWidth, .CellHeight
'テキストボックス (Left,Top) & (Width,Height)
End With

とすることで、グリッドのセル上にテキストボックスを
セルと同じサイズ、同じ位置に持ってきて
エクセルのように直接入力できるようにしていたのですが

VS2008に変更したことで
Moveがなくなったのでどのように対処すればいいのか困っています。

対応策として以下のように考えたのですが

textbox.Width = AxMSHFlexGrid1.CellWidth
textbox.Height = AxMSHFlexGrid1.CellTop
textbox.Left = AxMSHFlexGrid1.Left
textbox.Top = AxMSHFlexGrid1.Top

このようにしてしまうと
ピクセルの関係上セルの上に被らずに、とんでもなく遠くの場所にテキストボックスが配置され
テキストボックスのサイズも巨大になってしまいます。

どなたかAxMSHFlexGrid上のセル位置にきっちり重なる方法が分かる方
ご指導、ご鞭撻をよろしくお願い致します。

[ツリー表示へ]
タイトルRe: テキストボックスの移動と配置に関して(MSflexGrid)
記事No7834
投稿日: 2008/07/18(Fri) 20:19
投稿者花ちゃん
> textbox.Move .Left + .CellLeft, .Top + .CellTop, .CellWidth, .CellHeight
> Moveがなくなったのでどのように対処すればいいのか困っています。

SetBounds メソッド を使ってみて下さい。



> 対応策として以下のように考えたのですが
>
> textbox.Width = AxMSHFlexGrid1.CellWidth
> textbox.Height = AxMSHFlexGrid1.CellTop
> textbox.Left = AxMSHFlexGrid1.Left
> textbox.Top = AxMSHFlexGrid1.Top
これは、.Left + .CellLeft らと全然違うでしょう、特に textbox.Height = xMSHFlexGrid1.CellTop は。

>テキストボックスのサイズも巨大になってしまいます。
単位が違うからです。 (1mm + 1 インチ = 2 mm になりませんよね)

VS2008 を使っているのなら、DataGridView を使った方がいいと思いますよ。

[ツリー表示へ]
タイトルRe^2: テキストボックスの移動と配置に関して(MSflexGrid)
記事No7846
投稿日: 2008/07/22(Tue) 15:08
投稿者funnybunny
ご返答ありがとうございました。
DataGridViewはまだ試したことがないので試してみようと思います。


> 単位が違うからです。 (1mm + 1 インチ = 2 mm になりませんよね)


VB暦が浅い私にはまだこの辺がさっぱりですね・・・すみません。
もし、テキストボックスをセルにぴったり被せる方法をご存知でしたら
ヒントだけでもお願いできないでしょうか。

セルをダブルクリックでカラーパレットを表示して色付けをするなどの機能を
VB6.0でMSflexGridを使用して作っていたもので、それを応用させたかったです。

DataGridViewでもできるのだろうか・・・(不安

ご返答ありがとうございました。

遅れましたが、こちらのサイトをいつも参考にさせて頂いております。
ありがとうございます。

[ツリー表示へ]
タイトルRe^3: テキストボックスの移動と配置に関して(MSflexGrid)
記事No7847
投稿日: 2008/07/22(Tue) 16:37
投稿者花ちゃん
> ヒントだけでもお願いできないでしょうか。

すでに、回答したつもりですが、.CellLeft 等で取得できる値は、Twip 単位です。
http://www.hanatyan.sakura.ne.jp/dotnet/MSFGrid1.htm

.NET での単位は、Pixel です、従って、.CellLeft 等で取得した値を Pixel に
変換して計算して見て下さい。
簡易的には、.CellLeft \ 15 で Pixel になりますが、解像度の設定等によって
変わりますで、正確には事前にその辺を調べておく必要があります。

[ツリー表示へ]
タイトルRe^4: テキストボックスの移動と配置に関して(MSflexGrid)
記事No7848
投稿日: 2008/07/22(Tue) 22:16
投稿者魔界の仮面弁士
# 名前空間の説明文に誤りがあったので、一部修正。

> 簡易的には、.CellLeft \ 15 で Pixel になりますが、解像度の設定等によって
> 変わりますで、正確には事前にその辺を調べておく必要があります。

<削除>Microsoft.VisualBasic.Compatibility.VB6.Support 名前空間で取得できますね。</削除>
失礼。Microsoft.VisualBasic.Compatibility.VB6 名前空間の Support モジュールですね。



''' Microsoft.VisualBasic.Compatibility.DLL を参照設定しておく
'Imports Microsoft.VisualBasic.Compatibility.VB6

Dim scaleX      As Single = TwipsPerPixelX()
Dim scaleY      As Single = TwipsPerPixelY()
Dim pixelValueX As Double = TwipsToPixelsX( twip値 )
Dim pixelValueY As Double = TwipsToPixelsY( twip値 )
Dim twipValueX  As Double = PixelsToTwipsX( pixel値 )
Dim twipValueY  As Double = PixelsToTwipsY( pixel値 )


# あるいは、1440 / GetDeviceCaps(p, LOGPIXELSX) という手もあるけれど。

[ツリー表示へ]
タイトルRe^5: テキストボックスの移動と配置に関して(MSflexGrid)
記事No7849
投稿日: 2008/07/23(Wed) 07:31
投稿者花ちゃん
> Microsoft.VisualBasic.Compatibility.VB6.Support 名前空間で取得できますね。

そんな手があったんですね、知りませんでした。

私は、Win32 API 関数を使って取得していたのですが、下記のような方法でも
取得できるようですね。

Using g As Graphics = Me.CreateGraphics()
   Dim scaleX As Single = 1440.0F / g.DpiX
   Dim scaleY As Single = 1440.0F / g.DpiY
End Using

[ツリー表示へ]