C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.58032 の関連記事表示

<< 0 >>
■58032  Re[1]: MSFLEXGRIDのスコープ範囲
□投稿者/ 魔界の仮面弁士 -(2011/03/24(Thu) 09:56:21)
    No58025 (コアラ主任 さん) に返信
    > それとも、自分のプログラミングにより、そのようになっているの
    > でしょうか。
    だと思います。
    
    未初期化のフォームが自動ロードされてしまっているのでしょう。
    
    
    > 別のフォームから、そのMSFLEXGRIDのrows値を参照すると
    > フォーム側(?)プロパティで設定してある2と言う値で参照されます。
    Rows をセットする際に、フォームと MSFlexGrid の hWnd プロパティを
    Debug.Print してみてください。
    
    そして、Rows が 2 になってしまっている所でも、同様に
    それらの hWnd プロパティを参照してみてください。
    
    もしも「セットした時」と「参照した時」がそれぞれ同一のフォームだとすれば、
    hWnd 値は同じものになるはずです。それらが違う値になってしまうようであれば、
    別のフォームとコントロールを参照していることを意味します。
    
    
    > Public main_form As main_form
    変数名と型名が同じになっているのが、混乱の要因かと思われます。
     Public mainForm As Form2
    のように、別の名前に変更しておく事をおすすめします。
    
    また、フォームがアンロードされた時には、変数名に Nothing を代入する事を
    忘れないようにしてください。そうしないと、自動ロードの危険性が高まります。
    
    Dim f As Form3
    Set f = New Form3
    Load f
    Debug.Print ObjPtr(f), f.hWnd   '元のフォーム
    f.Caption = "New Caption"       'Captionを変更する
    f.Show vbModal
    Unload f                        'アンロードしてあるが、
    'Set f = Nothing                'Nothing はセットしていないし、
    'Set f = New Form3              '新たなインスタンスもセットしていない
    
    MsgBox f.Caption                'この時点で自動ロードされてしまう
    Debug.Print ObjPtr(f), f.hWnd   '別のフォームになっている
    
    
    上記の場合、ObjPtr(f) が一致する事からもわかるように、
    オブジェクトとしては同一のインスタンスですが、
    f.hWnd は別物であるため、自動ロードされた
    別のフォームになってしまう事がうかがえます。
    
    
    >     Set main_form = New main_form
    >     Load main_form
    New して使う事を前提にしている場合、暗黙のForm変数にアクセスできないようにするため、
    
    'Form2(呼ばれる側)
    Option Explicit
    Private Sub Form_Initialize()
     Set Form2 = Nothing   '暗黙の変数を消しておく
    End Sub
    
    のようにしておくと良いでしょう。こうすれば、
     Set f = New Form2
     Load f
     f.Show
    のようなコードは正常に実行できますが、
     Load Form2
     Form2.Show
    のようなコードが実行時エラーになるので、コードバグを検知しやすくなります。
記事No.58025 のレス /過去ログ97より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -