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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

5回答

4754閲覧

C# 処理の繰り返し

Saya_A

総合スコア76

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

2クリップ

投稿2016/08/10 05:00

現在チェックボックスにチェックがあったら1、なければ0のような処理を書いています。
この処理をチェックBox1-177と、膨大な数なため、forで回したいと思うのですが、エラーになって実行できません。どうすればよいでしょうか

int[] M = new int[177]; private void checkBox1_Click(object sender, EventArgs e) { if (M[1] == 0) { M[1] = 1; } else { M[1] = 0; } }

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

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

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

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

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

guest

回答5

0

こんにちは。

177個のチェックボックスをフォームデザイナを使って手で配置されたのでしょうか?(たいへんでしたね。)
それらを配列にしてfor文で自動生成すれば、チェック状態を取得する時にもfor文で簡単に回せます。
コントロールを実行時に作成するが参考になります。

Contolsプロパティを使ってフォーム上の全てのコントロールを列挙できます。
それを使って全てのチェックボックスをList等へ取り出すことも可能です。
Form上の全てのコントロールを取得が参考になります。

一度リストや配列のようなfor文で検索できる形式で取り出せば、後は自由に操作できます。

投稿2016/08/10 07:34

Chironian

総合スコア23272

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

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

Saya_A

2016/08/10 12:47

解答ありがとうございます。 コントロールを作ってみたのですが、これを使う場合デザイナを使って作ったチェックボックス等はすべて削除しなければないでしょうか。( ;∀;)
Chironian

2016/08/10 13:00

コントロールをプログラムで作って貼り付ける場合は、当然ですがデザイナで作ったものは削除しないと重なってしまいます。 1つ1つ細かい設定するのもプログラムで行うことになるので以外に手間がかかると思います。 1つ1つ設定がそこそこ異なるようでしたら、Form上の全てのコントロールを取得する方向の方が楽だろうと思います。 いずれにせよ、トライする前には元に戻せるようにプロジェクト毎バックアップしておくことをお勧めします。
guest

0

int[] M = new int[177];

int[] M = new int[178];
にすると、動くと思います。

投稿2016/08/10 12:34

m.h

総合スコア149

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

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

0

System.Collections.Genericが使えるなら
フォーム作成の時かロード時にListに追加したら回しやすいし
チェック情報以外もみやすいかも

using System.Collections.Generic;

List<CheckBox> lsChk=new List<CheckBox>(); public Form1() { InitializeComponent(); lsChk.add(CheckBox1) lsChk.add(CheckBox2) 繰り返し~~~ }

// 出力する
private void button2_Click(object sender, EventArgs e)
{
forearch(CheckBox cb in lsChk)
{
Console.WriteLine(CheckBox.Name + " " + (cb.Checked ? "1":"0") );
}
}

もしくは
forearch(int i in M)
{
i=0;
}
で初期化するか
でもintって生成された時から初期値が0だったような…

投稿2016/08/10 07:34

t-kimura

総合スコア13

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

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

Zuishin

2016/08/10 07:40

> でもintって生成された時から初期値が0だったような… その通りでした。他の言語と取り違えたようです。
guest

0

配列の一例として
ただ、177個の配置を考えるとfor文で配置した方が楽な気がします。

条件としてform上に CheckBox0,CheckBox1,...,CheckBox176を配置しておく。


public partial class Form1 : Form
{
//配列
CheckBox[] checkBox;
int[] M;

public Form1() { InitializeComponent(); int ControlCount = 177; checkBox = new CheckBox[ControlCount]; M = new int[ControlCount]; for (int i = 0;i< ControlCount; ++i) {

//コントロール名で探してセット
checkBox[i] = (CheckBox)this.Controls.Find(string.Format("CheckBox{0}", i),false).First();
//イベント追加
checkBox[i].CheckedChanged += new EventHandler(checkBox_CheckedChanged);
}
}

//チェックイベント private void checkBox_CheckedChanged(object sender, EventArgs e) { int num = Array.IndexOf(checkBox, sender); if (checkBox[num].Checked) { M[num] = 1; } else { M[num] = 0; } } }

投稿2016/08/10 08:25

編集2016/08/10 08:52
think.fuku

総合スコア12

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

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

0

M[1] には何も入っていないので if (M[1] == 0) の部分でエラーになります。
if (((CheckBox)sender).Checked) としてみたらどうでしょうか?
###訂正
C# は宣言だけで初期化されるので、誤りを書きました。

投稿2016/08/10 06:05

編集2016/08/10 07:44
Zuishin

総合スコア28660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問