تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] تجميل شكل القوائم ؟
#11
اعتقد ان السر هنا :-

إقتباس :..... Handles ToolStripMenuItem3.Paint, ToolStripMenuItem2.Paint, ToolStripMenuItem1.Paint
حسب ماقلت انك اضفت نوافذ منسدلة اخرى فلازم تضيف handle . اما بواسطة الطريقة الي فوق او بالكود التالي :-

إقتباس :AddHandler event, AddressOf eventhandler

عذرا اخي sooriaty03 ردك تزامن مع ردي
الرد }}}
تم الشكر بواسطة: sooriaty03
#12
بل على العكس نورت أخي محمد
الرد }}}
تم الشكر بواسطة: الشاكي لله
#13
الف شكر اخي
Sooriaty على اجابتك

بارك الله فيك
[/align]

تم تعديل الكود على النحو المذكور اعلاه

[align=left]
كود :
Private Sub AllSeparators(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles ToolStripMenuItem3.Paint, ToolStripMenuItem1.Paint, ToolStripMenuItem4.Paint, ToolStripMenuItem2.Paint
        ''معرفة الفاصل  الذي يتم رسمه حاليا
        Dim CurrentToolStripSeparator As ToolStripSeparator = DirectCast(sender, ToolStripSeparator)

        ''تعبئة الخلفية باللون المطلوب
        e.Graphics.FillRectangle(New System.Drawing.SolidBrush(CurrentToolStripSeparator.BackColor), e.ClipRectangle)

        ToolStripMenuItem4.BackColor = System.Drawing.ColorTranslator.FromHtml("#C0FFC0")
        ToolStripMenuItem4.ForeColor = Color.Black


        ToolStripMenuItem2.BackColor = System.Drawing.ColorTranslator.FromHtml("#C0FFC0")
        ToolStripMenuItem2.ForeColor = Color.Black

        ToolStripMenuItem3.BackColor = System.Drawing.ColorTranslator.FromHtml("#C0FFC0")
        ToolStripMenuItem3.ForeColor = Color.Black

        ToolStripMenuItem1.BackColor = System.Drawing.ColorTranslator.FromHtml("#C0FFC0")
        ToolStripMenuItem1.ForeColor = Color.Black

        'تحديد أبعاد  الفاصل
        Dim Y As Integer = CInt(e.ClipRectangle.Height / 2)
        Dim X1 As Integer = IIf(CurrentToolStripSeparator.RightToLeft = Windows.Forms.RightToLeft.Yes, 0, 30)
        Dim X2 As Integer = IIf(CurrentToolStripSeparator.RightToLeft = Windows.Forms.RightToLeft.Yes, e.ClipRectangle.Width - 30, e.ClipRectangle.Width)

        ''رسم الفاصل
        e.Graphics.DrawLine(New Pen(CurrentToolStripSeparator.ForeColor), X1, Y, X2, Y)


    End Sub[/align]

والحمد لله نجح الامر

الف شكر

شكرا اخي
الشاكي لله على اجابتك
إقتباس :حسب ماقلت انك اضفت نوافذ منسدلة اخرى فلازم تضيف handle . اما بواسطة الطريقة الي فوق او بالكود التالي :-

إقتباس :AddHandler event, AddressOf eventhandler

بصراحة لم افهم كيفية تطبيق طريقتك

ممكن ان تعدل على المثال التالي المرفق
حتى تتضح الصورة اكثر، ونتعلم اكثر

بارك الله فيك


الملفات المرفقة
.zip   WindowsApplication1_2.zip (الحجم : 56.54 ك ب / التحميلات : 107)
الرد }}}
تم الشكر بواسطة: الشاكي لله
#14
الطريقة هذي يدوية

إقتباس :Private Sub AllSeparators(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles ToolStripMenuItem3.Paint, ToolStripMenuItem2.Paint, ToolStripMenuItem1.Paint


لو انك حبيت تضيف Handle معاهم بالكود (اي وقت الrun time) قم بهذا :
كود :
AddHandler ToolStripMenuItem3.Paint, AddressOf AllSeparators

هي مجرد معلومة . اعتقد مابتستفيد منها في حالتك لأنك بتضيف الToolStripMenuItem وقت التصميم وليس في run-time
الرد }}}
تم الشكر بواسطة: kafi2030 , sooriaty03
#15
السلام عليكم ورحمة الله وبركاته

أخي الكريم
ترتيب الكود عندك - وإن كان يعمل جيدا - ولكنه برمجيا خاطئ...
وذلك لأنك وضعت كود تغيير الألوان داخل حدث الرسم للأدوات، فكلما قمت بالضغط على القائمة سيقوم البرنامج بإطلاق حدث الرسم وبالتالي تغيير الألوان للأدوات مرة أخرى، والصحيح أنك تقوم بتغيير الألوان في حدث Form1_Load كما يلي:

كود :
Private Sub AllSeparators(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles ToolStripMenuItem1.Paint, ToolStripMenuItem2.Paint, ToolStripMenuItem3.Paint, ToolStripMenuItem4.Paint
        'معرفة الفاصل  الذي يتم رسمه حاليا
        Dim CurrentToolStripSeparator As ToolStripSeparator = DirectCast(sender, ToolStripSeparator)
        'تعبئة الخلفية باللون المطلوب
        e.Graphics.FillRectangle(New System.Drawing.SolidBrush(CurrentToolStripSeparator.BackColor), e.ClipRectangle)
        'تحديد أبعاد  الفاصل
        Dim Y As Integer = CInt(e.ClipRectangle.Height / 2)
        Dim X1 As Integer = IIf(CurrentToolStripSeparator.RightToLeft = Windows.Forms.RightToLeft.Yes, 0, 30)
        Dim X2 As Integer = IIf(CurrentToolStripSeparator.RightToLeft = Windows.Forms.RightToLeft.Yes, e.ClipRectangle.Width - 30, e.ClipRectangle.Width)
        'رسم الفاصل
        e.Graphics.DrawLine(New Pen(CurrentToolStripSeparator.ForeColor), X1, Y, X2, Y)
    End Sub
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        ToolStripMenuItem1.BackColor = System.Drawing.ColorTranslator.FromHtml("#C0FFC0")
        ToolStripMenuItem1.ForeColor = Color.Black

        ToolStripMenuItem2.BackColor = System.Drawing.ColorTranslator.FromHtml("#C0FFC0")
        ToolStripMenuItem2.ForeColor = Color.Black

        ToolStripMenuItem3.BackColor = System.Drawing.ColorTranslator.FromHtml("#C0FFC0")
        ToolStripMenuItem3.ForeColor = Color.Black

        ToolStripMenuItem4.BackColor = System.Drawing.ColorTranslator.FromHtml("#C0FFC0")
        ToolStripMenuItem4.ForeColor = Color.Black

    End Sub

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

كود :
Private Sub AllSeparators(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs)
        'معرفة الفاصل  الذي يتم رسمه حاليا
        Dim CurrentToolStripSeparator As ToolStripSeparator = DirectCast(sender, ToolStripSeparator)
        'تعبئة الخلفية باللون المطلوب
        e.Graphics.FillRectangle(New System.Drawing.SolidBrush(CurrentToolStripSeparator.BackColor), e.ClipRectangle)
        'تحديد أبعاد  الفاصل
        Dim Y As Integer = CInt(e.ClipRectangle.Height / 2)
        Dim X1 As Integer = IIf(CurrentToolStripSeparator.RightToLeft = Windows.Forms.RightToLeft.Yes, 0, 30)
        Dim X2 As Integer = IIf(CurrentToolStripSeparator.RightToLeft = Windows.Forms.RightToLeft.Yes, e.ClipRectangle.Width - 30, e.ClipRectangle.Width)
        'رسم الفاصل
        e.Graphics.DrawLine(New Pen(CurrentToolStripSeparator.ForeColor), X1, Y, X2, Y)
    End Sub
    

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        SetColors(MenuStrip1.Items)
    End Sub

    Private Sub SetColors(ByVal Items As ToolStripItemCollection)
        Try
            For Each Item In Items
                Item.BackColor = System.Drawing.ColorTranslator.FromHtml("#C0FFC0")
                Item.ForeColor = Color.Black
                If TypeOf Item Is ToolStripSeparator Then
                    AddHandler DirectCast(Item, ToolStripSeparator).Paint, AddressOf AllSeparators
                Else
                    If Item.HasDropDownItems Then
                        SetColors(Item.DropDownItems)
                    End If
                End If
            Next
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub


وكما تلاحظ فإن أول خطوة قمنا بها أننا أزلنا الكلمة Handles وما بعدها، بعد ذلك قمنا بعمل وظيفة تقوم بالمرور على جميع عناصر القائمة وتغير ألوانهم وبعد ذلك يفحص نوع العنصر فإذا كان Separator فإنه سيعرف حدث الرسم الخاص به باستخدام الكلمة AddHandler.

الآن جرب الكود الجديد وقم بتغيير الألوان في وضع التصميم وبعد ذلك قم بتنفيذ البرنامج، ستجد أن الألوان عادت كما كانت...
الرد }}}
تم الشكر بواسطة: الشاكي لله , kafi2030
#16
الف الف شكر
اخي Sooriaty على نصحيتك الغالية

بارك الله فيك

تم تجريب كلا الطريقتين، وهما تعملان بكل نجاح

ولكن لفت نظري بالنسبة للطريقة الثانية / طريقة الاخ الشاكي لله، بان اللون الاخضر للمنسدلة، طغى على عنوان المنسدلة، مما يحدث تشويه بجمال ال Menu
فهل بالامكان تعديل الكود بحيث لا تتأثر رؤوس القوائم المنسدلة باللون الاخضر

تم ارفاق صورتين، واحدة للطريقة الاولى ( طريقة الاخ / Sooriaty) - صورة 99
والثانية للطريقة الثانية ( طريقة الاخ / الشاكي لله) - صورة 100

ارجو المقارنة بين الصورتين، وهل بالامكان تعديل الكود تبع طريقة الاخ الشاكي لله


الملفات المرفقة صورة/صور
       
الرد }}}
تم الشكر بواسطة:
#17
السلام عليكم ورحمة الله وبركاته

تفضل أخي تم تعديل الكود

كود :
Private Sub AllSeparators(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs)
        'معرفة الفاصل  الذي يتم رسمه حاليا
        Dim CurrentToolStripSeparator As ToolStripSeparator = DirectCast(sender, ToolStripSeparator)
        'تعبئة الخلفية باللون المطلوب
        e.Graphics.FillRectangle(New System.Drawing.SolidBrush(CurrentToolStripSeparator.BackColor), e.ClipRectangle)
        'تحديد أبعاد  الفاصل
        Dim Y As Integer = CInt(e.ClipRectangle.Height / 2)
        Dim X1 As Integer = IIf(CurrentToolStripSeparator.RightToLeft = Windows.Forms.RightToLeft.Yes, 0, 30)
        Dim X2 As Integer = IIf(CurrentToolStripSeparator.RightToLeft = Windows.Forms.RightToLeft.Yes, e.ClipRectangle.Width - 30, e.ClipRectangle.Width)
        'رسم الفاصل
        e.Graphics.DrawLine(New Pen(CurrentToolStripSeparator.ForeColor), X1, Y, X2, Y)
    End Sub
    
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        For Each Item As ToolStripMenuItem In MenuStrip1.Items
            If Item.HasDropDownItems Then
                SetColors(Item.DropDownItems)
            End If
        Next
    End Sub

    Private Sub SetColors(ByVal Items As ToolStripItemCollection)
        Try
            For Each Item In Items
                Item.BackColor = System.Drawing.ColorTranslator.FromHtml("#C0FFC0")
                Item.ForeColor = Color.Black
                If TypeOf Item Is ToolStripSeparator Then
                    AddHandler DirectCast(Item, ToolStripSeparator).Paint, AddressOf AllSeparators
                Else
                    If Item.HasDropDownItems Then
                        SetColors(Item.DropDownItems)
                    End If
                End If
            Next
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub


بالتوفيق
الرد }}}
تم الشكر بواسطة: الشاكي لله , kafi2030


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيفية إظهار القوائم الغير مختارة في الليست بوكس أمجد وضاح 2 1,958 08-01-20, 11:39 PM
آخر رد: أمجد وضاح
  القوائم الجانبية السيد الجوهري 0 1,144 12-03-18, 11:54 AM
آخر رد: السيد الجوهري
  [سؤال] تجميل شكل الفورم بطريقة معينة Mido9 2 4,307 11-10-13, 05:18 AM
آخر رد: Mido9
  كيف السبيل الى تجميل واجهة البرنامج؟ kafi 6 3,766 23-07-13, 11:04 PM
آخر رد: programmer

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


يقوم بقرائة الموضوع: