ツールバーをvbAlignTopで配置しています。そして直ぐ下にテキストボックスを
配置しています。テキストボックスのtopはツールバーの高さで取得していますが、
そこで問題が生じています。フォームのresizeイベントにtextbox.top=toolbar.
height + 30 としているのですが、フォームの幅を狭くして、ツールバーの高さが
二段になったときに、テキストボックスがツールバーの後に隠れてしまいます。
そしてもう一度少しフォームの大きさを変えると、適正な位置になります。
多分フォームをリサイズした後に、ツールバーがフォームの大きさを読取り
折り返しを設定しているものと思われます。その場合、テキストボックスの
位置がリアルタイムで取得できません。これはどのように回避したらよいでしょ
うか?
宜しくお願いします。
環境はVB6かVB.NET、どちらでしょうか?
VB.NETで試してみましたが、
>フォームの幅を狭くして、ツールバーの高さが
>二段になったときに、テキストボックスがツールバーの後に隠れてしまいます。
この現象を再現できませんでした。
新規フォームを新たに作成して、必要な部分のコードだけを記載して、
もう一度、試してみてください。
申し訳有りません。VB6です。
新規プロジェクトでフォームとツールバーとテキストボックスの3つのコント
ロールを配置して必要なコードのみtextbox.top=toolbar.height + 30 (
フォームのリサイズイベント)記述しましたが、結果は上記と同じで、
ツールバーの高さが遅れて取得されるため上手くいきません。
どうぞ宜しくお願いします。
下記環境でも
WinXP SP2
VB6 SP6
でも再現しませんでした。
以下実験手順。
1)新規プロジェクトでフォーム(Form1)にツールバー(ToolBar1)と
テキストボックス(Text1)を貼り付ける。
2)ToolBar1に適当な数のボタンを作成。
3)Form_Resizeイベントプロシージャに
Text1.Top = Toolbar1.Height
を記述
4)実行
5)ウィンドウのサイズを縮小したり伸ばしたりする
結果、テキストボックスはツールバーの下に表示されました。
030さんありがとうございます。
前の投稿分はvb6にwin98seでした。
それで同じものをwinXP環境で実行しました。すると見事に綺麗に動き
ました。
98ではどのように対処したらよいでしょうか。
フォームのresizeイベントがWin98seで動作するかどうかを
MessageBoxなどで確認してください。
動作している場合は再描画をさせて、で試してください。
>ツールバーの高さが遅れて取得されるため上手くいきません。
ここが気になりました。
フォームのサイズを変更すると、ツールバーの高さが遅れて取得されて、
TextBoxの位置設定も遅れて移動するということでしょうか?
もし、そうだったら、PCの環境を調べてください。
CPUとメモリとグラフィックボードの性能などを・・・・・・
マグさん有難う御座います。
MessageBoxでみたところリサイズイベントが動作しています。
再描画をさせてとはどういうことでしょうか
>>ツールバーの高さが遅れて取得されるため上手くいきません。
>ここが気になりました。
もう一度ここを説明します。
(仮にツールバーの高さを330とします。)
ツールバーが折り返すようにフォームの幅を狭くします。すると、高さが330と
なります。テキストボックスが隠れます。そして次にフォームが折り返しの状態にならないようにフォームの幅を広げます。すると、ツールバーの高さが660になり
ます。よってこの時、テキストボックスは、高さが660の位置になり、ツールバー
から330離れてしまいます。このような具合で、位置設定が上手くいきません。
通常の処理の部類だと思うのですが、どうやればよいのでしょうか。
Win98SEは持ってないので確認がとれませんが思いつく方法を2点
1)Form_Resizeの中でテキストボックスの位置を調整する前に
DoEventsを入れてやる
2)ツールボックスのウィンドウハンドルよりサブクラス化し
WM_SIZEメッセージにてテキストボックスの位置調整を行ってやる
とか
>2)ツールボックス
2)ツールバー
でした
030さん有難う御座います。
1)Form_Resizeの中でテキストボックスの位置を調整する前に
DoEventsを入れてやる
DoEventsは使用したことがなく全くわからないのですが、とりあえず以下のように
記述しました。しかし上手くいきません。記述の仕方が違うと思うのですが
申し訳有りませんが、少し教えていただけないでしょうか
Private Sub Form_Resize()
DoEvents
Text.Top = Toolbar1.Height
End Sub
思っていたのはその通りです。
うまくいかないようですので、2をお試しください。
そして、030さんの2番目の方法が出来なかった場合、
Labelを一つ、配置して、ツールバーの高さを表示するように
コーティングして、
ツールバーを折り返したり、折り返さなかったりして、
正常に取得できているかどうかを確かめてください。
1.Resizeイベントの中でブレイクポイントを設置
2.値の変更前と変更後を目で確認する
(カーソルを合わせるorイミディエイトに表示する)
3.その数値が適切な値かを判断する
4.適切なのにorステップ時はうまくいく場合は再度現象を質問する
5.3.終了時バグに気づいたらバグの報告を行い
何をどう修正したかを報告する
スマートな遣り方ではないことをあらかじめお断りしておきます。
formにタイマーコントロールを貼り付けenabled=falseに
しておきます。リサイズイベントでタイマーを有効にし例えば1/100
間隔でツールバーの高さとテキストボックスの位置をチエックする
満足する状態でなければ満足する状態にする
タイマーを無効にする。
こんなんでいかがでしょうか?
移動した模様。
http://www.gizshare.com/vbtomo/boards/vbqanda.php?do=spread&num=11303
030さん2の方法は今は技術的に出来ないので、次回にします。
XPではリアルタイムでリサイズイベントが働いているみたいですが、
98では違うみたいです。
出掛けに一筆さん
タイマーコントロールを使うと出来ますね。有難う御座います。
移動さん
>移動した模様。
移動していません。
ツイート | ![]() |