باسلام .
میخواستم طریقه ساخت Property های که ایتم دارن رو بدونم . این نوع Property ها با اسم Items در بیشتر کنترل ها تعریف میشن .
Capture.JPG
ممنون .
باسلام .
میخواستم طریقه ساخت Property های که ایتم دارن رو بدونم . این نوع Property ها با اسم Items در بیشتر کنترل ها تعریف میشن .
Capture.JPG
ممنون .
اگر نوع 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
الان مشکلم با ذخیره و بازیابی ایتم هاست .
چه مشکلی داری؟
دانلود حسابخانه مانی، برنامه مدیریت درآمد و هزینه رایگان
هر آنچه که هستیم، نتیجه افکاریست که در گذشته داشته ایم. (بودا)
البته درستش اینه که اینطوری بنویسی :
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 ی که میده چیه!؟
دانلود حسابخانه مانی، برنامه مدیریت درآمد و هزینه رایگان
هر آنچه که هستیم، نتیجه افکاریست که در گذشته داشته ایم. (بودا)
سلام . این Error ی هست که موقع اضافه کردن کنترل به فرم نشون میده .
Capture.JPG
کسی دلیل این خطا رو نمیدونه ؟
PublicClassItem رو به یک کلاس جداگانه انتقال بده ببین درست میشه. حدثی نمیشه گفت اگر سورست کوچیکه بزارش اینجا بررسی کنیم.
دانلود حسابخانه مانی، برنامه مدیریت درآمد و هزینه رایگان
هر آنچه که هستیم، نتیجه افکاریست که در گذشته داشته ایم. (بودا)
سلام به همه.
کلاسی که بعنوان Type کالکشن تعیین شده باید بصورت ساده به کالکشن ارائه بشه تا در دیزانر قابل تجزیه و تبدیل باشه و همچنین باید از اتریبیوت <Serializable()> برای کلاس استفاده بشه.
Serializable.jpg
این هم خصوصیت که باید براش چند تا اتریبیوت استفاده کنید از جمله Editor البته اگه سفارشی باشه و DesignerSerializationVisibility(DesignerSerializat ionVisibility.Visible):
Custom Collection.jpg
سلام مجدد.
برای زمانی که یک دیکشنری داریم که مقادیر باید به اون اضافه بشه مثل تصویر دوم از پست 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(DesignerSerializa tionVisibility.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
سلام جدید
من می خوام خصوصیات یک کلاس رو بر اساس نام داشته باشم، شرایط این درخواست به این صورت هست که نام خصوصیت از کاربر گرفته می شه پس بزرگ و کوچکی کاراکترهای نام خصوصیات رو کاربر تعیین می کنه و متود GetProperty نام خصوصیت رو دقیق می خواد....
آیا روشی غیر از جستجو در حصوصیات برای آسان کردن این دستور هست یا خیر؟
''' <summary>
'''
''' </summary>
''' <param name="Porject"></param>
''' <param name="Name">OptionName</param>
''' <param name="Value">OptionValue</param>
''' <remarks></remarks>
Function SetPropertyValue(ByRef Porject As ProjectItem, Name As String, Value As String) As Boolean
Console.WriteLine("{0} : {1}", Name, Name.Length)
Dim pI As PropertyInfo = GetType(ProjectItem).GetProperty(Name)
Console.WriteLine(pI.Name)
If pI Is Nothing OrElse Value.Length = 0 Then Return False
pI.SetValue(Project, Value, New Object() {})
Return True
End Function
من از این روش استفاده کردم:
Function CreateQuery(Properties As Dictionary(Of String, String)) As String
Dim Value As String = ""
Dim Query As String = "SELECT * FROM AppProjects WHERE"
Dim x As Integer = 0
For Each p As PropertyInfo In GetType(ProjectItem).GetProperties()
For Each [Property] As KeyValuePair(Of String, String) In Properties
If p.Name.ToLower = [Property].Key.ToLower Then
Value = [Property].Value
GoTo AddToQuery
End If
Next
Continue For
AddToQuery: If Value.Length > 0 Then
If x > 0 Then
Query += " AND"
End If
Query += String.Format(" {0} LIKE N'%{1}%'", p.Name, Value)
x += 1
End If
Next
If x = 0 Then Return ""
Return Query
End Function
یک مورد دیگه هم هست:
من می خوام خصوصیات بر اساس ترتیبی که خودم تعیین می کنم چاپ بشن....
Sub WriteProjectFields(p As ProjectsDataset.AppProjectsRow)
'Get Item-Name Max-Length....
Dim MaxLen As Integer = 0
Dim Value As Object
Dim PInfo As System.Reflection.PropertyInfo
For Each pI As PropertyInfo In GetType(ProjectItem).GetProperties()
If pI.Name.ToLower = "id" Then Continue For
PInfo = GetType(ProjectsDataset.AppProjectsRow).GetPropert y(pI.Name)
Value = PInfo.GetValue(p, New Object() {})
If IsDBNull(Value) = False AndAlso String.IsNullOrEmpty(Value) = False Then
If pI.Name.Length > MaxLen Then MaxLen = pI.Name.Length
End If
Next
If MaxLen = 0 Then
Console.ForegroundColor = ConsoleColor.DarkCyan
Console.WriteLine("{0} Project has not any Information.", vbTab)
Exit Sub
End If
'-----------------------
For Each pI As PropertyInfo In GetType(ProjectItem).GetProperties()
If pI.Name.ToLower = "id" Then Continue For
PInfo = GetType(ProjectsDataset.AppProjectsRow).GetPropert y(pI.Name)
Value = PInfo.GetValue(p, New Object() {})
If IsDBNull(Value) = 0 AndAlso String.IsNullOrEmpty(Value) = False Then
WriteField(pI.Name, Value, MaxLen + 1)
End If
Next
End Sub
من با این روش مرتب سازی دلخواهم رو روی خصوصیات اعمال کردم
Screenshot 2024-10-18 153958.jpg
یک آرایه متشکل از نام خصوصیات:
Public ReadOnly Property SortedFieldNames() As String()
Get
Dim Expr As String() =
{"ID", "Title", "Category", "ProjectType", "Language",
"StartDate", "ComputerName", "Solution", "Documents",
"Fonts", "DatabaseName", "DatabaseType", "DatabaseProject",
"Package", "Password", "Details", "EndDate"}
Return Expr
End Get
End Property
استفاده:
For Each Field As String In SortedFieldNames
If Field.ToLower = "id" Then Continue For
PInfo = GetType(ProjectsDataset.AppProjectsRow).GetPropert y(Field)
Value = PInfo.GetValue(p, New Object() {})
If IsDBNull(Value) = 0 OrElse String.IsNullOrEmpty(Value) = False Then
WriteField(Field, Value, MaxLen + 1)
End If
Next
آخرین ویرایش به وسیله ROSTAM2 : جمعه 27 مهر 1403 در 21:05 عصر