最終更新日 :
VB Tips

編集モードへの移行

掲示板に書込まれていた質問の中に、「フレキシブルグリッドでセルの内容を編集させたい」というのがありましたが、 このことについてもうちょっと突っ込んだことを書いてみたいと思います。 フレキシブルコントロールに限らず、この方法はいつでも使用することができ、リストビューコントロールでも行われていることです。
といっても、即席で作ったも同然ですから・・・。

1.フォームに貼り付けるコントロールと初期値
まず、最低必要なものは、編集用のテキストボックスです。あらかじめ非表示にしておきます。そして、編集する場所に合わせて枠線のスタイルなどを変えます。右の図を参考にしてください。
このとき注意しておくことは、貼り付ける先のコンテナです。編集機能を付けたいコントロール(例えばピクチャーボックスなど)の内部にテキストボックスを貼り付けるときと、コントロールに関係なく貼り付けるときがあります。
2.編集の開始
編集開始の例です。ここでは、フレキシブルグリッドの場合で行います。

Sub StartEdit()

' テキストボックスを移動させます
Text1.Move Flex1.CellLeft, Flex1.CellTop, Flex1.CellWidth, Flex.CellHeight
' テキストボックスにセルのテキストを代入します
Text1.Text = Flex1.Text

Text1.Visible = True
Text1.ZOrder 0
Text1.SetFocus

End Sub

やっていることは単純です。テキストボックスの位置を指定して、内容を設定して表示するだけです。
表示する前に、テキストボックスのフォントを変えたりしたりすることも簡単です。
3.編集の終了
編集の終了の条件として、
1、テキストボックスがフォーカスを失う
2、キーボードからのEnter, Escの入力
3、Tabキー
がありますが、これらのコードの実装の仕方について書きます。

Sub Text1_LostFocus()
' テキストボックスがフォーカスを失う

' テキストボックスを非表示に
Text1.Visible = False
' 場合によりますが、セルにテキストボックスに反映させる(させないのなら削るがよし)
Flex1.Text = Text1.Text

End Sub

Sub Text1_KeyPress(KeyAscii As Integer)

' 入力されたキーによって処理を変えます。

End Sub

Tabキーの処理は、LostFocus処理と同じとみなしても構わないでしょう。
こんなところです。この処理は、フレキシブルグリッドに限らずいろいろなところで使うことができる (EditListコントロールや現在制作中PropertyListBoxでも使用)のでいろいろな応用をしてみてください。

Copyright (C) 1999 Satoshi Tadaフィードバックはこちら
Home