MS Access Tips/Sample and VBA and Blog customize etc...

ドラッグできるコントロールクラスで「最背面へ移動」

以前の記事 ドラッグできるコントロールクラス、ラベル、イメージ対応版 で紹介したものですが、移動させてコントロールが重なった時に、前後関係を変更したい場合もあるでしょう。そこでダブルクリックしたら最背面へ移動するという機能を実装しました。

ドラッグできるコントロールクラスの改良

難易度:

経緯

きっかけは、下記の掲示板での質問にした回答です。

hatena の Microsoft Access 掲示板|マウスクリック時ラベルの最背面に|ツリー表示 > スレッドNo.2615

前後関係を変更するのは「最背面へ移動」コマンドしかなさそうです。またこのコマンドはデザインビューしか使えません。

そこで、デザインビューへ切り替えて、DoCmd.RunCommand acCmdSendToBack を実行して、フォームビューに戻せはできそうだと目論みました。

デザインビューにすると Me が使えずエラーがでるので、Screen.ActiveForm を使うなどのちょっと苦労しましたが、なんとか「最背面へ移動」させることはできました。

問題発生

しかし、ひとつ大問題が、、、、

コントロールの位置をVBAで動的に変更しているのですが、デザインビューにするとデザイン時に設定した位置に戻ってしまうのです。(当たり前といえはそうですが)

ということで、デザインビューに変更する前に、全コントロールの位置を配列に格納しておいて、フォームビューに戻したときに配列に格納した位置を再現するというコードを追加しました。

コントロールの名前と左位置、上位置 を格納するユーザー定義型を定義して、それを動的配列で宣言します。そこに名前と位置を格納します。

ちらつきを抑えるために DoCmd.Echo False したり、デザインビューにしてますので、エラーが発生しても、フォームビューに戻す、DoCmd.Echo True の処理は必ず通過するようにエラー処理を追加してます。

ドラッグできるコントロールクラスに実装

上記のコードでうまくいきましたので、後は、これをクラスモジュールに組み込むだけの機械手的な作業です。

クラスモジュール clsDraggableControl

サンプルファイルが下記からダウンロードできます。
FrmDraggableCtlClass_07.zip (Access 2007-2010 形式 - 92kb)
FrmDraggableCtlClass.zip (Access 2002-2003 形式 - 87kb)
FrmDraggableCtlClass_2k.zip (Access 2000 形式 - 87kb)


拍手する

2 Comments

Genzo says..."出てきたサイトはやっぱり hatena chips"

Accessで座席管理表みたいなものを作成できないかな~…と
徘徊していて見つけたサイトは「hatena chips」。

さすが、2歩も3歩も(もっとですね…。)先を進まれます。
改めて尊敬します!!

作成はこれからとりかかる事になりますが、初めてのクラス化等
不安ながらも、ちょっと楽しみです。

(初のクラス化とか…遅すぎかもしれませんが…orz)

のんびりまったり、また勉強させていただきます。

2014.11.20 15:53 | URL | #XwoFApvM [edit]
hatena says..."re:出てきたサイトはやっぱり hatena chips"

Genzoさん、お久しぶりです。

クラスの概念は最初は敷居が高いですが、習得するとなかなか便利です。

掲示板のかきのスレッドなども参考になると思います。

<a href="http://hatena-access.progoo.com/bbs/hatena-access_tree_pr_3111.html">hatena の Microsoft Access 掲示板|フォーム上でドラッグしたコントロールの位置を保存したい|ツリー表示 > スレッドNo.3111</a>
<a href="http://hatena-access.progoo.com/bbs/hatena-access_tree_pr_3144.html">hatena の Microsoft Access 掲示板|クラスモジュールでのDictionaryオブジェクト|ツリー表示 > スレッドNo.3144</a>

ここのコードはドラッグだけですので、これを座席管理に応用するとなるとまたいろいろ大変だと思います。

頑張ってください。

2014.11.22 17:16 | URL | #5uE6dEgY [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/412-f1434ae8
該当の記事は見つかりませんでした。