PDA

View Full Version : سوال: طریقه ساخت Property های ایتم دار !



Purya Fallah
پنج شنبه 08 مرداد 1394, 20:51 عصر
باسلام . :لبخندساده:
میخواستم طریقه ساخت Property های که ایتم دارن رو بدونم . این نوع Property ها با اسم Items در بیشتر کنترل ها تعریف میشن .

133739

ممنون .

Mani_rf
شنبه 10 مرداد 1394, 09:19 صبح
اگر نوع Property که تعریف میکنید از ICollection ارث بری داشته باشه اون رو به این صورت نشون میده.

Purya Fallah
شنبه 10 مرداد 1394, 11:50 صبح
اگر نوع Property که تعریف میکنید از ICollection ارث بری داشته باشه اون رو به این صورت نشون میده.
سلام من یک کلاس به این صورت تعریف کردم .

Public Class Car
Inherits System.Windows.Forms.Control

Public Property Items As List(Of Item)
Get


End Get
Set(value As List(Of Item))


End Set
End Property


Public Class Item
Public Property Name As String
Public Property Color As Color
End Class

End Class

الان مشکلم با ذخیره و بازیابی ایتم هاست .

Mani_rf
شنبه 10 مرداد 1394, 12:39 عصر
چه مشکلی داری؟

Mani_rf
شنبه 10 مرداد 1394, 12:41 عصر
البته درستش اینه که اینطوری بنویسی :

Public Class Car Inherits System.Windows.Forms.Control

Private _Items As List(Of Item) = New List(Of Item)
Public Property Items As List(Of Item)
Get
Return _Items
End Get
Set(value As List(Of Item))
_Items = value
End Set
End Property


Public Class Item
Public Property Name As String
Public Property Color As Color
End Class

End Class

Purya Fallah
شنبه 10 مرداد 1394, 15:32 عصر
البته درستش اینه که اینطوری بنویسی :

Public Class Car Inherits System.Windows.Forms.Control

Private _Items As List(Of Item) = New List(Of Item)
Public Property Items As List(Of Item)
Get
Return _Items
End Get
Set(value As List(Of Item))
_Items = value
End Set
End Property


Public Class Item
Public Property Name As String
Public Property Color As Color
End Class

End Class

ممنون ولی وقع اضافه کردن به فرم Error میده ! داخل User Control هم امتهان کردم .

Mani_rf
شنبه 10 مرداد 1394, 16:58 عصر
Error ی که میده چیه!؟

Purya Fallah
یک شنبه 11 مرداد 1394, 14:09 عصر
Error ی که میده چیه!؟

سلام . این Error ی هست که موقع اضافه کردن کنترل به فرم نشون میده .

133845

Purya Fallah
چهارشنبه 14 مرداد 1394, 22:05 عصر
کسی دلیل این خطا رو نمیدونه ؟

Mani_rf
جمعه 16 مرداد 1394, 10:06 صبح
Public Class Item رو به یک کلاس جداگانه انتقال بده ببین درست میشه. حدثی نمیشه گفت اگر سورست کوچیکه بزارش اینجا بررسی کنیم.

ROSTAM2
پنج شنبه 26 آبان 1401, 20:32 عصر
کسی دلیل این خطا رو نمیدونه ؟

سلام به همه.
کلاسی که بعنوان Type کالکشن تعیین شده باید بصورت ساده به کالکشن ارائه بشه تا در دیزانر قابل تجزیه و تبدیل باشه و همچنین باید از اتریبیوت <Serializable()> برای کلاس استفاده بشه.

154219

این هم خصوصیت که باید براش چند تا اتریبیوت استفاده کنید از جمله Editor البته اگه سفارشی باشه و DesignerSerializationVisibility(DesignerSerializat ionVisibility.Visible):

154220

ROSTAM2
دوشنبه 30 آبان 1401, 18:40 عصر
سلام مجدد.

برای زمانی که یک دیکشنری داریم که مقادیر باید به اون اضافه بشه مثل تصویر دوم از پست 11، در ویرایشگر سفارشی حتما باید از TypeDescryptor برای ذخیر مقادیر دیکشنری استفاده بشه.


Protected RegistryDatasValue As New Dictionary(Of Integer, RegistryDataItem)
<ProviderType(ProvideTypes.RegistryData)>
<Browsable(True), RefreshProperties(RefreshProperties.All)>
<Editor(GetType(StringTableCollectionEditor), GetType(Drawing.Design.UITypeEditor))>
<DesignerSerializationVisibility(DesignerSerializat ionVisibility.Visible)>
Public Property RegistryDatas() As Dictionary(Of Integer, RegistryDataItem)
Get
Return RegistryDatasValue
End Get
Set(ByVal value As Dictionary(Of Integer, RegistryDataItem))
RegistryDatasValue = value
End Set
End Property


متود ایجاد شده برای این کار که باید در ویرایشگر خصوصیت و بعد از Ok کردن پنجره یا بستن لیست کشویی خصوصیت اعمال بشه:

Private Sub SetPropertyValue(Instance As Object, PropertyName As String, Value As Object)
Dim StringsDescryptor As PropertyDescriptor = TypeDescriptor.
GetProperties(Instance)(PropertyName)
StringsDescryptor.SetValue(Instance, Value)
End Sub