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

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

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

Re[2]: tagをintegerに変換方法


(過去ログ 138 を表示中)

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

■81186 / inTopicNo.1)  tagをintegerに変換方法
  
□投稿者/ VB初心者 (15回)-(2016/09/01(Thu) 14:38:58)

分類:[.NET 全般] 

VB.NETの質問です。よろしくお願いします。
VB2013使用

ボタンクリックの際にコンソールをまとめて(各ボタンのタグに 1 2 3を入力)

Private Sub Button_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
       
 Select Case CType(sender.tag, Integer)

            Case 1
            Case 2

としたいのですが、
CTypeで 遅延バインディングエラーがでます。

よろしくお願いします。

引用返信 編集キー/
■81187 / inTopicNo.2)  Re[1]: tagをintegerに変換方法
□投稿者/ 魔界の仮面弁士 (865回)-(2016/09/01(Thu) 14:49:40)
No81186 (VB初心者 さん) に返信
> ボタンクリックの際にコンソールをまとめて(各ボタンのタグに 1 2 3を入力)

コードで入力する場合、
 Button1.Tag = "1"  'この場合は String 型
 Button1.Tag = 1   'この場合は Integer 型
のような違いが出ます。

また、デザイン時に設定した場合は String です。


何も設定していない場合は Nothing ですが、
 Button1.Tag = ""
とした場合は、Nothing ではなく "" になるのでご注意下さい。



> Private Sub Button_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
> Select Case CType(sender.tag, Integer)
> CTypeで 遅延バインディングエラーがでます。

sender は Object 型です。Object 型は tag プロパティを持ちません。

Option Strict Off の場合は、遅延バインディングとして扱われますが、
Option Strict On の場合はエラーになりますので、型を明示して
 Select Case DirectCast(sender, Button).Tag
  Case "1"
あるいは
 Select Case CInt(DirectCast(sender, Button).Tag)
  Case 1
などとする必要があります。
引用返信 編集キー/
■81188 / inTopicNo.3)  Re[1]: tagをintegerに変換方法
□投稿者/ 真田昌幸 (69回)-(2016/09/01(Thu) 14:59:52)
No81186 (VB初心者 さん) に返信
>
> Select Case CType(sender.tag, Integer)
>
> Case 1
> Case 2
>
> としたいのですが、
> CTypeで 遅延バインディングエラーがでます。

sender自体をキャストしてから変換すればいける気が。

Convert.ToInt32(DirectCast(sender, Button).Tag)

ではだめですか?

遅延バインディングについては以下でも読んでください。
http://www.atmarkit.co.jp/fdotnet/vblab/vbroom_03/vbroom_03_02.html
引用返信 編集キー/
■81190 / inTopicNo.4)  Re[2]: tagをintegerに変換方法
□投稿者/ VB初心者 (17回)-(2016/09/01(Thu) 15:55:25)
魔界の仮面弁士さん、真田昌幸さん

丁寧な説明までして頂きましてありがとうございました。

Select Case CInt(DirectCast(sender, Button).Tag) 
Select Case Convert.ToInt32(DirectCast(sender, Button).Tag)

どちらでも解決致しました。
解決済み
引用返信 編集キー/
■81191 / inTopicNo.5)  Re[2]: tagをintegerに変換方法
□投稿者/ PANG2 (147回)-(2016/09/01(Thu) 16:03:19)
tagを使わない方法もあります。

(案1)Nameによる振り分け

Select Case DirectCast(sender, Control).Name
Case "Button1"
Case "Button2"
End Select


(案2)配列を用意しておいて、インデックスを検索

Dim ButtonArray As Button() = New Button() {Button1, Button2, Button3}
Select Case Array.IndexOf(ButtonArray, sender)
Case 0
Case 1
End Select


(案3)参照の一致で振り分ける

If sender Is Button1 Then
ElseIf sender Is Button2 Then
End If
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -