- PR -

フォームのHeightプロパティが勝手に変更される現象についてお力を貸してください

1
投稿者投稿内容
エイジ
常連さん
会議室デビュー日: 2007/11/14
投稿数: 38
お住まい・勤務地: 兵庫
投稿日時: 2007-12-07 11:16
いつもお世話になっております

VB6.0を使用し開発をしているのですが、開発中に実行すると最初のフォームから次のフォームを開くとHeithプロパティが勝手に変更されます

フォームを開く際に現フォームの中心を求めて、新しいフォームの中心が同じになるようにTopプロパティとLeftプロパティを設定する処理をしており

その処理に原因が有る事はわかったのですが、Heightプロパティをさわっていないのに何故Heightプロパティが勝手に変更されるのでしょう・・・

Public Sub gfrmPosition(ByRef rfrmF As Form, ByRef rfrmT As Form)
  Dim lngX As Long
  Dim lngX As Long

  With rfrmF
    lngX = .Left + .Width / 2
    lngY = .Top + .Height / 2
  End With

  With rfrmT
    .Left = lngX - .Width / 2
    .Top = lngY - .Height / 2
  End With

End Sub

原因が上記コードに有るのは特定しました

    .Left = lngX - .Width / 2
    .Top = lngY - .Height / 2

この部分をコメントアウトするだけで現象はなくなります

また、この現象はステップ実行すると現象が無くなったり
exeファイルを作成し実行しても、現象が現れないです


ただ、コメントアウトをどちらか一方だけにするとやはり現象が現れ
具体的に数値で言うと

新しく開かれたフォームが、作成段階で
Height = 5595 となっていたものが
Height = 5295 となってしまいます

他のフォームでも上記処理を通すと同様の現象が現れ、一律-300されています


フォームサイズをResizeで直すという事も出来るので回避方法は幾らでも有る上に
exeファイルで問題なく動作しているので、別にいいと言えばいいんですが・・・


調査するように言われてるので、原因がわかるならそれに越した事が無いかと思い質問させていただきました
何かわかる事がありましたら、教えていただきたいです

よろしくお願いします
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-12-07 11:26
質問です。 gfrmPosition メソッドはどのタイミングで実行されますか? ひょっとして Load イベントでしょうか? それと、端末は XP 視覚テーマを有効にしていますか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
エイジ
常連さん
会議室デビュー日: 2007/11/14
投稿数: 38
お住まい・勤務地: 兵庫
投稿日時: 2007-12-07 11:44
ご返信ありがとうございます

ご質問の件ですが
呼び出しはLoadの後に実行しています

呼び出し元でLoadメソッドを実行後
gfmPositionメソッドとは別の、フォームのオープンメソッド処理の中でgfrmPositionメソッドを実行しています

端末はXPの視覚テーマ有効になっていると思います

視覚テーマと言うのがコントロールパネルの画面のプロパティにある
デザインのウィンドウとボタンの事だと思うのですが、その設定はXPスタイルになっています

また、ご返信後、その設定をクラシックにして動作を確認したもののやはり現象が出ていました

根本の視覚テーマ自体の認識が誤っていたら申し訳ありません
エイジ
常連さん
会議室デビュー日: 2007/11/14
投稿数: 38
お住まい・勤務地: 兵庫
投稿日時: 2007-12-07 12:10
ちょっとメソッドを呼び出すまでの流れがわかりづらいかと思い追記します

-----呼び出し元----

呼び出すフォームのLoad 実行

オープンメソッド(呼び出し元フォーム,開くフォーム) 実行

----オープンメソッド----

'位置の修正
gfrmPosition(呼び出し元フォーム,開くフォーム) 実行

開くフォーム.Show

呼び出し元のフォーム.Hide

と言う手順でフォームを開いています
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2007-12-07 12:26
こんにちは。

オープンメソッドを実行せずに、gfrmPositionと開くフォーム.Showのみを実行した場合はどうでしょうか。
Load

gfrmPosition

開くフォーム.Show

これで発生しなかったら、オープンメソッド内に問題があるかと思われます。
エイジ
常連さん
会議室デビュー日: 2007/11/14
投稿数: 38
お住まい・勤務地: 兵庫
投稿日時: 2007-12-07 12:56
ご返信ありがとうございます

オープンメソッドを実行せずに動作させてみたのですがやはり、現象は現れ
変わらずHightプロパティが勝手に削られます

ですので、やはり問題は上記コードで起こっていると考えて間違いないと思います

ちなみにオープンメソッドでももちろんHightを触ったりはしていません
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2007-12-07 13:48
引用:

開発中に実行すると最初のフォームから次のフォームを開くとHeithプロパティが勝手に変更されます


すいません、この部分を読んでませんでした・・・orz
そういえば私の環境(WinXP SP2、VB6SP6)でも発生してました・・・

MSDNにはこうありました。
・Visual Basic 6.0 では Windows XP のテーマ (視覚スタイル) はサポートされていない
http://support.microsoft.com/kb/309366/ja

私のところでは、デザイン時に[オブジェクトの表示]をしておくと回避できてます。


#デザイン時のみの発生だったので無視してました・・・
エイジ
常連さん
会議室デビュー日: 2007/11/14
投稿数: 38
お住まい・勤務地: 兵庫
投稿日時: 2007-12-07 14:19
度々ありがとうございます

デザイン時に[オブジェクト表示]をしておくと回避できると言うのは
VBを開いてコード編集やオブジェクトのデザインを編集する画面に、オブジェクトを開いて置くと言う事でいいんですよね?

なんか説明が難しいですね・・・

確かにこの方法で表示のずれが回避できました

視覚XPの視覚テーマが問題で起こるんでしょうか
テーマをクラシックに変えても変わらず起こるのでOSがXPって言うだけでダメなのかもしれないですね。

なんか、exeファイルで動作に問題なさそうだしこだわる必要はないんですが
なんとなく、理由がわからないまま放置しておくのがスッキリしなくて・・^^;

同様にXPの環境でV、SSを使用し開発しているメンバーも同じ現象が出ているので
XPが原因と言うのが最有力でしょうか


ただ、プロジェクトを新たに作り、フォーム2つとそれぞれにボタン1つ
そしてモジュール1つ用意して
ボタンのクリックでフォームが新しく開く、と言う処理だけのプロジェクトを作って
同じフォームの開き方で動かした場合は

上記質問の現象が現れなかったので、何個かの条件が重なるとそうなる必要があるのかもしれません。

Heightプロパティを触ってないだけに何処をどう見て良いのかわからないから困りますね・・・



オブジェクトの表示で回避する方法は知らなかったので
J.J.さんに回避法を教えていただき開発がしやすくなりました

こん後の開発に活かさせていただきます

ありがとうございました

文末の日本語が変だったのでちょっと編集しました^^;

[ メッセージ編集済み 編集者: エイジ 編集日時 2007-12-07 14:23 ]
1

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