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

わんくま同盟

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

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

ツリー一括表示

コントロールの番号のみを取得する方法 /NN (17/04/13(Thu) 13:16) #83837
Re[1]: コントロールの番号のみを取得する方法 /ぶなっぷ (17/04/13(Thu) 13:24) #83838
│└ Re[2]: コントロールの番号のみを取得する方法 /かたぎり (17/04/13(Thu) 13:54) #83839
Re[1]: コントロールの番号のみを取得する方法 /WebSurfer (17/04/13(Thu) 14:20) #83840
Re[1]: コントロールの番号のみを取得する方法 /shu (17/04/13(Thu) 14:43) #83841
  └ Re[2]: コントロールの番号のみを取得する方法 /NN (17/04/15(Sat) 11:08) #83853
    └ Re[3]: コントロールの番号のみを取得する方法 /かたぎり (17/04/15(Sat) 11:17) #83854
      └ Re[4]: コントロールの番号のみを取得する方法 /NN (17/04/15(Sat) 11:29) #83855
        └ Re[5]: コントロールの番号のみを取得する方法 /shu (17/04/15(Sat) 12:45) #83856
          └ Re[6]: コントロールの番号のみを取得する方法 /NN (17/04/15(Sat) 13:01) #83857 解決済み


親記事 / ▼[ 83838 ] ▼[ 83840 ] ▼[ 83841 ]
■83837 / 親階層)  コントロールの番号のみを取得する方法
□投稿者/ 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

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


[ □ Tree ] 返信 編集キー/

▲[ 83837 ] / ▼[ 83839 ]
■83838 / 1階層)  Re[1]: コントロールの番号のみを取得する方法
□投稿者/ ぶなっぷ (104回)-(2017/04/13(Thu) 13:24:16)
簡便というか考え方の方が重要ですな。

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

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

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

[ 親 83837 / □ Tree ] 返信 編集キー/

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

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

[ 親 83837 / □ Tree ] 返信 編集キー/

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

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

もちろん、目的を果たすのはそれが絶対必要で他に方法はないということが確実で
あればその限りではありませんが。
[ 親 83837 / □ Tree ] 返信 編集キー/

▲[ 83837 ] / ▼[ 83853 ]
■83841 / 1階層)  Re[1]: コントロールの番号のみを取得する方法
□投稿者/ shu (1005回)-(2017/04/13(Thu) 14:43:02)
No83837 (NN さん) に返信
>
> Formに配置したボタンの名称で
> Button23の23の部分だけを取得したいのですが
>
>
Button23という名前は意図してそのようにしているのでしょうか?
そうでなければ提示された方法は危険です。

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


[ 親 83837 / □ Tree ] 返信 編集キー/

▲[ 83841 ] / ▼[ 83854 ]
■83853 / 2階層)  Re[2]: コントロールの番号のみを取得する方法
□投稿者/ NN (3回)-(2017/04/15(Sat) 11:08:17)
みなさんご回答ありがとうございます。

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

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

[ 親 83837 / □ Tree ] 返信 編集キー/

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


[ 親 83837 / □ Tree ] 返信 編集キー/

▲[ 83854 ] / ▼[ 83856 ]
■83855 / 4階層)  Re[4]: コントロールの番号のみを取得する方法
□投稿者/ NN (4回)-(2017/04/15(Sat) 11:29:30)
No83854 (かたぎり さん) に返信


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

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

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

危険というのは何が危険なのでしょうか?
 
[ 親 83837 / □ Tree ] 返信 編集キー/

▲[ 83855 ] / ▼[ 83857 ]
■83856 / 5階層)  Re[5]: コントロールの番号のみを取得する方法
□投稿者/ shu (1007回)-(2017/04/15(Sat) 12:45:55)
No83855 (NN さん) に返信
> ■No83854 (かたぎり さん) に返信
>


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

[ 親 83837 / □ Tree ] 返信 編集キー/

▲[ 83856 ] / 返信無し
■83857 / 6階層)  Re[6]: コントロールの番号のみを取得する方法
□投稿者/ NN (5回)-(2017/04/15(Sat) 13:01:27)
なるほど納得しました

ありがとうございました。
 
解決済み
[ 親 83837 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -