89502


**開発環境**  
Visual studio2022  
Windows10  
.net core 6.0.4

**やりたいこと**  
viualstudioを使い C#で5つの数値を昇順にソートするアプリを作成しています。  
左の5つのテキストボックスに入力した数値を右の出力欄に表示します。  
また、入力範囲外（-2147483648より小さい数か2147483647より大きい数）や  
未入力のテキストボックスがあった場合は下のスペースにメッセージが出るような  
仕様にしたいと考えております。  
[![画像の説明をここに入力](https://i.stack.imgur.com/DHG4B.png)](https://i.stack.imgur.com/DHG4B.png)

**問題点**  
以下の写真のように、入力未入力の場合に「5つの数値をすべて入力してください」  
といったメッセージが出るのですが、  
int型配列のデフォルト値の0が出力欄に表示されてしまいます。  
メッセージ文が出るときは出力欄に何も表示されないようにしたいのです。  
基本的なことでのミスかもしれませんが教えて頂けるとありがたいです。

また、私のコードでよろしくないコーディングの仕方やもっとこうした方がよいという  
のがあれば有識者の方々にぜひおしえてほしいです。  
よろしくお願いいたします。  
[![画像の説明をここに入力](https://i.stack.imgur.com/zpf56.png)](https://i.stack.imgur.com/zpf56.png)

**試したこと**  
下記のコードのように空文字で初期化をしようとしましたが、うまくいきませんでした。  
sortanswer.Text = "";

**実際のコード**

[code]

    namespace sortprogram
    {
        public partial class Form : System.Windows.Forms.Form
        {
            public Form()
            {
                InitializeComponent();
            }
    
    
            private void button_Click(object sender, EventArgs e)
            {
                sortanswer.Text = "";
                exc.Text = "";
    
                int[] num = new int[5];
                try
                {
                    num[0] = int.Parse(textbox1.Text);
                    num[1] = int.Parse(textbox2.Text);
                    num[2] = int.Parse(textbox3.Text);
                    num[3] = int.Parse(textbox4.Text);
                    num[4] = int.Parse(textbox5.Text);
                    
                }
    
                //数値未入力のテキストボックスがある場合excにメッセージを表示する
                catch (FormatException)
                {
                    String msg = "5つの数値をすべて入力してください。";
                    exc.Text = msg;
                    
                }
    
                //範囲外の数値入力がある場合excにメッセージを表示する
                catch (OverflowException)
                {
                    String msg = "範囲内の数値を入力してください。";
                    exc.Text = msg;
                    
                }
    
    
                for (int i = 0; i < num.Length; i++)　
                {
                    for (int j = i + 1; j < num.Length; j++)　
                    {
                        if (num[i] > num[j])
                            {
                            int x = num[j];
                            num[j] = num[i];
                            num[i] = x;
                        }
                    }
                }
    
    
               
                for (int i = 0; i < num.Length; i++)　
                {
                    sortanswer.AppendText(num[i].ToString());
    
                       
                    if (i < 4)
                    {
                        sortanswer.AppendText("\r\n\r\n");
                    }
                }
            }
    
    
            //キーボード入力の制限をする
            private void textbox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                //バックスペースの入力を可能にする
                if (e.KeyChar == '\b')
                {
                    return;
                }
                //マイナスキーの入力を可能にする
                if (e.KeyChar == '-')
                {
                    return;
                }
    
                //数値0～9以外のキーは入力不可にする
                if ((e.KeyChar < '0' || '9' < e.KeyChar))
                {
                    e.Handled = true;
                }
            }
    
            //残りの4つのtextboxも入力制限をする。
            private void textbox2_KeyPress(object sender, KeyPressEventArgs e)
            {
                textbox1_KeyPress(sender, e); //textbox1_KeyPressメソッドを呼び出す
            }
    
            private void textbox3_KeyPress(object sender, KeyPressEventArgs e)
            {
                textbox1_KeyPress(sender, e); //textbox1_KeyPressメソッドを呼び出す
            }
    
            private void textbox4_KeyPress(object sender, KeyPressEventArgs e)
            {
                textbox1_KeyPress(sender, e); //textbox1_KeyPressメソッドを呼び出す
            }
    
            private void textbox5_KeyPress(object sender, KeyPressEventArgs e)
            {
                textbox1_KeyPress(sender, e); //textbox1_KeyPressメソッドを呼び出す
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2022-06-21T07:03:40.593
89501
2022-06-21T07:30:15.593
47546
question
c# visual-studio
int配列のデフォルト値0が出力欄に表示されてしまう。


例外処理(`catch (OverflowException) {}`など)の下に記述されているコードは、例外発生時にも実行されてしまいます。

例外メッセージ文が出るときは出力欄に何も表示されないようにしたい場合は、例外処理の下の行に書かれている2つのfor文をtryブロックの末尾にカット＆ペーストで移動してください。  
上記の変更によって、tryブロックの`num[0] =
int.Parse(textbox1.Text);`などで例外発生した瞬間にcatchブロックにジャンプします。  
つまり例外発生した行以降のtryブロックをスキップするため、出力欄の処理を実行しなくなります。


CC BY-SA 4.0
2022-06-21T07:30:15.593
89502
2022-06-21T07:30:15.593
9820
89501
answer