- ベストアンサー
フォームの存在をチェックする方法
みなさんこんばんわです。よろしくお願いします。 VB.NET 2008で開発をしています。フォームについて、どうしてもわからない点がありますのでお伺いいたします。 Form1、Form2があるとします。 Form1.Visible = False とすれば、Form1のインスタンスは残ったまま、非表示なだけです。一方、 Form1.Close() Form1.Dispose() とすれば、Form1は完全にメモリ上から解放されています。つまり、Form1上のコントロールから値を取得しようとするとエラーになりますよね。 つまり、上記の二つのケースをForm2から判断したいのですが、そのコードが分からないんです。Form2のコードで、Form1のインスタンスが存在するかどうか、つまり、Form1上のコントロールの値を参照することができるかどうかを知りたいんです。 具体的には、実際のイメージはForm3まであって、Form1が不可視で生きていれば、Form1上のコントロールの値を参照し、Form2が不可視で生きていれば、Form1は無視してForm2上のコントロールの値を参照するという具合です。 ちなみに、 If Form1.Visible = False Then Debug.Print("生きてます") のコードでは、Form1のインスタンスがメモリ上にあってもなくても、不可視であれば、同じ値を返すことがわかり、役に立ちません。 ご存じの方がいらっしゃいましたら、たいへんお手数をおかけしますが、どうぞよろしくお願い申し上げます。 ありがとうございました。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
関連するQ&A
- 【VB.net】フォーム間でのやり取りについて
先日、同じような質問をさせて頂いたのですが、 解決に至らなかったため、もう少し質問内容を工夫しますので、再度質問させてください。 ・実行したいプログラム フォーム1のボタン1をクリックすると、フォーム2を開くと同時にフォーム2ボタン1がvisible=Trueになる。 フォーム1のボタン2をクリックすると、フォーム2を開くと同時にフォーム2のボタン1がvisible=Falseになり、ボタン2がvisible=Trueになる。 ・書いたコード ---------------- Public Class Form1 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim f As New Form2 f.Owner = Me f.Show() DirectCast(Me.Owner, Form2).Button1.Visible = True DirectCast(Me.Owner, Form2).Button2.Visible = False End Sub Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click Dim f As New Form2 f.Owner = Me f.Show() DirectCast(Me.Owner, Form2).Button1.Visible = False DirectCast(Me.Owner, Form2).Button2.Visible = True End Sub End class ---------------- ・問題点 「nullreferenceexceptionはハンドルされませんでした オブジェクト参照がオブジェクト インスタンスに設定されていません。」 というエラーが発生します。 「DirectCast(Me.Owner, Form2).Button1.Visible = True」の部分のエラーです。 手書きで申し訳ありませんが、書きたいプログラムの参考画像も載せておきます。 数日前より調べては試し調べては試しと試行錯誤していますが、 正直手詰まりになっており、非常に困っております。 この他にも、フォーム間で命令を出しあいたい場面が多々あるのですが、 プロパティを変える程度のコードでつまずいていて、先に進めません。 手直しした簡単なサンプルコードを書いて頂けると非常に助かります。 以上、何卒よろしくお願い致します。
- ベストアンサー
- Visual Basic
- フォームロードについて
VB2008で、Form_Load()に Me.Visible = falseや Me.Close()としてもフォームの非表示やフォームを閉じたりしないのですが、なぜなのでしょうか? 最初に起動した場合に、Form_Loadで初期設定を行った後に、自動的に直ぐにフォームを非表示や閉じることをしたいです。
- ベストアンサー
- Visual Basic
- C#でのフォーム間のデータの受け渡しについて
フォーム間のデータ(パラメータ等)の受け渡しについて教えてください。 現在Form1からForm2を起動させる場合、以下のようにForm2のインスタンスの生成時のパラメータを設定してもForm2のLoadイベントでは拾うことはできないのでしょうか? ↓実際のコード //Form1クラスのインスタンスを作成する //引数(a,b) Form2 f = new Form2(a,b); //Form1を表示する //ここではモーダルダイアログボックスとして表示する //オーナーウィンドウにthisを指定する f.ShowDialog(this); //フォームが必要なくなったところで、Disposeを呼び出す f.Dispose(); また、上記の方法が違っていた場合、方法としてどのようなやり方があるのか教えてください。 よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- Paintイベントを抑制する方法
Paintイベントを抑制する方法 今晩は,質問させていただきます. どうぞよろしくお願いいたします. Form1.Visible = False : : '(この間、Form1上の変更は無し) : Form1.Visible = True '(←ここで重くなります) とした時に、Form1上のコントロールのPaintイベントが 走るのを抑制したいのでございますが、そのような方法って あるのでございましょうか? Form1上のコントロールが多く(30個くらいありますorz) これらのPaintイベントが一度に同時に 走ってしまうので、重くなってしまいます。。。 個々のコントロールを触ったときにだけ.Paintイベントが 走ってくれればよいのでございますが。。 何か良さそうな方法などございましたら、是非とも アドバイスいただきたくお願い申し上げます。
- ベストアンサー
- Visual Basic
- メモリリークが発生するのはどういうときですか?
メモリが解放されずに残るケースというのは、どういうときがあるのでしょうか? ※asp.netでプログラムを書いています。 (1)どのクラスも、基本的にコンストラクタでメモリが確保され、 どのクラスも、その親のオブジェクトが解放されたら、自分自身のメモリも解放される。 よって、画面のCloseで、すべてのオブジェクトのメモリは解放される。と思っています。 (2)スタティックメソッドで、参照渡しの引数があるとき、何度そのメソッドを使っても、 オブジェクトのポイントが渡るだけだし、処理完了後は、そのポインタすらも解放すると思っています。 (3)画面右上の「×」のボタン以外で画面が閉じてしまったとしても、セッションタイムアウトになった時点で、その分のメモリは解放すると思っています。 ◆どうしてdisposeメソッドがあるのでしょうか? .自分は、プログラム内に1箇所もdisposeを書く必要がないと思っていますが、どのような時に使うべきなのでしょうか?
- ベストアンサー
- Microsoft ASP
- 【VB2008】2つのFormの上下を切り替える方法。。。
【VB2008】2つのFormの上下を切り替える方法。。。 今晩は,いつも勉強させていただいております. 質問させていただきます.どうぞよろしくお願いいたします. 2つの重なったFormを切り替えるときに今までは Form1.Visible = False Form2.Visible = True などといたしておりましたが、その度に膨大な量の .Paintイベントが走っていることに気づきましたゆえ、 常に重ねておいて上下を切り変えればよいかな?と考えました。 そこで、 Form2.Activate や Form2.Owner = Form1 などといたしましたが変化がございません。。 検索いたしましてもなかなか出てこないのですが、 他に何か方法はございますでしょうか?? もしお詳しい方がいらっしゃいましたら,是非ともアドバイス いただきたく、どうぞよろしくお願いいたします。
- ベストアンサー
- Visual Basic
- 【VB.net】
フォーム1のボタンをクリックすると、フォーム2を開くと同時にフォーム2ボタンがvisible=Trueになる、というコードを書きましたが、エラーが発生します。 ---------------- Dim f As New Form2 f.Owner = Me f.Show() DirectCast(Me.Owner, Form2).Button1.Visible = True ---------------- 「nullreferenceexceptionはハンドルされませんでした オブジェクト参照がオブジェクト インスタンスに設定されていません。」 というエラーが出ます。 ・Button1の(Name)は間違いない ・Button1のvisible初期設定をTrueにしてもFalseにしても同じエラーが発生した なぜエラーが発生してしまうのでしょうか。 以上、よろしくお願い致します。
- 締切済み
- Visual Basic
- VB2005 DataGridviewのチェックボックス制御について
DataGridviewのチェックボックス列の個々のチェックボックスについて、 Enabledプロパティのような値を設定して、 使用可/不可を制御したいのですが、方法がわかりません。 教えていただけないでしょうか? 最初、DataGridViewCheckBoxCellのVisibleプロパティが 参照/設定できるとヘルプに書いてあったので、 ひとまずこれで代用しようと思ったのですが、 コードを打ち込んだら「参照のみ」といわれ、 仕方なく今はReadOnlyプロパティを使っています。 よろしくお願いいたします。
- 締切済み
- Visual Basic
- vbで似たようなフォームを作るとき
ちょっと、今さらお聞きするのもはずかしいのですが、教えて下さい。 VB2010でWindowsアプリケーションを作っています。 既にあるForm1を使って別のフォームを作ろうとしているんですけど、内容はForm1と9割が同じものです。 これまでは、デザイナーですべてのコントロールをコピーペーストし、次にコードをコピーペーストしていたんですが、多分もっと別のやり方があるんだろうなあ、と思っていました。 「別名で保存」といったような機能もなく、やり方がわかりません。 どなたか教えて下さい。
- 締切済み
- Visual Basic
- 《 Delphi 》 動的なフォーム生成について
プログラムをしていて疑問に思ったのですが、たとえば Form1 := Tform1.create(Application); として、Form1(設計済み)のインスタンスを作って表示させたとします。 ここで、更に Tform1.create を行った場合、Form1の参照先は新しく作ったほうになると思うのですが、古いほうのインスタンスはどうなるのでしょうか?Form1に属するメンバはやはりゴミとして残るのでしょうか。 また、Form1を消去して新たに作り直したい場合は、Form1.Releaseをしてから再度Createすれば問題はないのでしょうか。 実は、Releaseしてから再Createしたところ、Form自体はできたのですが、Form上のImageをCreateする段階でアクセス違反が起きて落ちてしまいまして・・・(Form1にはImageがひとつ乗っており、Form生成時にImageも生成されます)。 ソースを削って原因究明したところ、関係ない変数を代入すると発生したり収まったりして、もしやメモリを蝕んでいる!?とか思ったもので・・・。 思い当たる節がありましたら、ご教授いただければ嬉しいです。
- ベストアンサー
- その他(プログラミング・開発)
お礼
ご回答ありがとうございます。 すごいです! こんな方法があったんですね! 実験してみると、見事に成功しました!! 望んだとおりの結果を得ることが出来、とても感謝しています。 ありがとうございました!!!