トップ回答者
カスタムコントロール?にカスタム属性

質問
-
◆例えばボタンやチェックボックスコントロールなどに、
機能を追加させるために継承したクラスを、フォームに追加します。
現状は、まずフォームデザイナでボタンやチェックボックスをフォームに貼り付け、
xxx.Designer.vbファイルを開き、そのインスタンスの宣言を、
Me.chk1 = new CheckBox
↓
Me.chk1 = new CheckBoxCustom
のように置き換えています。
正しい方法とは思えないのですが、
フォームデザイナ上からカスタムコントロールを貼り付けるような方法はありますか?
ユーザーコントロールのDllを作成して貼り付ける程の機能追加ではないので・・・
◆いくつかのコントロールには、カスタム属性を適用させたいと考えています。
カスタム属性が適用されたフィールドだけは、○○させたい、といった使い方です。
現状は上記と同様にxxx.Designer.vbファイルを開き、
Friend WithEvents btn1 As ButtonCustom
↓
<CustomAttribute()>Friend WithEvents btn1 As ButtonCustom
のように、フィールドの宣言に書き加えています。
これも正しい方法とは思えないのですが、何か別の方法はありますか?
◆最後にもう一点だけ!(ここが一番教えていただきたいところです)
いくつかのフィールドに適用されている属性を取得するには、どんな方法がありますか?
Reflection名前空間にそういった方法が用意されていそうですが、見つかりませんでした。。
回答
-
さくさく さんからの引用 フォームデザイナ上からカスタムコントロールを貼り付けるような方法はありますか?
ユーザーコントロールのDllを作成して貼り付ける程の機能追加ではないので・・・
Windowsフォームデザイナであれば、そのアプリケーションをビルドすることでツールボックスにカスタムコントロールが登録されます。
ビルドしても登録されない場合はオプションを変更する必要があるかもしれません。
http://msdn.microsoft.com/ja-jp/library/5aazxs78.aspx (AutoToolboxPopulate)
http://msdn.microsoft.com/ja-jp/library/fw694kde.aspx
なお、オプション設定で設定項目が表示されない場合、オプション設定の画面の左下あたりにあるチェックボックスで隠蔽されている可能性があります。(このチェックのON/OFFで表示される項目数が変化します)
※Express Editionで確認したわけではありませんのでご了承下さい。
さくさく さんからの引用 ◆いくつかのコントロールには、カスタム属性を適用させたいと考えています。
カスタム属性が適用されたフィールドだけは、○○させたい、といった使い方です。
(略)
これも正しい方法とは思えないのですが、何か別の方法はありますか?
その「○○させたい」が推定できないので何とも言えません。
さくさく さんからの引用 いくつかのフィールドに適用されている属性を取得するには、どんな方法がありますか?
Reflection名前空間にそういった方法が用意されていそうですが、見つかりませんでした。。
このあたりが参考になりそうです。
http://msdn.microsoft.com/ja-jp/library/a4a92379(VS.80).aspx
-
すべての返信
-
さくさく さんからの引用 フォームデザイナ上からカスタムコントロールを貼り付けるような方法はありますか?
ユーザーコントロールのDllを作成して貼り付ける程の機能追加ではないので・・・
Windowsフォームデザイナであれば、そのアプリケーションをビルドすることでツールボックスにカスタムコントロールが登録されます。
ビルドしても登録されない場合はオプションを変更する必要があるかもしれません。
http://msdn.microsoft.com/ja-jp/library/5aazxs78.aspx (AutoToolboxPopulate)
http://msdn.microsoft.com/ja-jp/library/fw694kde.aspx
なお、オプション設定で設定項目が表示されない場合、オプション設定の画面の左下あたりにあるチェックボックスで隠蔽されている可能性があります。(このチェックのON/OFFで表示される項目数が変化します)
※Express Editionで確認したわけではありませんのでご了承下さい。
さくさく さんからの引用 ◆いくつかのコントロールには、カスタム属性を適用させたいと考えています。
カスタム属性が適用されたフィールドだけは、○○させたい、といった使い方です。
(略)
これも正しい方法とは思えないのですが、何か別の方法はありますか?
その「○○させたい」が推定できないので何とも言えません。
さくさく さんからの引用 いくつかのフィールドに適用されている属性を取得するには、どんな方法がありますか?
Reflection名前空間にそういった方法が用意されていそうですが、見つかりませんでした。。
このあたりが参考になりそうです。
http://msdn.microsoft.com/ja-jp/library/a4a92379(VS.80).aspx
-
Azuleanさん
ご回答ありがとうございます。
カスタムコントロールについては、教えていただいたAutoToolboxPopulateをオンにすることで、
解決しました!
「○○させたい」というのは、
カスタム属性が適用されているフィールドは、
そのカスタム属性が提供する条件判断メソッドから真値が得られた場合のみ、
そのカスタム属性がもつ処理を実行させたい、といったところです。
具体的でなくてスミマセン。
三つ目の件ですが、提示していただいた方法は試しました。
が、だめでした。。
クラスの定義に適用されている属性は取得できるようですが、
<CustomAttribute>Class ButtonCustom下記のような、フィールド毎に適用されている属性を取得する事は出来ませんでした。
End Class
<Custom1Attribute> Public WithEvents btn1 as ButtonCustom
<Custom2Attribute> Public WithEvents btn2 as ButtonCustom
ところで、私の開発環境はVisualStudio2005なのですが、
投稿する場所を間違えてしまいました!
未解決の問題については、改めてVisualStudio > VisualBasicにて質問させていただきます。
ありがとうございました。 -