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

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

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

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

Visual Studio 2010

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

Q&A

解決済

2回答

2105閲覧

C# 検索処理

Yoshikun_0945

総合スコア224

C#

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

Visual Studio 2010

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

0グッド

0クリップ

投稿2017/01/11 05:02

編集2017/01/11 05:12

#実現したいこと
c#のMatchか、Matchesを使用して、コントロールの名前(ID)を取得する方法が知りたいです。
自分で、ある程度制作して、実行したところ、固まってしまいました。

###情報
検索するコントロール:PictureBoxで名前が≪Picture101~Picture199≫です。
※連番で99個のPictureBoxです。
検索する範囲:Panel_Hiの中
検索して、対象範囲内にPictureBox複数個あった場合は、1個づつ処理を行うため、ループ文を使用する。
検索対象範囲のPanel_Hiと検索処理を記載しているFormは同じFormです。
検索の処理と、検索でヒットした後の処理は、別々に記載できるようにしたいです。
検索して、ヒットした名前は、変数に格納して、
変数.left = 変数.left + 10;という形で記述し、どのIDがヒットしても対応できるようにしたいです。

ネットで検索しましたが、文字列の検索ばかりで、コントロールの名前を検索する方法が出てきませんでした。
ご回答お願いします。

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

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

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

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

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

workaholist

2017/01/11 05:08

「コマンド」ではなく「コントロール」ですか?やりたいことはコントロール名を取得する方法ですか?コントロール名が≪Picture101~Picture199≫かどうかを調べる方法ですか?
guest

回答2

0

ベストアンサー

正規表現で名前判定させたらいかがでしょう?
環境無いので、エラーあったらすみません。

C#

1 var r = new System.Text.RegularExpressions.Regex("Picture1[0-9][0-9]"); 2 foreach (PictureBox c in Panel_Hi.Controls) 3 { 4 if (r.IsMatch(c.Name) == true) 5 { 6 // 一致した 7 // 処理 8 } 9 }

こんな感じでしょうか?

投稿2017/01/11 08:29

編集2017/01/11 12:30
KIYOSHI

総合スコア268

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

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

Yoshikun_0945

2017/01/11 08:48

他の方法ありますでしょうか? うまくいかないみたいです
KIYOSHI

2017/01/11 08:51 編集

正規表現に不備があったので修正しました。
Yoshikun_0945

2017/01/11 08:58

①cの型指定がないです。 ②検索処理と、検索後の処理を別場所に記述しようとしたときに、cの型をPictureBoxと指定したらエラーが出ます。 ③cの型をPictureBoxと指定して実行したら、Nameの正規表現がうまく動作していないようです。
KIYOSHI

2017/01/11 12:34

ソース修正しました。 正規表現が不明でしたら、 if (c.Name.StartsWith("Picture")==true) でも判定できると思います。
guest

0

こんなイメージでは、どうですか?

c#

1// 検索 2foreach (c in Panel_Hi.Controls) { 3 if (c.Name == "foo") { 4 x.Add(c) 5 } 6} 7// 処理 8foreach (c in x) { 9 bar(c); 10}

投稿2017/01/11 06:35

takeshi

総合スコア264

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

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

Yoshikun_0945

2017/01/11 07:45

検索対象が99個あるので、もう少し短い構文になるようにしたいです。 例えば、c.Name が Picture101からPicture199なら…として、99個が判定でtrueになるようにしたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問