تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
سؤال في الخصائص للابتعاد عن الأسئلة الروتينية
#1
الموضوع شيق لمن يريد ان يشارك

زمان من ايام فيجوال 2005 كان عندي مكتبات عن الفيجوال ستوديو وكيفية استخدام الـ Class للاسف ضاعت كلها ولم اجدها

فيها طريقها لجعل الخاصية تاخذ الشكل التالي :

كود :
MyClass.Field("Date").Value=Now
MyClass.Field("PassWord").Value=34345



كنت قد برمجتها من كتب ضاعت اعتقد خاصية كانت تقوم بوراثة Class أخر .
لاحظ وجود القيمة Value وكانت البرمجة شئ مثل

كود :
Public Class Class1

   Dim _Feild As New mycls()
   Public Property Feild(str As String) As mycls
       Get
           Return _Feild
       End Get
       Set(value As mycls)
           _Feild = value
       End Set
   End Property
End Class

Public Class mycls

   Dim _value As Object
   Public Property Value As Object
       Get
           Return _value
       End Get
       Set(value As Object)
           _value = value
       End Set
   End Property
End Class

هذه البرمجة ستعمل بشكل طبيعي

كود :
Dim m As New Class1
        
       m.Feild("V1").Value = 345
       m.Feild("V2").Value = Date.Now

ويمكن استدعاء القيمة المحفوظة عادي كما بالشكل التالي :

كود :
TextBox1.Text = m.Feild("V1").Value

المشكلة لن يظهر الرقم لان اخر قيمة ادخلناها هي التاريخ والحل هو تحويل الخاصية الى مصفوفة ربما

كود :
Dim _Feild As New List(Of mycls)
   Public Property Feild(str As String) As mycls
       Get

           Return _Feild("str").value
       End Get
       Set(value As mycls)
           _Feild(str).value = value
       End Set
   End Property

شئ مثل هذا مشكلة List تستدعي العناصر Items  بالرقم وليس الاسم 
لو كنت اذكر ربما كان هناك بحث عن اسم العنصر بواسطة IndexOf ربما لا اتذكر .
المهم المشكلة هنا انا توقفت عند هذا الباب فمن له معرفة وسبق وعملها .
الرد }}}
تم الشكر بواسطة:
#2
مرحباً اخى viv

شوف المثال البسيط واعلم انها ستوضح لك كيفية انشاء ما تريده
بكل بساطة وبدون اى تفكير كثيراً او تعقيدات

اولا لتوضح المثال 

انشاء مشروع وقم بانشاء عدد [ 1 ] TextBox
وانشاء عدد [ 1 ] Button

ثانياً طبق الاكواد والشرح كالتالي
ثم تعال فى كود الزر واستخدم التالى
كود :
MsgBox(test(TextBox1).Value.ToShortDateString)

وتعال اسفل حدث كود الزر وقم باضافة التالى
كود :
   Function test(ByVal text_ As Control) As DateTimePicker
       test = New DateTimePicker
       test.Value = CDate(text_.Text)
       Return test
   End Function

قم بتشغيل المشورع واكتب فى TextBox
واكتب اى تاريخ باى طريقة وليكن

PHP كود :
28 9 2018 


الامر مشابق للموضوع فقط حسب الحاجة المطلوبة
مررها بنفسك الطريقة كما فى مثال الـ Function بالاعلى

وسيتم المطلوب بالنهاية
اتمنى ان تكون الفكرة وصلت لك وان الامر ابسط واسهل مما تتخيل

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: viv , ابو روضة
#3
ليت الامر بهذه البساطة اخ خظر

احتاج ان ادخل قيم مختلفة تواريخ صور ارقام نصوص يعني النوع يكون Object ويكون اما Coolection  او List هو ليس تابث بنوع معين
فانا احتاج ان يكون له عدة خصائص مثلا

كود :
MyClass.Field("Date").Value= Now
Dim myInt as integer = MyClass.Field("Date").count

لاحظ العنصر له العديد من الخصائص Value او Count او toDate اي خصائص فيما بعد اضيفها
ويجب ان تظهر للمستخدم فانا لا ابرمج شئ لنفسي 

يعني مصفوفة لها حصائص كل واحدة برقم فهرس او اسم ولها قيمة

توصلت الى طريقة مع انها ليست التي ابحث عنها ولكنها شغالة

كود :
Public Class Class1

   Dim _Feild As New Collection
   Public ReadOnly Property Feild(str As String) As mycls
       Get

           Dim p As New mycls
           p.Name = str

           Try
               _Feild.Add(p, str)
           Catch ex As Exception

           End Try

           Return _Feild(str)

       End Get
   
   End Property
End Class

Public Class mycls

   Public Sub New()

   End Sub

   Public Sub New(int As Object)
       Me.Value = int
   End Sub

   Dim _value As Object
   Public Property Value As Object
       Get
           Return _value
       End Get
       Set(value As Object)
           _value = value
       End Set
   End Property

   Dim _Name As String
   Public Property Name As String
       Get
           Return _Name
       End Get
       Set(value As String)
           _value = _Name
       End Set
   End Property

End Class


وضع قيم

كود :
Dim m As New Class1
       m.Feild("V1").Value = 345
       m.Feild("V2").Value = Date.Now

الاستعلام عن قيم


كود :
 TextBox1.Text = m.Feild("V1").Value
   
       TextBox1.Text = m.Feild("V2").Value
الرد }}}
تم الشكر بواسطة: elgokr
#4
خصائص الكائنات والتعامل معها من الكلاسات عبر الـ setters , getters
هذه من أهم مميزات "البرمجة كائنية التوجه" OOP
أقترح الاطلاع على هذا الشرح ل:
https://www.youtube.com/watch?v=m9h3-XSmSCQ
https://www.youtube.com/watch?v=0FHSDm3Tfsk

الرد }}}
#5
هذة تجربة سريعة ألق نظرة عليها : تم إستخدام الـ ( System.Collections.Generic.Dictionary )

   

   

   


وتستخدم بهذة الطريقة :


   




أتمنى تكون قريبة للي تفكر فية 

هذا الكود : وضعت الصور لأني لا احب طريقة عرض الأكواد في المنتدى نهائياً 


كود :
Public Class viv
   Private m_Fields As New Fields
   Public ReadOnly Property Fields() As Fields
       Get
           Return Me.m_Fields
       End Get
   End Property
   Public ReadOnly Property Fields(ByVal Name As String) As Field
       Get
           Return m_Fields(Name)
       End Get
   End Property
   Public ReadOnly Property Values(ByVal Name As String) As Object
       Get
           Return m_Fields(Name).Value
       End Get
   End Property
End Class



Public Class Fields
   Inherits System.Collections.Generic.Dictionary(Of String, Field)
   Public Overloads Sub Add(ByVal NewField As Field)
       MyBase.Add(NewField.Name, NewField)
   End Sub
   Public Overloads Function Add(ByVal Name As String, Value As Object) As Field
       Dim Fld As New Field(Name, Value)
       MyBase.Add(Name, Fld)
       Return Fld
   End Function
   Public Overloads Function Add(ByVal Name As String) As Field
       Dim Fld As New Field(Name, Nothing)
       MyBase.Add(Name, Fld)
       Return Fld
   End Function
End Class


Public Class Field
   Public Property Name As String
   Public Property Value As Object
   Public Sub New(ByVal Name As String, Value As Object)
       Me.Name = Name
       Me.Value = Value
   End Sub
   Public Overrides Function ToString() As String
       Return Me.Name
   End Function
End Class




كود :
Public Class Form2
   Dim MyFriendVIV As New viv
   Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       Me.MyFriendVIV.Fields.Add("MyName", "Abulla")
       Me.MyFriendVIV.Fields.Add("MyPhone", "555555")
       Me.MyFriendVIV.Fields.Add("MyFriend", "viv")
       Me.MyFriendVIV.Fields.Add("Salary").Value = 1200

       Dim Fld As New Field("ID", 51)
       Me.MyFriendVIV.Fields.Add(Fld)
   End Sub
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       ' Example 1
       MsgBox(Me.MyFriendVIV.Fields("MyName").Value.ToString)
       MsgBox(Me.MyFriendVIV.Fields("MyPhone").Value.ToString)
       MsgBox(Me.MyFriendVIV.Fields("MyFriend").Value.ToString)
       MsgBox(Me.MyFriendVIV.Fields("Salary").Value.ToString)
       MsgBox(Me.MyFriendVIV.Fields("ID").Value.ToString)
       ' Example 2
       MsgBox(Me.MyFriendVIV.Values("MyName"))
       MsgBox(Me.MyFriendVIV.Values("MyPhone"))
       MsgBox(Me.MyFriendVIV.Values("MyFriend"))
       MsgBox(Me.MyFriendVIV.Values("Salary"))
       MsgBox(Me.MyFriendVIV.Values("ID"))
   End Sub
End Class
الرد }}}
تم الشكر بواسطة: viv , viv , elgokr
#6
شكرا اخ الدوسري
تقريبا هو المطلوب بشحمه ولحمه سادرسه
الرد }}}



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم