- PR -

複合型プロパティの使い方を教えてください

1
投稿者投稿内容
はなたれ小僧
常連さん
会議室デビュー日: 2003/07/17
投稿数: 21
投稿日時: 2004-12-14 11:04
Windowsアプリケーションを作成しているVB.NETビギナーです。
ビジュアルなカスタムコンポーネントを作ってそのメンバーに複合型のプロパティを
加え、フォームの設計時にプロパティを設定できるようにしようとしているのですが、
次の点でうまくいっていません。
1)同じ複合型でもSystem.DrawingのPoint型ならばプロパティウインドウに(+)記号付きで
 表示され、展開してX,Yを別々に設定できるようになりますが、(+)展開表示になりません。
2)デザイナが記述するInitializeComponent()で初期値が構造体のメンバーそれぞれに
 設定されたようになるのですが、このままではコンパイルエラーです。Point型の場合と
 同じように次のように自動記述されるのを期待しているのですが...
Me.GrpBase1.XRange = New GrpBase.TRange(0,0)

そもそもカスタムの複合型をこのように記述できるのか、など調べても不明点が
多いのですが、どこが間違っているのかご指摘いただけるとうれしいです。

以下に、フォーム、コンポーネント、複合型構造体の記述の一部を示します。
VS 2003 Enterpriseを使用しています。

'カスタムコンポーネントをデザイン時にフォーム上にレイアウト
Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
コンポーネントが登録され、'プロパティが記述される
Friend WithEvents GrpBase1 As GraphLib.GrpBase
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
'GrpBase1
Me.GrpBase1.Location = New System.Drawing.Point(264, 112)
Me.GrpBase1.Name = "GrpBase1"
Me.GrpBase1.XRange.Hi = 0 '<-- ココがうまくない!
Me.GrpBase1.XRange.Lo = 0
End Sub
#End Region

End Class

'プロジェクトGraphLibに記述したコンポーネントクラス
Public Class GrpBase
Inherits System.Windows.Forms.PictureBox

'複合型プロパティ
Private FXRange As TRange
<Category("GrpBase"), _
Description("グラフのX軸の表示レンジを指定します"), _
RefreshProperties(System.ComponentModel.RefreshProperties.All), _
Bindable(False), _
Browsable(True), _
DesignerSerializationVisibility(DesignerSerializationVisibility.Content), _
Public Property XRange() As TRange
Get
Return FXRange
End Get
Set(ByVal Value As TRange)
FXRange = Value
End Set
End Property

'描画メソッド
Public Sub Draw(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs)

End Sub
End Class

'複合型プロパティのための構造体TRange
Public Structure TRange
Private FLo As Double
Private FHi As Double
Public Sub New(ByVal Lo As Double, ByVal Hi As Double)
FLo = Lo
FHi = Hi
End Sub
Public Property Lo() As Double
Get
Return FLo
End Get
Set(ByVal Value As Double)
FLo = Value
End Set
End Property
Public Property Hi() As Double
Get
Return FHi
End Get
Set(ByVal Value As Double)
FHi = Value
End Set
End Property
Public Overrides Function ToString() As String
Return FLo & ", " & FHi
End Function
End Structure

以上
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2004-12-14 11:43
例えば

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconimplementingtypeconverter.asp

こことか、TypeConverter(型コンバータ)について調べてみてください。
Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-12-14 12:04
C#で書かれていますが、考え方の参考としてこんな資料もあります。

Visual Studio .NET プロパティ ブラウザによるコンポーネントの本格的な RAD 化

の「展開可能なプロパティと文字列変換: TypeConverter とプロパティ ブラウザ」

はなたれ小僧
常連さん
会議室デビュー日: 2003/07/17
投稿数: 21
投稿日時: 2004-12-14 12:16
yaさん、Os_さん
MSDNでAttributeやTypeConverterのあたりを調べてもぐるぐる回るだけで
なかなか解決になる情報にたどり着けなかったのですが、ずばり欲しかった
ところを教えていただきありがとうございます。
よく読んで勉強してみます。
1

スキルアップ/キャリアアップ(JOB@IT)