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

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

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

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

Q&A

解決済

3回答

7993閲覧

同じ処理を繰り返すときの簡素化

maam

総合スコア55

C#

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

0グッド

0クリップ

投稿2019/01/10 04:02

C#でプログラムを作成しています。
VisualStudioで電話番号を入力するテキストボックスをふたつ用意しています。
ふたつ用意している理由は、例えば番号が123-4567だったら
TextBox1に123
TextBox2に4567 と入力するためです。
二つのTextBoxには数字以外の入力を制限しています。

//電話番号の入力の制限(数字のみ可) private void text1_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar < '0' || '9' < e.KeyChar) && (e.KeyChar != '\b')) { e.Handled = true; //いま入力されたものを無視する } } private void text2_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar < '0' || '9' < e.KeyChar) && (e.KeyChar != '\b')) { e.Handled = true; //いま入力されたものを無視する } }

今このようにコードを書いているのですが、同じ処理を2回繰り返さずに
簡単にまとめる方法はありますか?
ご回答宜しくお願いします><

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

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

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

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

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

guest

回答3

0

ベストアンサー

双方のTextBoxのイベントを同じハンドラ関数にしてしまえばいいです
ハンドラ関数では、引数のsenderでどちらのTextBoxのイベントなのかが判定できます

投稿2019/01/10 04:05

y_waiwai

総合スコア87719

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

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

maam

2019/01/10 04:18

y_waiwaiさん ご回答ありがとうございます。 同じハンドラ関数にするとはどういうことでしょうか。senderに判定する指示をしてあげるんですか?
y_waiwai

2019/01/10 04:24

VisualStudioを使ってるなら、プロパティウィンドウで、TextBoxのKeyPressイベントの欄で、たとえばtext1_KeyPressに、双方変えてしまいます そうすれば、text2_KeyPressの関数は削除できます
y_waiwai

2019/01/10 04:30

んで、引数のSenderは、イベントを発行したコントロールが入ってきますんで、 ((TextBox)sender).name をみれば、TextBox1、TextBox2 の文字列でどっちかがみれますね
maam

2019/01/10 04:32

TextBox2のKeyPressイベントをtext1_KeyPressに変更すると実行できました!ありがとうございます!
guest

0

VisualStudioなら、同じ処理をしている場所を選択して、
ctrl+. を押してメソッドの抽出とすると、関数として切り出してくれます。
それを利用して関数をまとめるといいでしょう

他にも、text1_KeyPressとtext2_KeyPressの2つを用意していますが、
全く同じ処理で良いのなら、text2に対してもtext1_KeyPressの関数を呼び出すようにすればいいと思います

多分、どっかに「text2.KeyPress += text2_KeyPress;」ってのがあるはずなので、
そこをtext1_KeyPressに書き換えればいいです

投稿2019/01/10 04:15

izmktr

総合スコア2856

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

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

0

要は「複数のコントロールでイベントを共有したい」ということだと思いますが、
下記のような記事が参考になると思います(探せばすぐ出てきます)

投稿2019/01/10 04:18

m.ts10806

総合スコア80765

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問