• ベストアンサー

C#のFORMについて

C#のFORMについて お世話になります。 .NET C#にて開発しております初心者です。 親Formからボタンを押すと子Form1を開き、 そして、親Formの同じボタンをまた押すと、子Form1が 開かれていれば、子Form1を閉じ、子Form2を開く。 次にまた親Formの同じボタンを押すと、子Form2が 開かれていれば、子Form2を閉じる。 上記内容のコードがうまく書けませんでした。 具体的にどの様に書いたら良いか、 ご教授頂けないでしょうか。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • hiropuri
  • ベストアンサー率55% (24/43)
回答No.1

モードレスダイアログを多用すると、思わぬ落とし穴になる場合が……。 本当に必要な場合以外はモーダルダイアログにした方が、扱い自体が 楽になる場合も多いと思いますよ。 さて回答ですが、これってやり方は多種多様ありますよね。 以下の例は「親Form側にて、現在どのフォームを開いているか管理・判断する」 方法です。手抜きというか、技術的に見るべき点は全くないコードですが、 単純でいいかなぁと思うので……(^^; ※親フォーム側のコード int formNo = -1; // フォーム管理用 Form1 frm1 = null; // フォーム1 Form2 frm2 = null; // フォーム2 private void button1_Click(object sender, EventArgs e) { formNo++; if (formNo > 2) formNo = 0; switch (formNo) { case 0: frm1 = new Form1(); frm1.Show(); break; case 1: if (frm1 != null) { frm1.Close(); frm1.Dispose(); frm1 = null; } frm2 = new Form2(); frm2.Show(); break; case 2: if (frm2 != null) { frm2.Close(); frm2.Dispose(); frm2 = null; } break; } }

miruchoko
質問者

お礼

ありがとうございます。 参考になりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#166246
noname#166246
回答No.2

Form2 fm2; Form3 fm3; private void button1_Click(object sender, EventArgs e) { if ((fm2 != null) && (fm2.Visible == true)) { fm2.Close(); fm3 = new Form3(); fm3.Show(this); } else if ((fm3 != null) && (fm3.Visible == true)) { fm3.Close(); } else { fm2 = new Form2(); fm2.Show(this); } }

miruchoko
質問者

お礼

ありがとうございます。 参考になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Formの制御について

    Formの制御について .NET C#で開発をしております初心者です。 親Formからボタンを押して子Formを開き、その子Formを開いたままで、 また親Formから、違うボタンを押したら別の子Formを開きたいのですが、 最初の子Formを閉じなければ、親FormがActiveになりません。 どの様な記述をしたら宜しいのでしょうか。 ご教授頂きたく、宜しくお願い致します。

  • 子Formからの得た値をtextBoxに表示

    お世話になります。 .NET C#で開発をしている初心者です。 親Form1のReadOnlyにしているtextBox1をダブルクリックしたら、子Form2が表れ、 その中で、ラジオボタンなどで各項目を選択する様になっており、選択した結果の 文字列が、子Form2のReadOnlyにしているtextBox1に表示され、これで良ければ、 決定ボタンであるButton1を押すと、子Form2が閉じられ、元の親Form1のReadOnly にしているtextBox1に子Form2で決定した文字列が表示される様にしたいのですが、 私がやってうまく行かないのは、子Form2で決定した文字列をClassでsetし、親Form1 に制御が移った時に、classからgetしようとしたのですが、 まず、子Form2が閉じられた時、親Form1はtextBox1にダブルクリックしたままの(後の) 状態、つまりカーソルが残ってる状態で、文字列が表示されない。 子Form2が閉じられた時すぐかもしくは、子Form2の決定ボタンであるButton1を押した 時すぐに親Form1のtextBox1に文字列が表示されていて欲しいのですが、その方法が 分からないので、とりあえず、親Form1のtextBox1のLeaveイベントを発生させて文字列 を表示しています。 どなたかご親切な方、ご教授下さいます様、宜しくお願い申し上げます。

  • C#でFormのタイトルバーにボタンを追加したい

    お世話になります。 VS2008でC#のWindosフォームを使ったプログラムを開発しているのですが、 Formのタイトルバーにボタンを追加する方法を教えていただきたいです。 また、そのボタンをクリックされた場合のイベントの拾い方も教えていただけると大変助かります。 よろしくお願いします。

  • C# Formの操作

    Form2 form2 ; // 子 Form Form3 form3 ; // 子 Form private void button1_Click(object sender, System.EventArgs e) { form2 = new Form2() ; this.AddOwnedForm(form2) ; // 親 Form が form2 を所有する form2.Show() ; } private void button2_Click(object sender, System.EventArgs e) { form3 = new Form3() ; this.AddOwnedForm(form3) ; // 親 Form が form3 を所有する form3.Show() ; } 上記のようにボタン一つに対して1つのFormに対する処理をするのではなく,ボタン1つに対して 複数のFormを処理する.つまり 例えば,Form1,2,3とあったとして,Form1のボタンを押してFrom2を開き,そこで何らかの処理を したものをForm1に反映する.または,From3のボタンを押してForm2を開きそこで何らかの処理を 行いForm3に反映する. この場合,Form1とForm3のどちらのFormのボタンが押されたか判断しないといけないと思うのですが,ここの処理がうまくいきません. どちらかのFormのボタンを押してForm2を表示し,どちらかのFormに反映させる所までは出来たのですが,両方の判断材料を入れて,どちらのFormのボタンを押されたか判断する際に,押されなかった方が「null」となりエラーになります. 下記にこの判断部分を掲載いたします.どなたかご教授よろしくお願いいたします. Form1 public int but = 0; public int butt1; public string DB; public string HDB; public Form2 f2 = null; private void mybutton1_Click(object sender, EventArgs e) { butt1 = 1; ・ ・ ・ public int Ye=0; private void button43_Click(object sender, EventArgs e) { butt1 = 0; From2 public partial class Form2 : Form { Form1 f1; Form3 f3; public Form2(Form1 f) { f1 = f; // メイン・フォームへの参照を保存 InitializeComponent(); } public Form2(Form3 f) { f3 = f; // メイン・フォームへの参照を保存 InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { #region int Pin1 = f1.butt1; int Pin3 = f3.butt3; Form3 Form1と基本的には同じです.

  • formで複数のボタンを使いたい

    htmlの問題なので、カテゴリがhtmlかphpか迷いましたがphpで質問します。 htmlにおいて、form中にsubmitボタンを2個置きたいのです(例、修正ボタンと削除ボタン)。普通ならnameで区別しろということになり、飛び先(例えばaction=judge.php)中でnameで分岐させることになると思います。 ところが、現在phpフレームワークベースで開発しており、上記2つの処理を行うphpがすでにあるため、htmlからは、ボタンのactionによりそれぞれ別のphpを呼び出したいのです。以下に擬似コードを示しますが、以下のようにformが2つだと商品コード入力が2つになり、なんともおかしいので困っています。 form method=post action=edit.php input type=text 商品コード, input type=submit 修正 form method=post action=delete.php input type=text 商品コード, input type=submit 削除 質問のように1つのformに対して複数のsubmitを置くか、あるいは2つのformでも上記商品コードが1つであれば問題ないので、もしそのような方法があればご教示をよろしくお願いします。

    • ベストアンサー
    • PHP
  • Accessで入力用全画面Formと検索用子Formを表示させたい。

    こんにちは。 Accessで入力用Formと検索用の小さなFormを表示させたいと思っています。 具体的な動作は下記です。 入力用Form(親)からコマンドボタンを押して、マスタ一覧の別のForm(子)が起動します。 子Form一覧からレコードを選択すると、子フォーム終了と同時に親フォームへ値を設定します。 動作自体は問題ありませんが、 やりたいのは親ホームは全画面として、子フォームをその上に大きさを指定した 小さなウィンドウとして表示させたいと考えています。 親フォームを全画面で、子フォームを起動すると子フォームでサイズ指定(DoCmd.MoveSize)しても 全画面として起動されます。 親フォームを元のサイズとして、子フォームを起動するとサイズ指定が有効になり 画面の大きさは一応指定されます。 しかし、運用のディスプレイサイズがまちまちなので、親画面は全画面(DoCmd.Maximize)として起動し、 その上に小さなフォーム画面を乗せたいです。 色々と試しましたが、上手く行きません。 もし良い方法をご存知の方ご教授頂きたく宜しくお願い致します。

  • c#でのプログラムについて

    c#でのプログラムについて お世話になります。 c#初心者です。今までエクセルVBAでの簡単なプログラム経験があります。 コードファイル(CodeFile1.cs)からフォーム(Form1)を表示させるプログラム(初歩) ですでにいきづまっています。 ネットで見つけた、 「Form1 Form = new Form1();  Form.Show();」 と記述しましたら、下にあるエラー一覧で 「型または名前空間名'Form1が見つかりませんでした。usingディレクティブまたはアセンブリ  参照が不足しています。」と出ています。 なので、コードファイル(CodeFile1.cs)の上の方に 「using System.Windows.Form;」 と追加したのですが、まだエラー内容に変わりはありませんでした。 どうすればフォーム(Form1)を表示させるプログラムが出来るか どなたか、お教え頂きたく宜しくお願い致します。

  • Form1で宣言したインスタンスをForm2で使う

    開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが、あるフォームで宣言したインスタンスを別のフォームで使う方法がわかりません。具体的にソースコードで説明すると using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace tesuto {   public partial class Form1 : Form   {     class Car     {       public int a;     }     public void Form1_Load(object sender, EventArgs e)     {       Car bike = new Car();//ここで宣言したインスタンスを       bike.a = 10;       Form2 fm2 = new Form2(this);       fm2.Show();     }   }   public partial class Form2 : Form   {     public void Form2_Load(object sender, EventArgs e)     {       int b;       b = bike.a;//ここでこのように使いたい     }   } } ということです。 前も似たような質問をさせていただき、たくさんの回答をいただいたにも関わらず自分のプログラム能力が低く、理解できませんでした><。なのでよければ、回答は言葉だけではなくこの上のソースコードを基にして(コピペ貼り付けなどで)、すこしでいいですのでソースコードを書いていただけませんでしょうか。 また、プログラミングを初めてまだ間もないので、すこし初心者向けでお願いします。 質問する側なのに色々要求をして申し訳ないのですが、もし御面倒でなければ御回答をお待ちしております。 よろしくおねがいします。 

  • FormのsubmitでFormの内容がnull

    以前次のような質問をさせていただきました。 まだ解決できなく、再び本日発生しましたので、もう一度質問させていただきました。 クライアントからFormのsubmitで送られてくるデータ(Formの中のデータ)が欠落(全てnull)する現象が、ときどき起きています。 原因として考えられることを教えていただきたく存じます。 本日の症状は、 画面Aから画面Bに遷移するためのボタンを押し、submitしましたところ、Formの内容がnullのリクエストとFormの内容が正しくセットされているリクエストが連続してサーバーに届きました。 Formの内容がnullのリクエストはエラーとなり、正しくセットされているリクエストは正常終了しています。 よろしくご教授ください。 余談ですが、以前、知識不足から、ConnectionPoolをオーバーフローさせたことがあり、このコーナーで教えていただき、解決した経験があります。 JAVAもJSPも初心者です。 よろしくご指導のほどお願いします。

  • Form_Load と Form_Activate のタイミング

    あるデータ入力アプリを作っています。 親フォーム(Form0)で番号を決め、子フォーム(Form1,Form2,Form3,Form4) でデータ入力し、それぞれの子フォームを出るとき(Unload Me) に、変数にsaveしています。それを親フォーム(Form0)で登録を選択したとき、入力データをチェックしてDBに格納しています。 すでにDB格納済のデータの場合、親フォームでDBから変数に読み込み、子フォームのForm_Loadで展開しています。 そこで困っているのは、親と子のフォームを行き来するときにデータの表示で前のが残っていたり、消えてしまったりします。 Form_LoadとForm_Activateを通過するタイミングが、ちゃんと理解できていないためコードの記述位置が不適切なのだと思います。 Form_Load と Form_Activate の実行タイミングについて、お教えください。