الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تلوين الأزرار بطريقة منظمة.

مغلق
بدأه محمد عبد العليم في 2 نوفمبر 2004 · 10 رد · 1,148 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أقوم حالياً بكتابة User Control مثل الـ Color Picker لإستخدامه في احدى التطبيقات،و هذا الـ User Control عبارة عن 128 زر (Button) بألوان مختلفة.

أريد أن أعين لكل زر لون له برمجياً، و قد استعنت بالفئة Random لألون كل الأزرار في الـ User Control عن طريق الحدث Load:

   Private rand As New Random()
   Private Tt As New ToolTip()

    Private Sub ColorPicker_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim btn As Button
        For Each btn In Me.pnlColors.Controls
            btn.BackColor = Color.FromArgb(rand.Next(255), rand.Next(255), rand.Next(255))
            Tt.SetToolTip(btn, btn.BackColor.Name)
        Next
   End Sub

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

المشكلة اني أريد ترتيب الأزرار الملونة بصورة منظمة أي اللون البرتقالي بجانب البرتقالي الداكن و هكذا....

بمعنى آخر أريد درجات اللون المحدد بجانب بعضها و في صف واحد.

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

هل هناك حل ؟؟؟؟

شكراً لكم.

تم تعديل هذه المشاركة بواسطة محمد عبد العليم في 2 نوفمبر 2004 في 02:40

رأس الحكمة الإيمان بالله

#2

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

أعتقد بأنه من الأسهل التعامل مع الأزرار ال 128 في برنامجك عندما تخلق هذه الأزرار في Run Time وليس وقت التصميم.، وهو ما قمت به في محاولتي.

المشكلة التي واجهتني وبالتالي ستحل قضيتك إن فهمتها هي كيف التعامل مع مصفوفات الألوان (الأحمر، الأزرق، الأخضر) وترتيبها بشكل منطقي... أعتقد بأن مكمن حل المشكلة بكاملها يقع هناك، في كودي التالي تلاحظ بأنني قمت بعملية sort لمصفوفات الألوان (بعد إنشاءها عشوائياً) وهذا يعطي الأزرار ألوان مرتبة بالطبع (وهذا حل لمشكلتك الأولى)، ولا يوجد أي زرين يحملان نفس درجة اللون (وهي مشكلتك الثانية)... ولكن: طيف اللون ليس كاملاً على الإطلاق (أرجو محاولة تشغيل الكود لتفهم ما أقصد)... قم بعملية ال Sort بطريقة خلاقة وسيكون في ذلك كما أسلفت حل للقضية.

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

Private rand As New Random
    Private Btn(128) As Button
    Dim Red(128), Blue(128), Green(128) As Integer
    Private btnColor(128) As Color

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ClientSize = New Size(512, 256)
        FormBorderStyle = FormBorderStyle.FixedToolWindow
        Text = "Color Picker"

        For x As Integer = 0 To 128
            Red(x) = rand.Next(0, 255)
            Blue(x) = rand.Next(0, 255)
            Green(x) = rand.Next(0, 255)
        Next


       
        Array.Sort(Red)
        Array.Sort(Blue)
        Array.Sort(Green)

        For x As Integer = 0 To 128
            btnColor(x) = Color.FromArgb(Red(x), Blue(x), Green(x))
        Next


        For x As Integer = 1 To 128
            Btn(x) = New Button
            With Btn(x)
                .Size = New Size(32, 32)
                .Left = ((x - 1) Mod 16) * .Width
                .Top = ((x - 1) \ 16) * .Height
                Btn(x).BackColor = btnColor(x - 1)
            End With
            Controls.Add(Btn(x))
        Next

    End Sub

WindowsApplication2.zip

Learn Japanese :>>> http://www.nouben.com/

#3

فعلاً .... الحل كان في الـ () Array.Sort ...

جزاك الله خيراً يا أخي، أهنئك على الحل الرائع....يا سلاااام... أول مشاركة لك هنا في المنتدى و تكون الحل لمشكلتي...شكراً لك كثيراً....

اقتباس
وأرجوك إن استطعت حل المشكلة أن تقوم بإطلاعنا عليه في هذه الصفحة.

لقد قمت أنت مشكوراً بحل المشكلة الكبرى، أما الباقي فسهل بإذن الله، و سوف أضع الـ User Control في هذه الصفحة عندما أفرغ منه بإذن الله للمنفعة العامة.

شكراً لك مرة أخرى..

رأس الحكمة الإيمان بالله

#4

ليه بتاخدو ارقام عشوائية

ممكن تاخد تكرار عادى من 0 ل 255 من غير اى ارقام عشوائية

ahabdeen.jpg

<marquee>

مش موجود بصفة دايمة للامتحانات

</marquee>

#5

لأني أريد أن يتم تلوين الأزرار بطريقة عشوائية كل مرة يعمل فيها التطبيق...

فقط أجربه بهذه الطريقة و ان كانت لافائدة منها، أستخدم طريقتك المذكورة

رأس الحكمة الإيمان بالله

#6

طيب ليه استخدمت

Array.Sort();

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

ahabdeen.jpg

<marquee>

مش موجود بصفة دايمة للامتحانات

</marquee>

#7

لا سيدي، لا يمكن أن تكون النتائج هي نفسها في كلمة مرة فذلك مستحيل، تكون فقط الدالة العشوائية الأولى هي نفسها لأن Seed Value تأتي من ساعة الجهاز ولكن الدوال الأخرى تكون عشوائية، وعندما نقوم بعملية Sort للمصفوفة (التي تكون الدالة العشوائية الاولى فيها) فإن هذه الدالة تصبح في مكان لا يمكن تخمينه. ويمكن أيضاً زيادة العشوائية إن إستدعينا الدالة Randomize() في بداية تحميل الفورم.

أما ما يظهر بأنه نفس الألوان فهو عدم قدرتنا على التمييز بين الألوان القريبة من بعضها، فمثلاً قد يكون اللون الأول (1,5,2) واللون الثاني يكون (2,8,3) وهنا يصعب على العين تمييز الإختلاف بينهما.

Learn Japanese :>>> http://www.nouben.com/

#8

يعنى مش شرط ان

Array.Sort();

ترتب كل مرة بنفس الترتيب؟؟؟؟؟؟؟

ahabdeen.jpg

<marquee>

مش موجود بصفة دايمة للامتحانات

</marquee>

#9

بالفعل.....

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

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

رأس الحكمة الإيمان بالله

#10

فقط ملحوظة صغيرة على دالة Random، فقد قمت أنا(وقام كذلك الأستاذ محمد) بإستخدام:

Rand.Next(0,255)

الحقيقة ولمزيد من الدقة يجب أن نستخدم مع الألوان الصيغة التالية:

rand.next(0,256)

لأن Maximum Value أي الرقم 255 (في الكود الأول) لا يمكن أن يظهر في الأرقام العشوائية المنشأة (بينما يظهر الرقم صفر)...

Learn Japanese :>>> http://www.nouben.com/

#11
جزاك الله الف خير اخى HMS

الفريق المصري للبرمجة

تحليل وتصميم برامج قواعد بيانات لاتصال بينا masry4u@hotmail.com

هذا الموضوع مغلق.

مواضيع مشابهة