- - PR -
遅延バインディングの回避
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-07-24 09:16
いつもお世話になっています。
コンテキストメニューで選択されたメニューをTagプロパティを使って、取得しようとしていますが、「遅延バインディングが使用できない」というエラーが発生しています。型変換が必要だと思うのですが、どこで行えばよいかわかりません。下記に具体的なコードを載せますので、お分かりになる方ご教授いただければと思います。
| ||||||||
|
投稿日時: 2007-07-24 09:22
sender は何型で Tag は何型ですか? デバック時にエラー箇所でブレークしてそれぞれの型を確認してみるといいと思います。 _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2007-07-24 09:22
ソースファイルの最初に
Option Strict On と書いてください。 あるいは、プロジェクトのプロパティのコンパイルの設定でOption StrictをOnにしてください。 何が問題なのか見えてきます。 [ メッセージ編集済み 編集者: 一郎 編集日時 2007-07-24 09:26 ] | ||||||||
|
投稿日時: 2007-07-24 09:46
かるあさん、一郎さん、レスありがとうございます。
お二人のアドバイス通り、ブレークして、注意深くコードを追って行きました。 Sub itemClick(ByVal sender As Object, ByVal e As EventArgs)の中身を 下記のように変えるとうまくできました。 ありがとうございました。 Dim MenuItem As ToolStripMenuItem = DirectCast(sender, ToolStripMenuItem) Dim str$ = DirectCast(MenuItem.Tag, String) MsgBox(str) | ||||||||
|
投稿日時: 2007-07-24 09:51
キャストする場所は間違っていないと思いますが。。。 String ?先ほどのサンプルコードを見る限り Tag には 1(Integer) が格納されているような気が。 Convert.ToInt32(MenuItem.Tag).ToString() とかじゃないかな? _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2007-07-24 10:20
System.String と互換があるので大丈夫なわけですが、(チェックしないなら Tag.ToString() でも良い) 型というかデータの種類が重要ならば型チェック (その前に null チェック) をしてからキャストするなりして取得した方が良いと思います。 2.0 ならば TryCast 演算子ですね。(C# の as に相当)
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1