C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C#の検索処理

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■82480 / inTopicNo.1)  C#の検索処理
  
□投稿者/ よしくん (1回)-(2017/01/11(Wed) 14:07:31)

分類:[C#] 

開発環境
OS:Windows10
開発ソフト:Visual Studio2010
C#のWindowsFormアプリケーションにて作成
実現したいこと

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

情報

検索するコマンド:PictureBoxで名前が≪Picture101〜Picture199≫です。
※連番で99個のPictureBoxです。
検索する範囲:Panel_Hiの中
検索して、対象範囲内にPictureBox複数個あった場合は、1個づつ処理を行うため、ループ文を使用する。
検索対象範囲のPanel_Hiと検索処理を記載しているFormは同じFormです。
検索の処理と、検索でヒットした後の処理は、別々に記載できるようにしたいです。

ネットで検索しましたが、文字列の検索ばかりで、コマンドの名前を検索する方法が出てきませんでした。
ご回答お願いします。
引用返信 編集キー/
■82483 / inTopicNo.2)  Re[1]: C#の検索処理
□投稿者/ 魔界の仮面弁士 (1045回)-(2017/01/11(Wed) 15:01:55)
No82480 (よしくん さん) に返信
> c#のMatchか、Matchesを使用して、コントロールの名前(ID)を取得する方法が知りたいです。
> 自分で、ある程度制作して、実行したところ、固まってしまいました。

ここでいう ID とは、デザイン時につけられる名前のことでしょうか。
(実行時に動的に生成しているのかも知れませんが)

だとしたら、各コントロールの Name プロパティで拾えます。

string controlName = this.picture101.Name; // controlName = "picture101"

たとえば、PictureBox をクリックされたときにそのコントロール名を表示するなら、
「MessageBox.Show(((Control)sender).Name);」ですね。



> 検索するコマンド:PictureBoxで名前が≪Picture101〜Picture199≫です。
> 検索する範囲:Panel_Hiの中
picture101 ではなく
Picture101 なのですね?


ここでいうコマンドというのが、探索条件を意味しているのであれば、
たとえばこんな感じで。


var re = new Regex(@"^Picture1\d{2}$"); // 探索条件
var boxes = Panel_Hi.Controls.OfType<PictureBox>().Where(pic => re.IsMatch(pic.Name));
foreach (var pic in boxes)
{
  pic.BackColor = Color.Red;
}


ただ、こうした列挙処理が度々呼ばれるよう担っている場合は、
毎回文字列で探索するのではなく、あらかじめ、
Picture101〜Picture199 を格納した配列なり List<> なりを
用意しておく方が良いと思います。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ