قواعد المشاركة في المنتدى

(منتدى الأكسس) الموضوع:مساعدة عاجلة من اهل الخبرة بواسطة: (ثائر التميمي) :: (قسم الاعلانات) الموضوع:سيارات شاهين مستعملة للبيع بواسطة: (ديزاينر ديزاينر) :: (قسم الاعلانات) الموضوع:تصميم تطبيقات الهواتف الذكية مع اطياف بواسطة: (موشن جرافيك) :: (قسم الاعلانات) الموضوع:سيارات اودي مستعملة للبيع بواسطة: (ديزاينر ديزاينر) :: (منتدى مبرمجي Microsoft Visual C#.NET) الموضوع:TreeView in C Sharp بواسطة: (Abu Ehab) :: (قسم الاعلانات) الموضوع:صورمشبات صور مشبات حجر احمر بواسطة: (مشبات مدافئ) :: (منتدى ADO.NET العام) الموضوع:سائق سيارة في اسطنبول بواسطة: (تسويق خمسة) :: (منتدى ADO.NET العام) الموضوع:سائق في لندن بواسطة: (تسويق خمسة) :: (منتدى ADO.NET العام) الموضوع:إستئجار سيارة مع سائق في لندن ، إنجلترا بواسطة: (تسويق خمسة) :: (منتدى ADO.NET العام) الموضوع:سائق في اسطنبول بواسطة: (تسويق خمسة) :: (منتدى ADO.NET العام) الموضوع:سائق خاص في اسطنبول بواسطة: (تسويق خمسة) :: (منتدى ADO.NET العام) الموضوع:إستئجار سيارة بسائق في اسطنبول بواسطة: (تسويق خمسة) :: (منتدى ADO.NET العام) الموضوع:تأجير سيارات بسائق في طرابزون وأوزنجول بواسطة: (تسويق خمسة) :: (منتدى ADO.NET العام) الموضوع:مرشد سياحي عربي مع سيارة في اسطنبول ، تركيا بواسطة: (تسويق خمسة) :: (منتدى ADO.NET العام) الموضوع:تأجير سيارات بسائق في اسطنبول بواسطة: (تسويق خمسة) :: (منتدى ADO.NET العام) الموضوع:أسهل طريقة لإستئجار سيارة في طرابزون بواسطة: (تسويق خمسة) :: (منتدى ADO.NET العام) الموضوع:سائق خاص في اسطنبول بواسطة: (تسويق خمسة) :: (منتدى ADO.NET العام) الموضوع:تأجير سيارات بسائق وبدون سائق في طرابزون وأوزنجول ، تركيا بواسطة: (تسويق خمسة) :: (منتدى ADO.NET العام) الموضوع:تأجير سيارات بسائق في اسطنبول بواسطة: (تسويق خمسة) :: (منتدى ADO.NET العام) الموضوع:مرشد سياحي مع سيارة في أوزنجول بواسطة: (تسويق خمسة)


راديو القرآن

المواضيع المثبته: (منتدى Microsoft SQL Server) الموضوع:ما المقصود بتقنية replication بواسطة: (SQL Student) :: (منتدى الكتب و المقالات) الموضوع:هل فكرت يوما أن تستغني عن شريط أوامر الأكسيس ؟ بواسطة: (alasomed) :: (منتدى Microsoft SQL Server) الموضوع:كتب SQL server بواسطة: (m.atassi) :: (منتدى Borland Delphi) الموضوع:تحويل الأرقام إلى نص بواسطة: (مهند عبادي) :: (منتدى Microsoft Excel) الموضوع:open office بواسطة: (ramies) :: (منتدى مبرمجي Microsoft Visual C#.NET) الموضوع:موسوعة الأكواد بواسطة: (fmo_82) :: (منتدى برمجة التقارير) الموضوع:كيف ربط الكرستال ربورت بالنت2008 بواسطة: (raaddawood) :: (منتدى مبرمجي ASP.NET) الموضوع:كتاب تصميم موقع اخباري بواسطة: (م.محمد الساعدي) :: (قسم الدروس و الدورات) الموضوع:دورة مجانية في الفجوال بيسك دوت نيت و خاصة بالمبتدئين بواسطة: (ITPROGRAMMER) :: (منتدى برمجة الجرافكس) الموضوع:مجموعة دروس لتعليم الدايركت اكس بواسطة: (alaa gomaa) :: (القسم العام) الموضوع:كل موضوع تم شرحه فيديو هنا بواسطة: (startnet) :: (منتدى Microsoft Visual Basic) الموضوع:الموضوع الشامل عن جهاز الباركود BarCode بواسطة: (Max Bayne) :: (منتدى ADO.NET العام) الموضوع:شرح ado.net بواسطة: (شهرزاد) :: (منتدى مبرمجي لغة جافا JAVA) الموضوع:درس : الاستثناءات في جافا Exceptions بواسطة: (nardien28) :: (لغة PHP) الموضوع:دوره بي اتش بي بالفيديو php video tutorial بواسطة: (blackmanblack) :: (منتدى الكتب و المقالات) الموضوع:أرغب فى تعلم Microsoft Access وإحترافه بواسطة: (Prince4ever) :: (منتدى الأكسس) الموضوع:فيديو للشروحات والدروس من عمل الاعضاء بواسطة: (startnet) :: (قسم المواضيع المميزة) الموضوع:المحاسب المميز - الاصدار الثاني - محاسبة و مخازن بواسطة: (alalal) :: (منتدى الكتب و المقالات) الموضوع:الجديد في Office Access 2007 بواسطة: (عبد الله الثبيتي) :: (القسم المفتوح) الموضوع:قصص الأنبياء عليهم السلام .جميعا بواسطة: (غزاوية أصيلة)

عدد الصفحات : 2  1  2   > » إضافة رد إضافة موضوع جديد

> درس بعملية تصميم Control خاص وعمل Smart Tag,وإضافة Control إلى property
Bookmark and Share
تقييم الموضوع Label معدل التقيم:0
مشاركةالثلاثاء,13/جمادى الثانية/1429 هـ,10:26 صباحاً
المشاركة #1

خبيرتحليل نظم و دوت نت
الرتبة في المنتدى:عماد

أيقونة المجموعة

المجموعة: مشرفي الموقع
المشاركات: 3849
سجل في:الأحد,17/محرم/1428 هـ,05:57 صباحاً
الدولة:الأردن
رقم العضوية: 19244





السلام عليكم ورحمة الله وبركاته

أهدي هذا الدرس إلى مشرفنا السيد علاء جمعة الذي طلبه مني



درس بعملية تصميم Control خاص وعمل Smart Tag
وإضافة Control إلى property
وهذا ال Control يسمى أداة بعد الانتهاء من تصميمه وبرمجته

ويعتبر تصميم ال Control الشخصي (الخاص) هو مفتاح تقنية التطوير في بيئة .Net



ملاحظة : سيحتوي هذا الدرس على بعض التعريفات والجمل التي لا يمكن ترجمتها إلى العربية لأنها ستفقد معناها والمقصود الرئيسي منها.

مقدمه :لتصميم أي Control يجب أولا نأخذ بعين الاعتبار إضافة المكتبات الخاصة بتصميم control في وقت التصميم (.NET Design-Time Support) وهي :

Imports System
Imports System.IO
Imports System.ComponentModel
Imports System.Drawing.Drawing2D
Imports System.Drawing.Design
Imports System.ComponentModel.Design
Imports System.Windows.Forms.Design



وسنقوم بهذا الدرس بالتعرف على كيفية عمل control خاص وتكوين خصائصه من بيئة .net في وقت التصميم وهنا نحتاج إلى أن نفهم كيفية ترتيب الوراثة لصنع control معين وإضافة controls أخرى وراثيا (مشتق منه) derived classes في خصائصه وإعطاء ال child control الابن خاصية الاحتواء والظهور وأداء عمله وكأنه Control مستقل.

وهنا يجب معرفة انه لا يمكن أن نضيف control إلى أيproperty إلا إذا قمنا بعمل Class له يرث ويحاكي Control معين مثلا label أو button أو أي Control موجودة من ضمن
System.windows.form.control Class وبعد ذلك نحدد لهذا ال class طريقة التصميم له عن طريق عمل (custom class (derived classes يرث (يشتق) من
Inherits System.Windows.Forms.Design.ControlDesigner والتي هي إحدى مكتبات .NET framework حيث أن هذا Class يعطي التصميم الأصلي (default designer ) لل Control أو أن نقوم بعمل اشتقاق (Derive) للتصميم الخاص (Custom designers).

وهنا يتساءل البعض لماذا نقوم بعمل تصميم خاص بما انه يوجد default designer وللإجابة على ذلك : انه من الممكن أن نرغب بعمل التالي :

1- إضافة بعض الأدوات للتصميم.
2- إلغاء الإحداث Event والخصائص property التي لا نريد أن نظهرها في وقت التصميم.(لا نحتاج إليها) أو إعادة كتابتها لتعطيني النتيجة التي ارغب بها.
3- إضافة الدعم Control Support التي تحتوي على Controls أخرى أو Custom Controls
أي عمل imports للمكتبات التي ارغب في استخدامها في أوامر معينة مثلا عند استخدام Data يجب عمل
Imports System.Data.OleDb أو Imports System.Data.Odbc أو
Imports System.Data.SqlClient وفي حالة مثلا استخدمت ثيرد thread يجب عمل Imports System.Threading وهكذا. وكذلك إضافة أوامرها.

وكذلك نقوم بتحديد صفات التصميم Designer attributeونوعيته TypeConverter وماذا يرث Inherits وكذلك سنقوم باستخدام بعض الصفات القياسية Standard Attribute وهي :

Designer : وهي لتحديد اسم Class في وقت التصميم.

DefaultProperty : وهي لتحديد أي Property الافتراضية التي يقف المؤشر عليها عند الضغط على الأداة فمثلا في label يقف المؤشر عند الدخول على Property sheet على Text فيمكن أن نغيرها إلى أي Property نرغب بها بشرط أن تكون ظاهرة ومفعله أي لا نستطيع الذهاب إلى Property تكون Hidden .

DefaultEvent : وهي لتحديد الحدث الافتراضي لل Class .

DefaultValue : وهي لتحديد القيمة الافتراضية لل property.

Category : وهي لوضع ال Property في مجموعة معينه Group من property sheet حيث أن المجموعات مقسمة إلى أقسام ومنها Layout ,Misc,Design,data.... الخ.

Description : وهو لإظهار التعليقات في أسفل Property sheet لل property.

DesignerSerializationVisibility : ونستخدمها في حالة أن property عبارة عن class وتعمل على إظهار property الموجودة في Class ووضعها في property sheet للأداة.

Editor : ونستخدمها في حالة أن property عبارة عن class وهي لتحديد اسم Class آخر الذي يقوم بإظهار الصورة المربع الصغير في property مثل إظهار المربع للون وبجانبها اسم اللون.

Browsable : ونستخدمها في حالة أننا نرغب بتعريف property في Class لاستخدامها داخل ال Class ولا نرغب بإظهارها في property sheet.

TypeConverter : ونستخدمها لتغير نوع property إلى نوع أخر(string,int,point,…).

DesignOnlyAttribute : ونستخدمها عندما نريد استخدام property أثناء design time فقط

ReadOnlyAttribute : ونستخدمها عندما لا نريد تغيير قيمة property أثناء design time

ParenthesizePropertyNameAttribute : ونستخدمها عندما نريد إظهار اسم property داخل أقواس مثلا (Text)
ToolboxItem : ونستخدمها في Class إذا أردنا أن لا نظهر الأداة في Toolbox.

وهذا مثال بسيط على كيفيه استخدامها
 كود

' Attributes نستخدمها في class.
<DefaultEvent("ValueChanged"), _
DefaultProperty("Number")> _
Public Class MyControl
Inherits Control
...
' Attribute نستخدمها في property.
<DefaultValue(False)> _
Public Shadows ReadOnly Property TabStop() As Boolean
...
End Property

' Attribute نستخدمها في property.
<CategoryAttribute("Data")> _
Public ReadOnly Property Number() As Integer
...
End Property

' Attribute نستخدمها في event.
<Description("Raised when the Value displayed changes.")> _
Public Event ValueChanged As EventHandler
...
' في الاساس Text property تكون Browsable(true) ظاهرة.
' واذا اردنا اخفائها Browsable(False)
<Browsable(False)> _
Public Overrides Property [Text]() As String
...
End Property

End Class

ونستخدم هنا Overrides بتعريف أي Property تكون موجودة أصلا في ال Control.
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالثلاثاء,13/جمادى الثانية/1429 هـ,10:44 صباحاً
المشاركة #2

خبيرتحليل نظم و دوت نت
الرتبة في المنتدى:عماد

أيقونة المجموعة

المجموعة: مشرفي الموقع
المشاركات: 3849
سجل في:الأحد,17/محرم/1428 هـ,05:57 صباحاً
الدولة:الأردن
رقم العضوية: 19244



المشروع :

وسنأخذ هنا مثال يعمل في وقت التصميم عن طريق استخدام
Custom Control Designer And a UITypeEditor
وهو كيف نقوم بعمل label خاص للحصول على خلفية بمزج لونين بطريقه (Blend) وإضافتها إلى property عن طريق استخدام UserControl في ال property وعمل Smart Tag للأداة

اولا : نقوم بفتح مشروع جديد Solution ونسميه JbsaControl أو أي اسم وعندها سيقوم بإضافة Form1 اتركه الآن ولا تكتب به شيء.
نقوم بإضافة Class جديد في Solution ولنسميه JbsaLabel هو اسم الأداة التي سنقوم بتصميمها
ثم نضيف المكتبات التالية الرئيسية التي سنحتاجها
 كود

Imports System
Imports System.IO
Imports System.ComponentModel
Imports System.Drawing.Drawing2D
Imports System.Drawing.Design
Imports System.ComponentModel.Design
Imports System.Windows.Forms.Design

إضافة المكتبات الخاصة بالتصميم وهي System.Drawingو System.Design منAdd Reference

ونكتب في بداية ال Class التالي ونحدد ال property الافتراضية له ونحدد اسم ال Class الذي سنقوم بكتابته لكيفية إظهار وتصميم property sheet له وقمت بتسميته LabelDesigner ونضيف به متغيرين سنستخدمهم في ال Class ونحدد القيم الابتدائية للمتغيرات.

 كود

<DefaultProperty("Text"), Serializable(), TypeConverter(GetType(ExpandableObjectConverter)), _
Designer(GetType(LabelDesigner))> _
Public Class JbsaLabel
Inherits Label

Private isInit As Boolean = False
Private _BlendBrush As Blend = New Blend(11)

<System.Diagnostics.DebuggerNonUserCode()> _
Public Sub New(ByVal container As System.ComponentModel.IContainer)
MyClass.New()
If (container IsNot Nothing) Then
container.Add(Me)
End If
End Sub

Public Sub New()
MyBase.New()
Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.DoubleBuffer Or ControlStyles.OptimizedDoubleBuffer, True)
InitializeComponent()
isInit = True
_BlendBrush.Factors = New Single() {0.0!, 0.1!, 0.0!, 0.1!, 0.0!, 0.1!, 0.0!, 0.1!, 0.0!, 0.1!, 0.0!}
_BlendBrush.Positions = New Single() {0.0!, 0.1!, 0.2!, 0.3!, 0.4!, 0.5!, 0.6!, 0.7!, 0.8!, 0.9!, 1.0!}
End Sub

<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub

Private components As System.ComponentModel.IContainer

<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
Me.SuspendLayout()
'
'JbsaLabel
' هذه لتحديد القيم الابتدائية للأداة
Me.Size = New System.Drawing.Size(100, 50)
Me.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
Me.ResumeLayout(False)
End Sub

Enum BackType
Normal = 0
Blend = 1
End Enum

'هنا سنضيف بعض الاوامر والاجراءات وتعريفات

End Class

وأول property سنقوم بعملها هي AutoSize وذلك لاننا نرغب هنا بجعل قيمتها الابتدائية دائما تكون False ولذلك لتحديد الحجم الذي نرغب به وهنا نعرفها Overrides وذلك لانها موجودة اصلا في label Control ونضعها في Class JbsaLabel
 كود

Public Overrides Property AutoSize() As Boolean
Get
Return MyBase.AutoSize
End Get
Set(ByVal value As Boolean)
MyBase.AutoSize = False
Invalidate()
End Set
End Property

وكذلك نستخدم أمر Invalidate()في أي property نقوم بعملها حتى يعيد رسمJbsaLabel بالقيم الجديدة أي أننا نعمل Refresh للأداة.

وبما أننا نرغب بعمل مزج لونين وبزاوية معينة فنحتاج هنا إلى إضافة property لنعرف نوع المزج واللون الأساسي واللون الممزوج وزاوية المزج ونضيفها إلى Class JbsaLabel وهي :
 كود

Private _BackType As BackType = BackType.Normal
<Description("BackGround Style Type"), Category("JbsaLabel"), DefaultValue(BackType.Normal)> _
Public Property BackStyle() As BackType
Get
Return _BackType
End Get
Set(ByVal Value As BackType)
If Me._BackType <> Value Then
_BackType = Value
End If
Invalidate()
End Set
End Property

Private _BackColorBase As Color = Color.Red
<Category("JbsaLabel"), Description("Sets or Gets the Back Color Base"), DefaultValue(GetType(Color), "Red")> _
Public Property BackColorBase() As Color
Get
Return Me._BackColorBase
End Get
Set(ByVal Value As Color)
If Me._BackColorBase.ToArgb <> Value.ToArgb Then
Me._BackColorBase = Value
End If
Invalidate()
End Set
End Property

Private _BackColorBlended As Color = Color.Green
<Category("JbsaLabel"), Description("Sets or Gets the Back Color Blended"), DefaultValue(GetType(Color), "Green")> _
Public Property BackColorBlended() As Color
Get
Return Me._BackColorBlended
End Get
Set(ByVal Value As Color)
If Me._BackColorBlended.ToArgb <> Value.ToArgb Then
Me._BackColorBlended = Value
End If
Invalidate()
End Set
End Property

Private _Dirct As Integer = 0
<[ReadOnly](True), Description("BackGround Blend Angle"), Category("JbsaLabel"), DefaultValue(0)> _
Public Property BlendDirection() As Integer
Get
Return Me._Dirct
End Get
Set(ByVal value As Integer)
If _Dirct <> value Then
_Dirct = value
End If
Invalidate()
End Set
End Property


ألان سنقوم بكتابة ال Class LabelDesigner وسنستخدمه في عمل Smart Tag وهنا دائما نعرف ال Class's على إنها Public وهذا ال Class مشتق وراثيا من ControlDesigner ونستطيع كتابته في ملف مستقل أو أننا نكتبه بعد Class JbsaLabel مباشرة. أي أننا هنا نريد قراءة جميع property sheet ل JbsaLabel وإجراء التغيرات والتعديلات عليها واهم الإجراءات فيه :
PreFilterProperties : ويستخدم لإضافة property أو إلغائها وأوامر أخرى حيث إنني قمت بإلغاء property AutoSize بعدما حددت قيمتها أن تكون دائما False سابقا وأيضا قمت بإلغاء property BackColor لأنني قد أضفت لونين سابقا.
Class أخر LabelCaptionsActionList : سنكتبة بعد هذا ال Class مباشرة وهو لإضافة الproperty ل Smart Tag ، ويمكن الاستغناء عن هذين ال Class إذا أردنا عدم عمل Smart Tag.
 كود

Public Class LabelDesigner
Inherits System.Windows.Forms.Design.ControlDesigner

' وهنا نعرف متغير لتخزين جميع ال property sheet
Private lists As DesignerActionListCollection

Protected Overrides ReadOnly Property EnableDragRect() As Boolean
Get
Return MyBase.EnableDragRect
End Get
End Property
Public Overrides ReadOnly Property ActionLists() As DesignerActionListCollection
Get
If lists Is Nothing Then
lists = New DesignerActionListCollection()
lists.Add(New LabelCaptionsActionList(Me.Component))
End If
Return lists
End Get
End Property

Protected Overrides Sub postFilterProperties(ByVal properties As IDictionary)

MyBase.PostFilterProperties(properties)

End Sub

Protected Overrides Sub PreFilterProperties(ByVal properties As System.Collections.IDictionary)
'properties.Remove("Cursor")
properties.Remove("BackColor")
properties.Remove("AutoSize")
End Sub
End Class


 كود

Public Class LabelCaptionsActionList
Inherits DesignerActionList

Dim _designer As ComponentDesigner
Public MyLabel As JbsaLabel
Private designerActionSvc As DesignerActionUIService = Nothing

Public Sub New(ByVal component As IComponent)
MyBase.New(component)
Me.MyLabel = component
Me.designerActionSvc = CType(GetService(GetType(DesignerActionUIService)), DesignerActionUIService)
End Sub

ألان نعمل ال Property التي نريدها أن تظهر في Smart Tag وهنا نقوم بقراءة Get من ال Class الأصلي وعمل لها Set في ال Class الأصلي الذي قمنا بتعريفه كمتغير اسمه MyLabel في هذا ال Class ولنفترض هنا أريد إضافة اللون ForeColor و BackColorBase و BackColorBlended و BackStyle و Image و Text وهنا نستخدم نفس اسم property التي قمنا بإضافتها ل Class JbsaLabel
 كود

Public Property ForeColor() As System.Drawing.Color
Get
Return MyLabel.ForeColor
End Get
Set(ByVal value As System.Drawing.Color)
MyLabel.ForeColor = value
End Set
End Property

Public Property BackColorBase() As System.Drawing.Color
Get
Return MyLabel.BackColorBase
End Get
Set(ByVal value As System.Drawing.Color)
MyLabel.BackColorBase = value
End Set
End Property

Public Property BackColorBlended() As System.Drawing.Color
Get
Return MyLabel.BackColorBlended
End Get
Set(ByVal value As System.Drawing.Color)
MyLabel.BackColorBlended = value
End Set
End Property

Public Property BackStyle() As JbsaLabel.BackType
Get
Return MyLabel.BackStyle
End Get
Set(ByVal value As JbsaLabel.BackType)
MyLabel.BackStyle = value
End Set
End Property

Public Property Image() As Bitmap
Get
Return MyLabel.Image
End Get
Set(ByVal value As Bitmap)
MyLabel.Image = value
End Set
End Property

Public Property Text() As String
Get
Return MyLabel.Text
End Get
Set(ByVal value As String)
MyLabel.Text = value
End Set
End Property

ألان نحدد شكل Smart Tag وطريقة ترتيب المعلومات به وقمت بإضافة بعض المعلومات عن JbsaLabel مثل موقعه على الفورم location وحجمه size.
 كود

Public Overrides Function GetSortedActionItems() As DesignerActionItemCollection
Dim items As New DesignerActionItemCollection()
items.Add(New DesignerActionHeaderItem("Appearance"))
items.Add(New DesignerActionPropertyItem("Image", "Link Image", "Appearance", "Sets the image to be displayed in the label."))
items.Add(New DesignerActionPropertyItem("Text", "Text String", "Appearance", "Sets the display text."))

items.Add(New DesignerActionHeaderItem("Colors"))
items.Add(New DesignerActionPropertyItem("ForeColor", "Fore Color", "Colors", "Sets the color of the text."))
items.Add(New DesignerActionPropertyItem("BackColorBase", "Back Color Base", "Colors", "Sets the First Color Of BackGround Base."))
items.Add(New DesignerActionPropertyItem("BackColorBlended", "Back Color Blended", "Colors", "Sets the Socund Color Of BackGround Blended."))

items.Add(New DesignerActionHeaderItem("Blend Type"))
items.Add(New DesignerActionPropertyItem("BackStyle", "Back Style Type", "Blend Type", "Sets the Blended Type."))

items.Add(New DesignerActionHeaderItem("Information"))
Dim location As New System.Text.StringBuilder("Location: ")
location.Append(MyLabel.Location)
Dim size As New System.Text.StringBuilder("Size: ")
size.Append(MyLabel.Size)
items.Add(New DesignerActionTextItem(location.ToString(), "Information"))
items.Add(New DesignerActionTextItem(size.ToString(), "Information"))
Return items
End Function
End Class


وهنا نكون قد انهينا عمل Smart Tag للأداة وألان قم بعمل Build للبرنامج واذهب إلى Form1 ومن ToolBox ستجد الأداة JbsaLabel قد أضيفت قم بسحبها إلى الفورم ثم اضغط عليها ستجد انه يوجد مثلث صغير على يمين الأداة Smart Tag اضغط عليه وتستطيع ألان تغير ForeColor و BackColorBase و BackColorBlended و BackStyle و Image و Text منها. وكما في الصورة .

" target="_blank" href="http://www.arabmoheet.net/forum/Members_Upload_Pics/19244/Control1.jpg[/IMG]" target="_blank">http://www.arabmoheet.net/forum/Members_Upload_Pics/19244/Control1.jpg[/IMG]
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالثلاثاء,13/جمادى الثانية/1429 هـ,10:47 صباحاً
المشاركة #3

خبيرتحليل نظم و دوت نت
الرتبة في المنتدى:عماد

أيقونة المجموعة

المجموعة: مشرفي الموقع
المشاركات: 3849
سجل في:الأحد,17/محرم/1428 هـ,05:57 صباحاً
الدولة:الأردن
رقم العضوية: 19244



ألان نبدأ بالقسم الثاني من الدرس : مقدمه :

وهو عمل خلفية لمزج اللونين عن طريق إضافة UserControl يقوم بعمل مزج للألوان Blend وإظهاره كخلفيه ل JbsaLabel ووضعه في Property ، حيث سنقوم بمزج لونين مع بعضهما عن طريق Blend وهي مكتبة معرفه في Drawing وتعمل Blend على مزج للألوان مقسمه من0.00 إلى 1.00 وكذلك تقسم أي مساحة نريد تغطيتها بهذا المزيج من 0.00 إلى 1.00 وهنا قمت بتقسيمها إلى 11 قسم (0.00,0.10,0.20,0.30,0.40,0.50,0.60,0.70,0.80,0.90,1.00) وتستطيع تقسيمها إلى أكثر من ذلك مثلا 0.01,0.02 أي ممكن تقسيمها إلى 100 جزء وإذا اخترت القيمة 0.000 الى 1.000 تستطيع تقسيمها إلى 1000 جزء مثلا 0.001,0.002 ، ولكني هنا اخترت تقسيمها إلى 11 جزء ولذلك سوف أقوم بإضافة 11 TrackBar وتكون min لها صفر و max 100 حيث سوف نقسم TrackBar.value على 100 ليعطيني (0.00 إلى 1.00) وكذلك سأضع بها Picturebox حيث سأقوم بإظهار المزيج بها ونضع بها 11 label لإظهار قيمة كل TrackBar وسأضع Button إغلاق النافذة ، وسأضع TrackBar أخرى لإظهار اللون بزاوية معينة Angle من (min=0 إلى max=180) درجة.

وهذه المكتبة Blend نستطيع عمل بها مشروع كامل حيث يمكن أيضا أن نقوم باستخدام ColorBlend معها وهي لتحديد لون كل جزء قمنا بإنشائه في Blend مثل هذه الصورة.

" target="_blank" href="http://www.arabmoheet.net/forum/Members_Upload_Pics/19244/control2.jpg[/IMG]" target="_blank">http://www.arabmoheet.net/forum/Members_Upload_Pics/19244/control2.jpg[/IMG]

ولكني هنا لن استخدمها في مشروعنا هذا.

الان نبدأ بعمل ال UserControl أضف إلى المشروع UserControl ولنسميه BlendBase وقم بعمل BackGround الذي تريده وقم بإضافة ما ذكرنا سابقا كما في الصورة التالية ورتبها حسب ما تريد.

" target="_blank" href="http://www.arabmoheet.net/forum/Members_Upload_Pics/19244/control3.jpg[/IMG]" target="_blank">http://www.arabmoheet.net/forum/Members_Upload_Pics/19244/control3.jpg[/IMG]

ألان افتح الكود ل UserControl وسميه BlendBarBase وأضف المكتبات التالية لبداية الكود ، وهنا لا نرغب بإظهاره في ToolBox فنجعل قيمتها False ونشتقه من UserControl المعرفه بالنظام.
 كود

Imports System.ComponentModel
Imports System.Drawing.Drawing2D
Imports System.Drawing.Design
Imports System.Windows.Forms.Design
<ToolboxItem(False)> _
Public Class BlendBarBase
Inherits UserControl


وبعدها نضيف التعريفات التي سنستخدمها فيه حيث سنعرف مصفوفة لتخزين 11 قيمة من Trackbar ونعرفها على أنها Blend (مزيج) وهي معرفه ضمن مكتبة Drawing كما ذكرنا سابقا ونعرف اللون الأول والثاني في Property للونين الذين سوف نمزجهم وأخر لزاوية المزج Angle ونضيف New ونحدد به ال Control الاب (Parent)
 كود

Dim bln As Blend = New Blend(11)
Private _color1 As Color = Color.Black
Private _color2 As Color = Color.Red
Private _BlendDir As Integer = 0

Public Sub New()
MyBase.New()
InitializeComponent()
SetStyle(ControlStyles.Opaque, False)
SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
SetStyle(ControlStyles.UserPaint, True)
SetStyle(ControlStyles.ResizeRedraw, True)
Debug.Assert(GetStyle(ControlStyles.ResizeRedraw), "Should be redraw!")
Label12.Text = 100
Label13.Text = 0
End Sub

<Browsable(False)> _
Public Property Color1() As Color
Get
Return Me._color1
End Get
Set(ByVal value As Color)
_color1 = value
End Set
End Property

<Browsable(False)> _
Public Property Color2() As Color
Get
Return Me._color2
End Get
Set(ByVal value As Color)
_color2 = value
End Set
End Property

<Browsable(False)> _
Public Property Direct() As Single
Get
Return Me._BlendDir
End Get
Set(ByVal value As Single)
_BlendDir = value
End Set
End Property


ألان نضيف حدث إطلاق فتح هذا ال Control ونجعله Protected Overrides لانه معرف في كل Control.
 كود

Protected Overrides Function ProcessDialogKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
Return MyBase.ProcessDialogKey(keyData)
End Function


بعدها نكتب حدث تغير قيمة أي من TrackBar الإثنى عشر وسنأخذ هذه القيم من TrackBar وبعدها سنقوم بصنع Bmp صوره حسب هذه القيم وإظهارها في PictureBox1 وذلك عن طريق رسمها باستخدام Brush من نوع LinearGradientBrush ونقوم بعطاء هذه القيم إلى Blend في Brush.Blend فتظهر لنا صورة مزج الالوان.
 كود

Private Sub TrackBar_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TrackBar0.ValueChanged, TrackBar1.ValueChanged, TrackBar2.ValueChanged, TrackBar3.ValueChanged, TrackBar4.ValueChanged, TrackBar5.ValueChanged, TrackBar6.ValueChanged, TrackBar7.ValueChanged, TrackBar8.ValueChanged, TrackBar9.ValueChanged, TrackBar10.ValueChanged, TrackBar11.ValueChanged
Label0.Text = TrackBar0.Value.ToString
Label1.Text = TrackBar1.Value.ToString
Label2.Text = TrackBar2.Value.ToString
Label3.Text = TrackBar3.Value.ToString
Label4.Text = TrackBar4.Value.ToString
Label5.Text = TrackBar5.Value.ToString
Label6.Text = TrackBar6.Value.ToString
Label7.Text = TrackBar7.Value.ToString
Label8.Text = TrackBar8.Value.ToString
Label9.Text = TrackBar9.Value.ToString
Label10.Text = TrackBar10.Value.ToString
Label11.Text = TrackBar11.Value.ToString

bln.Positions(0) = 0.0F
bln.Positions(1) = 0.1F
bln.Positions(2) = 0.2F
bln.Positions(3) = 0.3F
bln.Positions(4) = 0.4F
bln.Positions(5) = 0.5F
bln.Positions(6) = 0.6F
bln.Positions(7) = 0.7F
bln.Positions(8) = 0.8F
bln.Positions(9) = 0.9F
bln.Positions(10) = 1.0F

bln.Factors(0) = CType(TrackBar0.Value / 100.0F, Single)
bln.Factors(1) = CType(TrackBar1.Value / 100.0F, Single)
bln.Factors(2) = CType(TrackBar2.Value / 100.0F, Single)
bln.Factors(3) = CType(TrackBar3.Value / 100.0F, Single)
bln.Factors(4) = CType(TrackBar4.Value / 100.0F, Single)
bln.Factors(5) = CType(TrackBar5.Value / 100.0F, Single)
bln.Factors(6) = CType(TrackBar6.Value / 100.0F, Single)
bln.Factors(7) = CType(TrackBar7.Value / 100.0F, Single)
bln.Factors(8) = CType(TrackBar8.Value / 100.0F, Single)
bln.Factors(9) = CType(TrackBar9.Value / 100.0F, Single)
bln.Factors(10) = CType(TrackBar10.Value / 100.0F, Single)
Direct = CType(TrackBar11.Value, Integer)

Dim Pic As New Bitmap(PictureBox1.Width, PictureBox1.Height)
Dim Rect As New RectangleF(0, 0, PictureBox1.Width, PictureBox1.Height)
Dim _Brush As New Drawing2D.LinearGradientBrush(Rect, Color1, Color2, Direct)
_Brush.Blend = Me.bln
Dim G As Graphics = Graphics.FromImage(Pic)
G.FillRectangle(_Brush, Rect)

PictureBox1.Image = Pic
End Sub
End Class


وهكذا نكون قد انهينا هذا ال Control . وألان سنقوم بعمل Class أخر بعد Class UserControl مباشرة لوراثة طريقة التصميم والإظهار والإغلاق ولنسميه UITypeEditBlend ويجب أن نعرفه على انه مورث عام Public ونعرف به متغير مثل UserControl الذي قمنا بعمله وسميناه BlendBarBase حتى نستطيع إظهاره ونحدد طريقة ظهوره في Function GetEditStyle ونوعية ظهوره UITypeEditorEditStyle.DropDown ومن ثم نحدد طريقة الدخول والتعامل مع ال UserControl عن طريق Function EditValue وباستخدام provider.GetService من نوع IWindowsFormsEditorService وهذه عادة تكون ثابتة لا نغيرها بتغير UserControl .


 كود

Public Class UITypeEditBlend
Inherits UITypeEditor

Public JbsaTbr As BlendBarBase
Public _blend As Blend = New Blend(11)

Dim wfes As IWindowsFormsEditorService

Public Overrides Function ToString() As String
Return Me._blend.ToString
End Function

Overloads Overrides Function GetEditStyle(ByVal context As ITypeDescriptorContext) As UITypeEditorEditStyle
If Not (context Is Nothing) AndAlso Not (context.Instance Is Nothing) Then
Return UITypeEditorEditStyle.DropDown
End If
Return MyBase.GetEditStyle(context)
End Function

Overloads Overrides Function EditValue(ByVal context As ITypeDescriptorContext, ByVal provider As IServiceProvider, ByVal value As Object) As Object

If (context Is Nothing) OrElse (context.Instance Is Nothing) OrElse (provider Is Nothing) Then
Return value
End If

wfes = CType(provider.GetService(GetType(IWindowsFormsEditorService)), IWindowsFormsEditorService)
If (wfes Is Nothing) Then
Return value
End If


وما نغيره هو طبيعة العمل المراد من الكنترول فنعرف هنا متغير بنوع UserControl الذي قمنا بعمله وسميناه BlendBarBase ونقوم بإعطائه القيم الابتدائية ونعرف Handler في حالة الضغط على button الإغلاق .

 كود

JbsaTbr = New BlendBarBase()
_blend = value

If TypeOf (context.Instance) Is JbsaLabel Then
Dim fill As JbsaLabel = CType(context.Instance, JbsaLabel)
JbsaTbr.Color1 = fill.BackColorBase
JbsaTbr.Color2 = fill.BackColorBlended
JbsaTbr.Direct = fill.BlendDirection
JbsaTbr.TrackBar11.Value = fill.BlendDirection
End If

JbsaTbr.TrackBar0.Value = CInt(_blend.Factors(0) * 100)
JbsaTbr.TrackBar1.Value = CInt(_blend.Factors(1) * 100)
JbsaTbr.TrackBar2.Value = CInt(_blend.Factors(2) * 100)
JbsaTbr.TrackBar3.Value = CInt(_blend.Factors(3) * 100)
JbsaTbr.TrackBar4.Value = CInt(_blend.Factors(4) * 100)
JbsaTbr.TrackBar5.Value = CInt(_blend.Factors(5) * 100)
JbsaTbr.TrackBar6.Value = CInt(_blend.Factors(6) * 100)
JbsaTbr.TrackBar7.Value = CInt(_blend.Factors(7) * 100)
JbsaTbr.TrackBar8.Value = CInt(_blend.Factors(8) * 100)
JbsaTbr.TrackBar9.Value = CInt(_blend.Factors(9) * 100)
JbsaTbr.TrackBar10.Value = CInt(_blend.Factors(10) * 100)

AddHandler JbsaTbr.Button1.Click, AddressOf Button1_Click

بعد أن قمنا بتحديد المتغيرات والقيم الابتدائية نطلق حدث الإظهار واخذ القيم التي تغيرت في TrackBar ونعها في المتغير _Blend و BlendDirection .
 كود

wfes.DropDownControl(JbsaTbr)

_blend.Positions(0) = 0.0F
_blend.Positions(1) = 0.1F
_blend.Positions(2) = 0.2F
_blend.Positions(3) = 0.3F
_blend.Positions(4) = 0.4F
_blend.Positions(5) = 0.5F
_blend.Positions(6) = 0.6F
_blend.Positions(7) = 0.7F
_blend.Positions(8) = 0.8F
_blend.Positions(9) = 0.9F
_blend.Positions(10) = 1.0F

_blend.Factors(0) = CType(JbsaTbr.TrackBar0.Value / 100.0F, Single)
_blend.Factors(1) = CType(JbsaTbr.TrackBar1.Value / 100.0F, Single)
_blend.Factors(2) = CType(JbsaTbr.TrackBar2.Value / 100.0F, Single)
_blend.Factors(3) = CType(JbsaTbr.TrackBar3.Value / 100.0F, Single)
_blend.Factors(4) = CType(JbsaTbr.TrackBar4.Value / 100.0F, Single)
_blend.Factors(5) = CType(JbsaTbr.TrackBar5.Value / 100.0F, Single)
_blend.Factors(6) = CType(JbsaTbr.TrackBar6.Value / 100.0F, Single)
_blend.Factors(7) = CType(JbsaTbr.TrackBar7.Value / 100.0F, Single)
_blend.Factors(8) = CType(JbsaTbr.TrackBar8.Value / 100.0F, Single)
_blend.Factors(9) = CType(JbsaTbr.TrackBar9.Value / 100.0F, Single)
_blend.Factors(10) = CType(JbsaTbr.TrackBar10.Value / 100.0F, Single)
If TypeOf (context.Instance) Is JbsaLabel Then
Dim fill As JbsaLabel = CType(context.Instance, JbsaLabel)
fill.BlendDirection = Me.JbsaTbr.TrackBar11.Value
End If

EditValue = _blend

JbsaTbr.Dispose()
JbsaTbr = Nothing
Return _blend
End Function

' هذا الكود ايضا يكون ثابت عند استخدام أي كنترول اذا وضعنا زر اغلاق فيه
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
If Not (wfes Is Nothing) Then
wfes.CloseDropDown()
End If
End Sub

'هذا الكود ايضا يكون ثابت عند استخدام أي كنترول
Public Overloads Overrides Function GetPaintValueSupported(ByVal context As System.ComponentModel.ITypeDescriptorContext) As Boolean
Return True
End Function



وسنكتب الإجراء الذي يقوم بعملية رسم الصورة بجانب Property عن طريق استخدام الأمر PaintValue ونقوم بعملها حسب ما نرغب بإظهاره بجانب Property.

 كود

Public Overloads Overrides Sub PaintValue(ByVal e As System.Drawing.Design.PaintValueEventArgs)
Try
If TypeOf (e.Context.Instance) Is JbsaLabel Then
Dim fill As JbsaLabel = CType(e.Context.Instance, JbsaLabel)
Dim Brush As New LinearGradientBrush(e.Bounds, fill.BackColorBase, fill.BackColorBlended, fill.BlendDirection)
Brush.Blend = fill.BlendStyle
e.Graphics.FillRectangle(Brush, e.Bounds)
ToString()
End If
Catch ex As Exception
End Try
End Sub
End Class


وهكذا نكون قد انتهينا من UserControl وال Class المحاكي له.

وسنرجع إلى ال Class الرئيسي JbsaLabel لنكمله وذلك بإضافة أخر Property وهي إضافة ال UserControl الى ال Property ولنسميها BlendStyle ونحدد المحاكي لها UITypeEditBlend الذي قمنا بعمله سابقا
 كود

<Category("JbsaLabel"), Description("Sets or Gets the Blend"), _
Editor(GetType(UITypeEditBlend), GetType(UITypeEditor))> _
Public Property BlendStyle() As Blend
Get
Return Me._BlendBrush
End Get
Set(ByVal Value As Blend)
Me._BlendBrush = Value
Invalidate()
End Set
End Property

قم بعمل Build للبرنامج واذهب إلى ال Property BlendStyle واضغط عليها فسيعمل UserControl
ويظهر بهذا الشكل :

" target="_blank" href="http://www.arabmoheet.net/forum/Members_Upload_Pics/19244/control4.jpg[/IMG]" target="_blank">http://www.arabmoheet.net/forum/Members_Upload_Pics/19244/control4.jpg[/IMG]

والان سنقوم بإعادة كتابة بعض الإحداث الموجودة أصلا في Label ولذلك سنستخدم Protected Overrides لإعادة رسم الخلفية و Text في JbsaLabel ووضعت في كل حدث أمر لتنفيذ إجراء معين ، أي انه في حالة حدوث أي تغيير في OnPaintBackground أقوم في إعادة رسم الصورة (الخلفية) وفي حالة إطلاق حدث OnPaint أقوم بإعادة رسم الصورة في JbsaLabel وإعادة رسم Text وهذا الحدث يطلق عند تنفيذ أي أمر Refresh أو Invalidate أو Move أو ReSize ......الخ

 كود

Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaintBackground(pevent)
If isInit And Not IsNothing(Me.FindForm) Then
SetBackImage()
End If
End Sub

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
If isInit Then
e.Graphics.DrawImage(bmpBACK, 0, 0)
DrawText(e)
End If
End Sub

وألان سنكتب الإجراء الذي ينشأ صورة الخلفية SetBackImage()وفي هذا الاجراء اخذت بعين الاعتبار اننا نريد رسم Image المحددة في Property وهنا اقوم برسم الخلفية حسب ما تم اختياره normal أو Blend

 كود

Dim bmpBACK As New Bitmap(1, 1)
Private Sub SetBackImage()
Dim bb As Brush
If Me.Width = 0 Or Me.Height = 0 Then Exit Sub
Dim G As Graphics = Nothing
Try
bmpBACK = New Bitmap(Me.BackgroundImage)
Catch
bmpBACK = New Bitmap(Me.Width, Me.Height)
G = Graphics.FromImage(bmpBACK)
Dim llr As New RectangleF(0, 0, Me.Width, Me.Height)
Select Case BackStyle
Case BackType.Normal
bb = New SolidBrush(Me.BackColorBase)
Case BackType.Blend
Dim bb1 As New Drawing2D.LinearGradientBrush(llr, Me.BackColorBase, Me.BackColorBlended, Me.BlendDirection)
If Not IsNothing(Me.BlendStyle) Then
bb1.Blend = Me.BlendStyle
End If
bb = bb1
Case Else
bb = New TextureBrush(New Bitmap(bmpBACK, Me.Width, Me.Height))
End Select
G.FillRectangle(bb, llr)
If Not IsNothing(Me.Image) Then
Dim xx As Integer = 0
Dim yy As Integer = 0
Select Case Me.ImageAlign
Case ContentAlignment.TopLeft
xx = 0 : yy = 0
Case ContentAlignment.TopCenter
yy = 0
xx = (Me.Size.Width - Me.Image.Width) / 2
Case ContentAlignment.TopRight
yy = 0
xx = (Me.Size.Width - Me.Image.Width)
Case ContentAlignment.MiddleLeft
yy = (Me.Size.Height - Me.Image.Height) / 2
xx = 0
Case ContentAlignment.MiddleCenter
yy = (Me.Size.Height - Me.Image.Height) / 2
xx = (Me.Size.Width - Me.Image.Width) / 2
Case ContentAlignment.MiddleRight
yy = (Me.Size.Height - Me.Image.Height) / 2
xx = (Me.Size.Width - Me.Image.Width)
Case ContentAlignment.BottomLeft
yy = (Me.Size.Height - Me.Image.Height)
xx = 0
Case ContentAlignment.BottomCenter
yy = (Me.Size.Height - Me.Image.Height)
xx = (Me.Size.Width - Me.Image.Width) / 2
Case ContentAlignment.BottomRight
yy = (Me.Size.Height - Me.Image.Height)
xx = (Me.Size.Width - Me.Image.Width)
End Select
G.DrawImage(Me.Image, xx, yy, Me.Image.Width, Me.Image.Height)
End If
End Try
G.Dispose()
End Sub


وألان نقوم بكتابة الإجراء DrawText الذي يقوم باعادة رسم Text وهنا بما أنني أقوم برسم Text فلا استطيع استخدام TextAlign لان رسم Text نستخدم فيه StringFormat ولذلك قمت بعمل Function StrFor لتحويلها من TextAlign الى StringFormat
 كود

Private Sub DrawText(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim llr As New RectangleF(0, 0, Me.Width, Me.Height)
Dim br As Brush = New SolidBrush(Me.ForeColor)
e.Graphics.DrawString(Me.Text, Me.Font, br, llr, StrFor)
End Sub

Private Function StrFor() As StringFormat
Dim sf1 As StringFormat = New StringFormat
Select Case Me.TextAlign
Case ContentAlignment.BottomCenter
sf1.LineAlignment = StringAlignment.Far
sf1.Alignment = StringAlignment.Center
Case ContentAlignment.TopCenter
sf1.LineAlignment = StringAlignment.Near
sf1.Alignment = StringAlignment.Center
Case ContentAlignment.MiddleCenter
sf1.LineAlignment = StringAlignment.Center
sf1.Alignment = StringAlignment.Center
Case ContentAlignment.BottomLeft
sf1.LineAlignment = StringAlignment.Far
sf1.Alignment = StringAlignment.Near
Case ContentAlignment.MiddleLeft
sf1.LineAlignment = StringAlignment.Center
sf1.Alignment = StringAlignment.Near
Case ContentAlignment.TopLeft
sf1.LineAlignment = StringAlignment.Near
sf1.Alignment = StringAlignment.Near
Case ContentAlignment.BottomRight
sf1.LineAlignment = StringAlignment.Far
sf1.Alignment = StringAlignment.Far
Case ContentAlignment.MiddleRight
sf1.LineAlignment = StringAlignment.Center
sf1.Alignment = StringAlignment.Far
Case ContentAlignment.TopRight
sf1.LineAlignment = StringAlignment.Near
sf1.Alignment = StringAlignment.Far
End Select
sf1.HotkeyPrefix = Drawing.Text.HotkeyPrefix.Show
Return sf1
End Function


وهكذا نكون قد انهينا مشروعنا وهذه صورة توضح المخطط للبرنامج وطريقة ترابطه مع بعضه ، ولو قمت بتنفيذ الخطوات بالترتيب وتجميع الكود وبنفس الأسماء ستحصل على المشروع كاملا.

" target="_blank" href="http://www.arabmoheet.net/forum/Members_Upload_Pics/19244/control5.jpg[/IMG]" target="_blank">http://www.arabmoheet.net/forum/Members_Upload_Pics/19244/control5.jpg[/IMG]

تمنياتي للجميع بالتوفيق.

للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالثلاثاء,13/جمادى الثانية/1429 هـ,04:33 مساءً
المشاركة #4

مشرف سابق لمنتدى VB.NET ADO.NET
الرتبة في المنتدى:لواء

أيقونة المجموعة

المجموعة: المشرفين القدامى
المشاركات: 1592
سجل في:الثلاثاء,26/شعبان/1427 هـ,09:40 صباحاً
الدولة:الأردن
رقم العضوية: 13584



والله شو بدنا نقول غير بارك الله فيك اخونا الغالي JBSA
ونعم الخبراء في منتدانا الغالي
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,14/جمادى الثانية/1429 هـ,01:52 صباحاً
المشاركة #5

خبيرتحليل نظم و دوت نت
الرتبة في المنتدى:عماد

أيقونة المجموعة

المجموعة: مشرفي الموقع
المشاركات: 3849
سجل في:الأحد,17/محرم/1428 هـ,05:57 صباحاً
الدولة:الأردن
رقم العضوية: 19244





السلام عليكم ورحمة الله وبركاته

شكرا لك اخي ITPROGRAMMER وبارك الله فيك وجزاك الله خيرا
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,14/جمادى الثانية/1429 هـ,02:23 صباحاً
المشاركة #6

الرتبة في المنتدى:ملازم أول

أيقونة المجموعة

المجموعة: الأعضاء
المشاركات: 265
سجل في:الأحد,07/ذو الحجة/1428 هـ,06:42 صباحاً
الدولة:السعودية
رقم العضوية: 40511



تعجز الكلمات عن التعبير..

لا استطيع ان اقول لك سوا
الله يزيدك من واسع فضله

تقبل تحياتي
صائب
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأحد,18/جمادى الثانية/1429 هـ,03:31 صباحاً
المشاركة #7

مشرف عام
الرتبة في المنتدى:عقيد

أيقونة المجموعة

المجموعة: مشرفي الموقع
المشاركات: 727
سجل في:الثلاثاء,24/فر/1428 هـ,07:30 صباحاً
الدولة:مصر
رقم العضوية: 21334



ما شاء الله عليك يابو جهاد
فعلا تستحق ان تكون خبيرا بالمنتدى , فهذا الدرس يعبر فعلا عن ابداعك وقوتك البرمجيه بارك الله فيك والف شكر
وان شاء الله سيتم تثبيت الدرس لكى يستفيد به الجميع .

للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالسبت,27/جمادى الأولى/1432 هـ,11:58 صباحاً
المشاركة #8

الرتبة في المنتدى:رقيب

أيقونة المجموعة

المجموعة: الأعضاء
المشاركات: 29
سجل في:الجمعة,26/جمادى الأولى/1432 هـ,01:29 مساءً
الدولة:أثيوبيا
رقم العضوية: 98011



رائع يا استاذ يا خبير
بارك الله بك


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالجمعة,07/شعبان/1432 هـ,12:26 صباحاً
المشاركة #9

الرتبة في المنتدى:رقيب

أيقونة المجموعة

المجموعة: الأعضاء
المشاركات: 44
سجل في:الأحد,01/شوال/1430 هـ,05:00 صباحاً
الدولة:أثيوبيا
رقم العضوية: 91998



السلام عليكم ورحمة الله وبركاته
أخ جبس دائما مبدع
ومواضيع قمة في الروعة
ولا سيما أداة التحكم بحجم ومكان الكنترول
جزاكم الله خيرا

ولكن عندي سؤال حول إنشاء الأدوات

قمت بعمل أداة "تريف يو" وأضفت لها العناصر وجعلت مسج بكس يعود بقمة النود المحددة
والسؤال هو كيف أعرف متغير يعود لي باسم النود المحددة

هذا مثال مرفق
أرجو أن أجد حلا لهذه المشكلة
المشروع
الأداة


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأحد,09/شعبان/1432 هـ,02:41 مساءً
المشاركة #10

خبيرتحليل نظم و دوت نت
الرتبة في المنتدى:عماد

أيقونة المجموعة

المجموعة: مشرفي الموقع
المشاركات: 3849
سجل في:الأحد,17/محرم/1428 هـ,05:57 صباحاً
الدولة:الأردن
رقم العضوية: 19244






اي متغير تريد ان يظهر في الاداة يجب ان تعرفة public

اما بالنسبة لبرنامجك فتستطع تعريف حدث لتعرف انه تغير الاختيار مع قيمة هذا الاختيار (عصفورين بحجر واحد)

عرف في بداية الكونترول
 Public Event Nodeselected(ByVal e As String)


وفي حدث اختيار النود
 Private Sub TreeView1_Afterselect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.Afterselect
        ' MsgBox(e.Node.Text)
        'هنا السؤال كيف أعرف متغير يعود بقيمة النود المحددة واستخدمها في البرنامج
        '  I جربت هذه الطريقة وما نفعت عندما استجدم الأداة في البرنامج لا أجد المتغير  
        'I = e.Node.Text
        RaiseEvent Nodeselected(e.Node.Text)
    End Sub


الان في برنامجك

سيظهر الحدث الذي قمنا بانشائة Nodeselected ونستخدمه بهذه الطريقة
Private Sub UserControl11_Nodeselected(ByVal e As String) Handles UserControl11.Nodeselected
        MsgBox(e)
    End Sub


تحياتي للجميع
ابو سامر
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة

    

عدد المتصفحين لهذا المنتدى «1»: (الضيوف «1» - المتخفون «0»)
الأعضاء «0»: .

عدد الصفحات : 2  1  2   > » إضافة رد جديد إضافة موضوع جديد



 
الوقت الأن:اليوم,12:17 مساءً بتوقيت القدس المحتلة

Powered By arabmoheet v3.1

منتديات المحيط العربي  -  راسلنا  -   أعلى
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)