■96194 / inTopicNo.6) |
Re[2]: C# comboBoxに値を入れる |
□投稿者/ 川崎 (4回)-(2020/10/29(Thu) 13:54:04)
|
■No96192 (魔界の仮面弁士 さん) に返信 > 2020/10/29(Thu) 11:52:10 編集(投稿者) > > ■No96189 (川崎 さん) に返信 >>構造体を使い、動的に作成したcomboBoxに値を代入するという事をしたい >>と思っています。 > > class の方が望ましい気がしますが、struct でないと駄目ですか? > https://dobon.net/vb/dotnet/beginner/whenusestruct.html > > >>public string[,] category; > 二次元配列だと今回の要件では扱いにくいので、自分ならば > string の一次元配列の配列を採用します。 > public string[][] category; これも試してみましたが、初期化子が適当ではないという様な内容のエラーが出てしまい 断念しました。 出来れば、こちらの方が扱いやすいのでいいと思います。
> > とりあえず今回は 2 次元配列で話を進めますが…データは 2×4 の 8 要素なのですよね? > ComboBox は 3 つあるので、数が合致しませんが、どのように繋ぎたいのでしょうか?
1つのcomboBoxのアイテムに {}1つがまるっと入るイメージです。 なので、配列の中身は下記の様になります。 { "京都", "伏見", "祇園", "四条" }, { "どんぐり", "おいなりさん", "歩", "湯葉" },{"大丸","伊勢丹","高島屋","三越" } 1つ目のcomboBoxのアイテムは{ "京都", "伏見", "祇園", "四条" } 2つ目のcomboBoxのアイテムは{ "どんぐり", "おいなりさん", "歩", "湯葉" } 3つ目のcomboBoxのアイテムは{"大丸","伊勢丹","高島屋","三越" } という感じです。
> >>上記の構造体を値として持つcomboBoxが 3個作成される > いいえ、ComboBox は 1 つも作成されていませんよ。 > new ComboBox[] と new ComboBox() は別物なのでご注意を。 > > >> for(int i = 0; i < 3; i++) >> { >> ComboBox[] combo = new ComboBox[3]; >> combo[i].Items.AddRange(); > > これだと、「ComboBox を 3 つ格納できる配列」が > ループのたびに生成されてしまいます。 > combo 変数の宣言はループの外で行いましょう。 > > > また、これは「ComboBox の配列」を作成しただけであり、 > 肝心の「new ComboBox()」がありません。 > new ComboBox[3] というのは、3 つの ComboBox を格納できる > 配列を用意したわけであり、combo[0] , combo[1] , combo[2] という > 個々の要素は null のままです。 > > ComboBox をセットするために > combo[i] = new ComboBox() { Name = "combo" + i }; > などを用意しましょう。 > > >>combo[i].Items.AddRange(); > 丸括弧の中身が空欄になっているので、コンパイルエラーになりますね。 > .Items.Add や .Items.AddRange は、格納すべきデータを必要とします。 > > もし、配列が 2×4 ではなく 3×4 なら、3 つの ComboBox のために > たとえば下記のようなコードを用意することができます。 > > for (int j = 0; j <= miyabi.category.GetUpperBound(1); j++) > { > combo[i].Items.Add(miyabi.category[i, j]); > } > > >>combo[i].Left = a + 120; >>combo[i].Top = a + 120; > 変数 a の値はループ中で変更されていませんから、 > このままでは、3 つの ComboBox がすべて同一座標に重なってしまいますよ。 > 意図的にそうしているわけでは無ければ、座標をずらした方が良いでしょう。 > > たとえば > combo[i].Top = a * count + 120; > とか > combo[i].Top = (a + 120) * i; > とか > combo[i].Top = a + 120; > a += combo[i].Height; > などのように。
|
|