質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

517閲覧

List型により指定の数だけフォームを生成したい

sheephuman

総合スコア112

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/06/17 11:05

付箋アプリを開発中です。
ジェネリックを用いて動的に共通のForm1型の配列を生成し、For文により指定の数だけ呼び出そうと試みました。

C#

1private void Form1_Load(object sender, EventArgs e) 2 { 3 int iOpenedSubForms = Properties.Settings.Default.SettingsFormCount; 4 //設定値から割り当て 整数値 5 6 List<Form1> frm = new List<Form1>(); 7 //Listクラスによる動的なForm型配列 8 9 10 // 指定した数分の子フォームを開く 11 for (int i = 0; i < frm.Count; i++) 12 { 13 frm.Add(new Form1(iOpenedSubForms)); 14 //Form1にはフォーム数を表す引数を割り当てています 15 16 //または 17 // frm[i].Show(new Form1(iOpenedSubForms)); 18 19 } 20 }

実行結果
どのようにしても1つのフォームしか開くことが出来ず、ちょっと困っています。何が問題なのでしょうか?
配列宣言をfor文のスコープ内に入れてみたりもしましたが変化はありませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Form1_LoadでForm1自身を生成・表示するとそれがうまく動いたとしてForm1が再現なく生成・表示されてしまうことになりませんか?

とりあえずこんなふうにしてみてはいかがでしょうか。

C#

1public class Form1 : Form { 2 static const int TotalFormCount = 2; 3 static List<Form1> forms = new List<Form1>(); 4 5 int id; 6 7 Form1() { 8 this.id = forms.Length; 9 forms.Add(this); 10 //位置調整等々は省略 11 } 12 13 void Form1_Load(...) { 14 if (id != 0) return; // 最初のFormでない場合何もしない 15 for (int i = 1; i < TotalFormCount; i++) { 16 Form1 form = new Form1(); 17 form.Show(); 18 } 19 } 20}

投稿2017/06/17 11:47

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sheephuman

2017/06/17 12:01

回答ありがとうございます。 言われてみればその通りでしたね(;・∀・) Sticky noteの処理を摸そうと頑張ってるんですが、かなり大変でして・・・ 一体どうやってデータ管理してるのか気になっています。
guest

0

自己解決

一応自己解決しました。add(追加)してからshowするのですね@-ᴥ-@

private void button1_Click(object sender, EventArgs e) { int iOpenedSubForms = 5; List<Form> frm = new List<Form>(); // 指定した数分の子フォームを開く for (int i = 0; i < iOpenedSubForms; i++) { frm.Add(new Form1(iOpenedSubForms)); //追加 frm[i].Show(); //表示 }

投稿2017/06/17 11:58

sheephuman

総合スコア112

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2017/06/17 12:02

Addするかどうかは本質とは関係なく、肝心なのはnewしてShowすることだと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問