- - PR -
継承元Formのプロパティの保護
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-06-07 12:01
Formで作成した画面を継承元として、
他複数の画面で継承しています。 VB.NETです。 継承元画面のプロパティを継承先で変更できないよう、 保護するしくみを考えているのですが、 プロパティをシャドウする方法だと、下記のようになってしまいます。 Private mKeyPreview As Boolean = True Public Shadows ReadOnly Property KeyPreview() As Boolean Get Return mKeyPreview End Get End Property この場合、継承元画面のデザイナのプロパティでは「KeyPreview」プロパティを変更できるのですが、「Me.KeyPreview」のプロパティ設定のソースが自動生成され、「ReadOnly」のためエラーになってしまいます。 継承元画面のプロパティはデザイナのプロパティページで変更することができ、継承先では「ReadOnly」となる状態が望ましいのですが、実現する方法はあるのでしょうか? ご意見をいただけるとありがたいと思います。 よろしくお願いします。 |
|
投稿日時: 2005-06-07 14:11
こんにちは。
継承先のフォームで、System.ComponentModel 名前空間を利用します。 そしてReadOnlyAttributeクラスをTrue(読取専用)にすることで実現可能です。 継承元画面のプロパティはデザイナのプロパティページで変更することができ、 継承先画面のプロパティはデザイナでは「ReadOnly」となります。 下記に、継承先フォームの記述例を示しますので、試してみてください。 ---------------------------------------------------------------- Imports System.ComponentModel Public Class Form1 Inherits WindowsApplication1.BaseForm " Windows フォーム デザイナで生成されたコード " Private mKeyPreview As Boolean = True <ReadOnlyAttribute(True)> _ Public Shadows ReadOnly Property KeyPreview() As Boolean Get Return mKeyPreview End Get End Property ---------------------------------------------------------------- お役に立てれば幸いです。ではでは |
|
投稿日時: 2005-06-07 14:58
黛さん、ありがとうございます。
継承先画面にて、 ご返答いただいたように、プロパティの記述を行ってみました。 しかし、 デザイナのプロパティページには特に変化はなく、 値が変更できる状態となったままでした。 ちなみに、このようなプロパティの属性設定は、 このプロパティを持つクラスの画面デザイナに 適用可能なものなのでしょうか? やり方が悪いのか、理解が足りないか、 もしよろしければもう少し教えていただけませんか? よろしくお願いします。 |
|
投稿日時: 2005-06-07 15:40
記述方法は間違っていないはずですので、
リビルドを行ってみてください。 画面デザイナに反映されるはずです。 ちなみに 継承元のフォームはこんな感じになっているはずです。 -------------------------------------------------------------- Public Class BaseForm Inherits System.Windows.Forms.Form #Region " Windows フォーム デザイナで生成されたコード " (省略) #End Region Private mKeyPreview As Boolean = True Public Shadows ReadOnly Property KeyPreview() As Boolean Get Return mKeyPreview End Get End Property (以下略) -------------------------------------------------------------- ユーザが指定できるプロパティの属性については、 各々の画面クラスごとに有効です。 「Category」や「Description」を設定することにより、プロパティの説明を 画面デザイナのプロパティウィンドウ上に表示することもできます。 詳しくはMSDN等でご確認ください。 ではでは。 |
|
投稿日時: 2005-06-07 16:30
黛さん、たびたびありがとうございます。
最初の投稿の書き方が悪かったようで、申し訳ありません。 継承元が元のままなら、継承先でプロパティを記述しなくても 継承先で「ReadOnly」は実現できていました。 継承元が元のままの場合、 継承元の画面デザイナのプロパティページでプロパティ設定を変更した後、 継承元のソースコードを表示したときに、ソースの自動生成で 「Me.KeyPreview = True」 が生成され、 「KeyPreview」は「ReadOnly」のため記述エラーになってしまいます。 そのため、 「Public Shadows ReadOnly Propery」 の記述方法ではうまく制御できないのではないかと、考えていました。 書き方が悪かったようで、申し訳ありませんでした。 |
|
投稿日時: 2005-06-07 16:53
fujiさんの説明から私が理解した内容でコードを書くと
下記のようになります。 ----------------------------------------- ◆構成 Solution1 └WindowsApplication1 _└参照設定 _└AssemblyInfo.vb _└BaseForm.vb └Form1.vb ------------- 継承元ここから ------------------ Imports System.ComponentModel Public Class BaseForm Inherits System.Windows.Forms.Form #Region " Windows フォーム デザイナで生成されたコード " (省略) #End Region Private mKeyPreview As Boolean <ReadOnlyAttribute(True)> _ Public Shadows Property KeyPreview() As Boolean Get Return mKeyPreview End Get Set(ByVal Value As Boolean) mKeyPreview = Value End Set End Property End Class ------------- 継承元ここまで ------------------ ------------- 継承先ここから ------------------ Public Class Form1 Inherits WindowsApplication1.BaseForm #Region " Windows フォーム デザイナで生成されたコード " (省略) #End Region Private mKeyPreview As Boolean Public Shadows Property KeyPreview() As Boolean Get Return mKeyPreview End Get Set(ByVal Value As Boolean) mKeyPreview = Value End Set End Property End Class ------------- 継承先ここまで ------------------ こんな感じでいかがでしょう? 継承元の画面デザイナで「KeyPreview」プロパティを変更し、 リビルドすると、継承先の画面にも反映されます(継承先でデザイナ上は読取専用)です。 この記述方法だと、エラーは起きません。 お役に立てば幸いです。ではでは [ メッセージ編集済み 編集者: 黛 編集日時 2005-06-07 16:54 ] |
|
投稿日時: 2005-06-07 17:19
黛さん、ありがとうございます。
なるほど、です。 ようやく理解できました。 ちなみに、継承元の記述のみで、 継承先の記述がなくても同じように実現可能のようです。 この方法で進めてみようと思います。 ありがとうございました。 |
1