تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] تجميل شكل القوائم ؟
#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


الردود في هذا الموضوع
تجميل شكل القوائم ؟ - بواسطة kafi2030 - 28-11-13, 01:14 AM
RE: تجميل شكل القوائم ؟ - بواسطة sooriaty03 - 28-11-13, 12:00 PM
RE: تجميل شكل القوائم ؟ - بواسطة ali.alfoly - 28-11-13, 12:38 PM
RE: تجميل شكل القوائم ؟ - بواسطة kafi2030 - 29-11-13, 12:14 AM
RE: تجميل شكل القوائم ؟ - بواسطة ali.alfoly - 29-11-13, 11:06 AM
RE: تجميل شكل القوائم ؟ - بواسطة kafi2030 - 05-12-13, 12:52 AM
RE: تجميل شكل القوائم ؟ - بواسطة kafi2030 - 09-12-13, 02:20 AM
RE: تجميل شكل القوائم ؟ - بواسطة sooriaty03 - 09-12-13, 03:14 PM
RE: تجميل شكل القوائم ؟ - بواسطة kafi2030 - 09-12-13, 11:02 PM
RE: تجميل شكل القوائم ؟ - بواسطة sooriaty03 - 09-12-13, 11:35 PM
RE: تجميل شكل القوائم ؟ - بواسطة sooriaty03 - 09-12-13, 11:51 PM
RE: تجميل شكل القوائم ؟ - بواسطة kafi2030 - 10-12-13, 12:46 AM
RE: تجميل شكل القوائم ؟ - بواسطة sooriaty03 - 10-12-13, 09:48 AM
RE: تجميل شكل القوائم ؟ - بواسطة kafi2030 - 11-12-13, 01:04 AM
RE: تجميل شكل القوائم ؟ - بواسطة sooriaty03 - 11-12-13, 04:14 AM

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

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


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