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

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

ただいまの
回答率

89.09%

プログラムを簡潔で分かりやすく組むにはどのようにすればよろしいでしょうか?

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,939

fender0131

score 121

いつも大変お世話になっております。

現在、ツールボックスのコントロールと稲妻マークのイベント
を主に利用しプログラムを組んでいたのですが、だんだんわかりずらいプログラムになってきてしまったので、ツールボックスとイベントについてご教授頂けませんでしょうか?

簡単にこんなプログラムを作ってみました。

・TextboxにEnterでアクセスした際、色を紫に変えます。
・TextboxからLeaveで抜ける際、色を白に戻します。
・Buttonをクリックした際、Textboxに入力されている数値が足されていきます。

この際、まとめられそうな、箇所が何か所もあると思います。
どのようにプログラムを組むことで、簡潔で分かりやすいプログラムを組むことができるのでしょうか?
プロパティ横の稲妻マークでイベント等は起こさない方がいいのでしょうか?

初歩的な質問で申し訳ないのですが、どなた様かご教授ご鞭撻の程よろしくお願い致します。

イメージ説明

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication11
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        int sum;


        // Enterイベント 

        private void textBox1_Enter(object sender, EventArgs e)
        {
            textBox1.BackColor = Color.Magenta;
        }

        private void textBox2_Enter(object sender, EventArgs e)
        {
            textBox2.BackColor = Color.Magenta;
        }

        private void textBox3_Enter(object sender, EventArgs e)
        {
            textBox3.BackColor = Color.Magenta;
        }

        private void textBox4_Enter(object sender, EventArgs e)
        {
            textBox4.BackColor = Color.Magenta;
        }


        // Leaveイベント

        private void textBox1_Leave(object sender, EventArgs e)
        {
            ColorReset();
        }

        private void textBox2_Leave(object sender, EventArgs e)
        {
            ColorReset();
        }

        private void textBox3_Leave(object sender, EventArgs e)
        {
            ColorReset();
        }

        private void textBox4_Leave(object sender, EventArgs e)
        {
            ColorReset();
        }


        // Clickイベント

        private void button1_Click(object sender, EventArgs e)
        {
            sum = sum + int.Parse(textBox1.Text);
            textBox5.Text = sum.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            sum = sum + int.Parse(textBox2.Text);
            textBox5.Text = sum.ToString();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            sum = sum + int.Parse(textBox3.Text);
            textBox5.Text = sum.ToString();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            sum = sum + int.Parse(textBox4.Text);
            textBox5.Text = sum.ToString();
        }


        // 色初期化

        private void ColorReset()
        {
            textBox1.BackColor = Color.White;
            textBox2.BackColor = Color.White;
            textBox3.BackColor = Color.White;
            textBox4.BackColor = Color.White;
        }
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

それぞれのイベントを一つにし、

private void textBox_Enter(object sender, EventArgs e)
 {
   TextBox s = (TextBox)sender;

     switch(s.Name)
     {
     case "textBox1": s.BackColor = Color.Magenta; break;
     case "textBox2": s.BackColor = Color.Magenta; break;
     }
 }

やることが同じであれば、

private void textBox_Enter(object sender, EventArgs e)
 {
     ((TextBox)sender).BackColor = Color.Magenta;
 }

これで共通ですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/17 10:04

    お答えありがとうございます。

    private void textBox_Enter(object sender, EventArgs e)
    {
    ((TextBox)sender).BackColor = Color.Magenta;
    }

    こちらの動きを見て、なるほどと思いました。こちらでだいぶプログラムが見やすくなりそうです!!

    大変参考になりました。

    キャンセル

0

object sender, EventArgs e を受け取ってるんだから、それをうまく使えばいいと思うよ!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/17 10:03

    お答えありがとうございます。
    正直、「object sender, EventArgs e」の中身を深く考えずにプログラムを作成していました。
    勉強し直し、「object sender, EventArgs e」の大切さに気付きました!!
    参考になりました。

    キャンセル

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

  • ただいまの回答率 89.09%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる