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

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

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

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

4回答

7021閲覧

C# Formアプリ NameプロパティとTagプロパティの違い

fia

総合スコア57

C#

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2019/10/20 21:34

質問内容

Formアプリを作成していて、複数のコンポーネントに同じイベントを設置し、オブジェクトの名前でswitch するようにしようとしています。
コンポーネントのプロパティにNameとTagがありますが、この2つの違いは何なのでしょうか。

使い分けなどがありましたらご教授をお願い致します。

該当のソースコード

C#

1private void TextChanged(object sender, EventArgs e){ 2 switch (((TextBox)sender).Name.ToString()){ 3 case "TextBox1": 4 /*処理*/ 5 break; 6 case "TextBox2": 7 /*処理*/ 8 break; 9 } 10}

C#

1private void TextChanged(object sender, EventArgs e){ 2 switch (((TextBox)sender).Tag.ToString()){ 3 case "TextBox1": 4 /*処理*/ 5 break; 6 case "TextBox2": 7 /*処理*/ 8 break; 9 } 10}

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

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

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

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

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

guest

回答4

0

リファレンス読む習慣付けましょう。

Name
Tag

投稿2019/10/20 23:15

gentaro

総合スコア8949

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

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

0

既に他の方も書かれていますが、Name はオブジェクトとして、少なくともそのスコープ内で一意である必要があります。
※同じフォーム上には同じ Name のオブジェクトを複数置けない

一方 Tag は、任意のオブジェクトを設定することができます。「タグ」の名の通り、あるオブジェクトに紐付けておきたい何かをくっつけるためのものです。ですので何を入れても構いませんし、何も入れなくても構いません。どう使うかは自由になっています。
※ただし、使う際には自己責任です

オブジェクト間で連携させたり(相手のオブジェクトを Tag に書き込んでおくなどして情報を保持する)、新しいプロパティを作るほどではないが任意の情報を保持させておきたいときなどに重宝します。

投稿2019/10/20 23:57

tacsheaven

総合スコア13703

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

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

0

ベストアンサー

このようなケースの場合、switch を使うよりも、共通処理を別のメソッドに切り分け、各々のイベントハンドラで対応するほうが適切かもしれません。イベントハンドラはなるべく太らせないようにした方が可読性が高くなるケースが多いと思います。

C#

1private void 共通処理(string text) 2{ 3 MessageBox.Show(text); 4} 5 6private void TextBox1_TextChanged(object sender, EventArgs e) 7{ 8 if (!(sender is TextBox tb)) return; 9 共通処理(tb.Text); 10 // 個別処理 11} 12 13private void TextBox2_TextChanged(object sender, EventArgs e) 14{ 15 if (!(sender is TextBox tb)) return; 16 共通処理(tb.Text); 17 // 個別処理 18}

switch を使う場合には Tag を使わなくても Name で十分です。

C#

1private void TextBox_TextChanged(object sender, EventArgs e) 2{ 3 if (!(sender is TextBox tb)) return; 4 switch (tb.Name) 5 { 6 case "textBox1": 7 case "textBox2": 8 // textBox1, textBox2 の処理 9 break; 10 case "textBox3": 11 // textBox3 の処理 12 break; 13 default: 14 // その他のテキストボックスの処理 15 break; 16 } 17}

Tag には任意のオブジェクトを入れることができるので、例えば次のような使い方ができます。

C#

1public Form1() 2{ 3 InitializeComponent(); 4 button1.Tag = "1"; 5 button2.Tag = "2"; 6 button3.Tag = "+"; 7} 8 9private void Button_Click(object sender, EventArgs e) 10{ 11 if (!(sender is Button b)) return; 12 textBox1.Text += b.Tag?.ToString(); 13}

button1, button2, button3 のすべてのクリックイベントに Button_Click を関連付けると、それぞれのボタンを押したときに Tag で指定した文字列がテキストボックスに追加されます。

投稿2019/10/21 00:01

Zuishin

総合スコア28660

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

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

0

nameはその名の通り、コンポーネントの名前を設定します
tagは任意のオブジェクトを設定できます

nameで判断させるようにしてもいいでしょうが、
私は、tagに通し番号を付けて、それでswitchさせるようにしてますね
同じ動作をさせる場合、同じtagをつけるってことができますね

C#

1private void Ctrl_Click(object sender, EventArgs e){ 2 switch (sender as Control)?.Tag as string){ 3 case "1": 4 /*処理*/ 5 break; 6 case "2": 7 /*処理*/ 8 break; 9 } 10}

投稿2019/10/20 22:08

編集2019/10/20 22:46
y_waiwai

総合スコア87749

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問