同じような処理を何度も書いているため、
新しくメソッドを作って呼び出そうと思っています。
呼び出し元では処理は同じなのですが、対象のラベル名、テキストボックス名が違うため
それらを引数として扱おうと思っています。
C#
1if (DateTime.Now.CompareTo(dateTime) >= 0) 2{ 3 label11.Text = ""; 4 comboBox1.BackColor = Color.White; 5 comboBox2.BackColor = Color.White; 6 comboBox3.BackColor = Color.White; 7} 8else 9 { 10 label11.Text = "生年月日が不正です。"; 11 comboBox1.BackColor = Color.MistyRose; 12 comboBox2.BackColor = Color.MistyRose; 13 comboBox3.BackColor = Color.MistyRose; 14 return; 15 } 16} 17//郵便番号の判定 18if((yuubin1 == "" && yuubin2 == "")|| (yuubin1 != "" && yuubin2 != "")) 19{ 20 label12.Text = ""; 21 textYuubin1.BackColor = Color.White; 22 textYuubin2.BackColor = Color.White; 23} 24else 25{ 26 label12.Text = "郵便番号が不正です。"; 27 textYuubin1.BackColor = Color.MistyRose; 28 textYuubin2.BackColor = Color.MistyRose; 29 return; 30 } 31
見てもらうとわかるように
label内を””にしたり、Backcolorを変更することは同じです。
メソッドは以下の2つ作りたいと思っています。
・labelを空白にする & BackColorを白にする
・labelにメッセージを表示する & BackColorを赤にする
アドバイスをいただけないでしょうか。
よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/17 00:48
回答2件
0
ベストアンサー
多分悩むのは、背景色のほうだと思います。基底クラスの型で受けとる関数にすれば、comboboxもtextも代入できます。当然個数が違うので配列みたいなデータ形式にする。
csharp
1private void Reset(TextBox text, IEnumerable<Control> Controls) 2//private void Reset(TextBox text, Control[] Controls) こんなんでもいいです。もし分かりにくければ 3{ 4 text.Text = string.Empty; 5 foreach(var ctrl in Controls) 6 { 7 ctrl.BackColor = Color.White 8 } 9} 10private void Raise(TextBox text, string message, IEnumerable<Control> Controls) 11{ 12 text.Text = message; 13 foreach(var ctrl in Controls) 14 { 15 ctrl.BackColor = Color.MistyRose; 16 } 17}
投稿2019/01/16 08:20
編集2019/01/16 09:03総合スコア12705
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/16 08:50
2019/01/16 09:02
2019/01/17 00:55
2019/01/17 01:03
2019/01/17 01:12
2019/01/17 01:18
2019/01/17 02:43
2019/01/17 02:45
2019/01/17 02:49
2019/01/17 03:51
2019/01/17 03:56
2019/01/17 04:00
2019/01/17 04:09
2019/01/17 04:35
2019/01/17 04:39
2019/01/17 04:45 編集
2019/01/17 04:54
2019/01/17 05:00
2019/01/17 05:11
2019/01/17 05:11
0
ラベル名、テキストボックス名を渡すより、背景色と文字列を返す方が汎用性があるんじゃないかと思います。
C#
1 2private void button1_Click(object sender, System.EventArgs e) 3{ 4 5 // 呼び出し側 6 string[] strs = { yuubin1, yuubin2 }; 7 string msg; 8 foreach (var s in strs) 9 { 10 msg = Result(s, out Color backColor); 11 label12.Text = msg; 12 textYuubin1.BackColor = backColor; 13 textYuubin2.BackColor = backColor; 14 } 15 16 // DatetimeはTryParseで変換できるか判定できる 17 DateTime dt; 18 if (DateTime.TryParse(dateTime, out dt)) // 変数dateTimeはstring型 19 { 20 // できる 21 } 22 else 23 { 24 // できない 25 } 26 27} 28 29// メソッド 30private string Result(string str, out Color backColor) 31{ 32 string msg; 33 34 if (String.Empty(str)) 35 { 36 backColor = Color.MistyRose; 37 msg = "不正な値です。"; // msg = Properties.Resources.(Message); でリソース管理でもいいと思います。 38 } 39 else 40 { 41 backColor = Color.White; 42 msg = string.Empty; 43 } 44 45 return msg; 46} 47 48 49 50
ついでにですが、
if((yuubin1 == "" && yuubin2 == "")|| (yuubin1 != "" && yuubin2 != ""))
は
if (yuubin1 != "" && yuubin2 != "")
でやりたいことができると思います。
生年月日以外に日付を判定するものがあるなら、空白検知のメソッドと同じようにメソッドを作ってもいいと思います。
一つ一つ多分コントロールの横にラベルを置いているんだと思うのですが、
冗長になってしまうので、シンプルに不正な値です、だけでも分かるんじゃないかなと思うのが個人的な意見です。
投稿2019/01/16 10:17
総合スコア31
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。