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

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

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

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

Visual Studio

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

Q&A

解決済

3回答

2834閲覧

文字列変換 button処理 エラー

Saya_A

総合スコア76

C#

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

Visual Studio

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

0グッド

0クリップ

投稿2016/08/08 15:18

編集2016/08/08 15:47

現在入力された値を別な場所に保存するようにしています。

private void BattleShip_onClick(object sender, EventArgs e) { int Level = int.Parse(textBox1.Text);

一つで実行していた場合正孔していたのですが、数を増やしたらエラーが出るようになりました。

イメージ説明

なおこのエラーがあてられる場所は毎回変わったりします。

どこにエラーがあるか、ほかに乗せたほうがいい部分があればのせるのでお願いします。

追記

スタックトレースというのはこれでよろしいでしょうか?
イメージ説明

// textBox2 // this.textBox2.Location = new System.Drawing.Point(36, 116); this.textBox2.Name = "textBox2"; this.textBox2.Size = new System.Drawing.Size(34, 22); this.textBox2.TabIndex = 2; this.textBox2.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Level_KeyPress); //

これです。ほかのTextBoxもtextboxのナンバー以外同じものが多数あります

イメージ説明
このような感じで入力しています。
このあと更新ボタンを押すと、ほかのTextboxにもあるすべての入力された値をtextbox(数字)にそれぞれ格納するようにしています。

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

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

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

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

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

iwamoto_takaaki

2016/08/08 15:31

スタックトレースはどのようになっていますか?差し支えない範囲で載せてくだい。
Saya_A

2016/08/08 15:34

申し訳ありません。スタックレートというものの表示方法が分かりません<m(__)m>捜索しています。
Panzer_vor

2016/08/08 15:36

textBox2.Textを見せていただきたいです。 textBox2.Textの入力値が数値変換できない値なのではないかなと思うので。 例えば先頭に「0」の付いた数値、数値がカンマ区切りされてるとかないですか?
Panzer_vor

2016/08/08 15:43

すいません、言葉足りずでしたね。 多分ですが実行された際に「textBox2」に当たる入力項目に数字か何か入力されてますよね?その値を確認したいです。
Panzer_vor

2016/08/08 15:50

なるほど状況分かりました、多分未入力の項目で落ちてますね。 回答の方に記載しときます。
guest

回答3

0

画面状況を見るに推測ですが、
恐らく数字を入力していないテキストボックスにて上記エラーが出ていると思います。

その原因としては未入力のテキストは**「""」(空文字)**が設定されており、
これが数値に変換できないよと怒っているのが今回のエラーです。

そのため対策としては以下の感じとなります。

C#

1 int level = 0: 2 if (!string.IsNullOrEmpty(textBox2.Text)) { 3 // テキストボックスに入力がある場合 4 level = int.Parse(textBox2.Text); 5 }

ただ上記では数値以外の入力があると結局例外エラーとなるので、
前回の回答時に提案させていただいたint.TryParseメソッドの利用も検討した方が良いかもしれません。

投稿2016/08/08 15:57

編集2016/08/08 16:05
Panzer_vor

総合スコア1636

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

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

0

ベストアンサー

基本的にこのエラーは整数への変換に失敗しているため出ています。

先頭マイナスの数字以外の文字が入力されていたり、何も入力されていない場合に発生します。
きちんとすべてのテキストボックスに数字を入れてもらうのが一番なんですが、ユーザーがそれに従ってくれるとは限らないので、プログラム側では

  • テキストボックスから数値に変換する個所をtry-catchしてcatchした(=エラーが起きた)ら、数値を入力してくださいとメッセージをだす
  • 数値に変換する前に数字以外が入っていないかテキストボックスをチェックする

入ってないときエラーを出すか、規定値(0とか)の扱いにして続行するかはプログラム次第です。

などを行う事が多いです。(あとそもそも数字しかいれられないテキストボックスを用意するとか、他にもやりようはたくさんあるんですけどね)

簡単な例を示しておきます

  • try-catchで括る

c#

1try{ 2 int NagatoLevel = int.Parse(textBox1.Text); 3 int MutuLevel = int.Parse(textBox2.Text); 4}catch(FormatException ex){ 5 MessageBox.Show("数値が正しく入力されていない場所があります"); 6 return; 7}
  • 入力チェックする

チェックの仕方もいろいろあるんですが、ここでは TryParseを使ってみます。

c#

1int NagatoLevel = 0; 2int.TryParse(textBox1.Text, out NagatoLevel); 3// 変換がうまくいくなら、NagatoLevelにその値がはいる。失敗したならNagatoLevelの値は変わっていない。 4 5// TryParseはうまくいったかを true/falseで返すので以下の様にも書ける 6int MutuLevel = 0; 7if(!int.TryParse(textBox2.Text, out MutuLevel)){ 8 // TryParseがfalseなら( !false は true なので) 9 MessageBox.Show("Mutuの数値が正しくありません") ; 10 MutuLevel = 1; // 続行するなら適当な値を。続行したくないなら、returnしてしまう。 11}

投稿2016/08/08 15:48

flied_onion

総合スコア2604

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

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

Saya_A

2016/08/08 15:51

ありがとうございます!! 今自分でもやってみて、すべての入力欄に入力した場合はエラーが発生しませんでした。 入力されていない場所を規定値(0)として扱うようにしたいのですが、どうすればいいでしょうか(o_ _)o))
flied_onion

2016/08/08 15:55

上の例の TryParse使っている方を使えばできると思います。 TryParseの上の方は最初に変数宣言でNagatoLevelを0にしているので0のままのこり、下の方だと、エラーのとき1を設定してます。 0であればTryParseの最初の例を使えばよいかと。
Saya_A

2016/08/08 15:56

ありがとうございます!! やってみます、 ながながとありがとうございました!<(_ _)>
guest

0

ごめんなさい。手元のVisualStudioのバージョンが違うので、想像の範囲でしか答えられません。

エラー内容からするとDateTime.Parseでエラーしているようなメッセージになっています。
示されたコードからは、出てこないようなメッセージです。

ヒント:
・スタックトレースには、例外の場所が呼び出しの履歴とコードのファイルの行番号で示されています。
(重要な情報なので、ちゃんと読めるようになっておくことが大切です。)

・デバッグ状態であれば、変数にマウスオーバーすればどのような値を入力したか判ります。

・コンパイルは問題ありませんか?「前回成功したやつで実行する?」って聞かれて「はい」と答えると全然違うコードが実行されます。

投稿2016/08/08 16:13

iwamoto_takaaki

総合スコア2883

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問