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

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

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

コントロールの番号のみを取得する方法

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

■83837 / inTopicNo.1)  コントロールの番号のみを取得する方法
  
□投稿者/ NN (1回)-(2017/04/13(Thu) 13:16:09)

分類:[.NET 全般] 


Formに配置したボタンの名称で
Button23の23の部分だけを取得したいのですが


Private Sub Button23_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button23.Click

Dim button As Integer = CInt(Replace(CType(sender, Control).Name, "Button", ""))

End Sub

というようにするしかないですか?
もっと簡便に取得できる方法があれば教えてください。


引用返信 編集キー/
■83838 / inTopicNo.2)  Re[1]: コントロールの番号のみを取得する方法
□投稿者/ ぶなっぷ (104回)-(2017/04/13(Thu) 13:24:16)
簡便というか考え方の方が重要ですな。

> Dim button As Integer = CInt(Replace(CType(sender, Control).Name, "Button", ""))
だと、ヘッド部が "Button"でその直後に数字というフォーマットを期待していることになる。
それで間違いないなら、これで良し。

そうではなく、
  "ListBox23"
とかもあり得るなら、末尾の数字を取得してCInt()がいいだろう。

特殊な事情が無い限り(究極に処理速度を求めるなど)、重要なのは、汎用性だと思う。

引用返信 編集キー/
■83839 / inTopicNo.3)  Re[2]: コントロールの番号のみを取得する方法
□投稿者/ かたぎり (6回)-(2017/04/13(Thu) 13:54:56)
Sender.Nameを^[\w]+([0-9]*)で正規表現かけてとれば「ほぼ汎用」
(マッチ条件は即興なので、くわしくはちゃんと調べてみてくださいまし)

VB.NET、正規表現、でぐぐれば色々と情報がとれるかと。

引用返信 編集キー/
■83840 / inTopicNo.4)  Re[1]: コントロールの番号のみを取得する方法
□投稿者/ WebSurfer (1220回)-(2017/04/13(Thu) 14:20:52)
No83837 (NN さん) に返信
>
> Formに配置したボタンの名称で
> Button23の23の部分だけを取得したいのですが

何のためにそういうことがしたいのか(=そもそもの目的)も書いていただけると
また違った回答(その目的を果たすにはこうした方がいいとかの代案)が得られる
かもしれません。

もちろん、目的を果たすのはそれが絶対必要で他に方法はないということが確実で
あればその限りではありませんが。
引用返信 編集キー/
■83841 / inTopicNo.5)  Re[1]: コントロールの番号のみを取得する方法
□投稿者/ shu (1005回)-(2017/04/13(Thu) 14:43:02)
No83837 (NN さん) に返信
>
> Formに配置したボタンの名称で
> Button23の23の部分だけを取得したいのですが
>
>
Button23という名前は意図してそのようにしているのでしょうか?
そうでなければ提示された方法は危険です。

取得したいIntegerの値をTagに入れておいたほうがよりよいと思います。


引用返信 編集キー/
■83853 / inTopicNo.6)  Re[2]: コントロールの番号のみを取得する方法
□投稿者/ NN (3回)-(2017/04/15(Sat) 11:08:17)
みなさんご回答ありがとうございます。

> 取得したいIntegerの値をTagに入れておいたほうがよりよい

というのはどういう操作のことを指していますでしょうか?

引用返信 編集キー/
■83854 / inTopicNo.7)  Re[3]: コントロールの番号のみを取得する方法
□投稿者/ かたぎり (7回)-(2017/04/15(Sat) 11:17:01)
画面部品コントロールには、tag、というプロパティがあって、Object型をもっています。
ここに任意の情報を入れておくことができるので、そこを使うのはどうですか?というアイデアですね。


引用返信 編集キー/
■83855 / inTopicNo.8)  Re[4]: コントロールの番号のみを取得する方法
□投稿者/ NN (4回)-(2017/04/15(Sat) 11:29:30)
No83854 (かたぎり さん) に返信


納得しました、ありがとうございます。

あと気になっているのですが

Button23という名前は意図してそのようにしているのでしょうか?
そうでなければ提示された方法は危険です。

危険というのは何が危険なのでしょうか?
 
引用返信 編集キー/
■83856 / inTopicNo.9)  Re[5]: コントロールの番号のみを取得する方法
□投稿者/ shu (1007回)-(2017/04/15(Sat) 12:45:55)
No83855 (NN さん) に返信
> ■No83854 (かたぎり さん) に返信
>


> Button23という名前は意図してそのようにしているのでしょうか?
> そうでなければ提示された方法は危険です。
>
> 危険というのは何が危険なのでしょうか?
意図した名前でなければボタンに対する動作が想定していないものになりうるということです。
例えばButton23の23によって配列の23番目を処理することになるが実際はそのボタンでは14番目を
処理しなければならなかったということがあります。またボタンを作ったり張りなおしているうちに
番号が配列の数を超えてしまいExceptionが発生するということも考えられます。

引用返信 編集キー/
■83857 / inTopicNo.10)  Re[6]: コントロールの番号のみを取得する方法
□投稿者/ NN (5回)-(2017/04/15(Sat) 13:01:27)
なるほど納得しました

ありがとうございました。
 
解決済み
引用返信 編集キー/

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


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

このトピックに書きこむ