منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : مشروع سأحتاج فيه أكثر من ألف 1000 زر ما رأيكم
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3 4
(30-07-17, 06:04 PM)silverlight كتب : [ -> ]عليك ان ترسمهم في صورة
إما بشكل أفقي  أو رأسي او ترسمهم مثل ColorPicker او ترسمهم علي هيئة صفوف و أعمدة

مرحبا أخي  silverlight
ممكن توضح لي أكثر 
كيف للصورة أن تعمل ,,,يجب من الضروري وضع أزرار فوقها
وكيف أستعمل ِ   ColorPicker   أو رسمهم علي هيئة صفوف و أعمدة
اجعل طريقة الحجز كما هي الطريقة في حجز رحلات الطيران

خذ فكرة من هذا




وهذه صورة للتوضيح كيف يتم ترقيم المقاعد
لا تقوم بترقيم المقاعد من 1 الى 1000 لكن الصحيح تقوم بترقيم الصفوف وتسمية الاعمدة بحيث يكون رقم المقعد مثلا C55 او  A23  كما يظهر في الصورة

لو ها ترسمهم فعلا سواء علي هيئة صفوف و اعمدة او حتي بشكل أفقي أو رأسي
هنا انت لا تحتاج الي الباتون

لأننا سنتعامل مع الرسم كمصفوفة ومن الممكن التعامل مع المصفوفة في احداث الماوس و بالتالي تحقق هدفك الاساسي وهو خاصية اللمس مثل الباتون

حدد أولا ماهي الأشياء التي تريد رسمها

مثلا:

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

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


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

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

أخي silverlight
فهمت كلامك الآن
فكرة الرسم جميلة لكني لا أريد أن ألتجأ لها إذا كان السبب فقط مسألة شكل أفضل

ما أريده هو برمجة أفضل
و خفة أفضل فالعرض

بالتالي Button أو Label أضن سيكون بنفس النتيجة

أرجوا أن تصحح لي إن أخطأت

شكرا لك أخي HASAN6.0 على المعلومة
سآخد الفكرة بعين الإعتبار
جزاك الله خيرا
اليس التخزين بقاعدة البيانات واستخدام اكواد التصفح مناسبة؟
وماهو المطلوب من اي زر؟
هل اما حجز او اتاحة المقعد؟
(30-07-17, 11:49 PM)سعود كتب : [ -> ]اليس التخزين بقاعدة البيانات واستخدام اكواد التصفح مناسبة؟
وماهو المطلوب من اي زر؟
هل اما حجز او اتاحة المقعد؟

المطلوب من الزر هو الحجز

بالإضافة لعمل LOOP  في كل مرة لتلوين الأزرار المحجوزة
الرسم في حالتك هو الأفضل و الأخف علي البرنامج لكنه الطريق الأصعب

و علي فكرة Label أخف كثيرا من Button

آمل من كل قلبي ان اكون وفقت لتسهيل عليك ولو نسبة قليلة من المهمة.

هذا الفورم كامل
كود :
Public Class Form1
   Dim str As String = "provider=microsoft.ace.oledb.12.0;data source='" & Application.StartupPath & "\db.accdb'"
   Dim buttons As Integer '= Panel1.Controls.Count
   Dim rows As New List(Of String)
   Dim sts As New List(Of Boolean)
   Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click

       Using con As New OleDb.OleDbConnection(str)
           Using cm As New OleDb.OleDbCommand("select count(tid) from tb", con)
               If con.State = ConnectionState.Closed Then con.Open()

               If cm.ExecuteScalar >= 1000 Then
                   If con.State = ConnectionState.Open Then con.Close()

                   MsgBox("لا تحتاج لهذا الاجراء لوجود الف سجل للتجربة")
                   Exit Sub
               End If
           End Using
       End Using






       Button11.Enabled = False
       Using con As New OleDb.OleDbConnection(str)
           If con.State = ConnectionState.Closed Then con.Open()

           For r = 1 To 1000
               Using cm As New OleDb.OleDbCommand("insert into tb(korsi) values(@korsi)", con)
                   cm.Parameters.AddWithValue("@korsi", "korsi_" & r)
                   cm.ExecuteNonQuery()
               End Using
           Next
           If con.State = ConnectionState.Open Then con.Close()
       End Using
       Button11.Enabled = True
   End Sub

   Private Function setbc(ByVal st As Boolean) As Color
       If st = True Then
           Return Color.Red
       Else
           Return Color.YellowGreen
       End If
   End Function
   Private Sub btn_first_Click(sender As Object, e As EventArgs) Handles btn_first.Click
       rows.Clear()
       sts.Clear()

       Using con As New OleDb.OleDbConnection(str)
           If con.State = ConnectionState.Closed Then con.Open()
           Using cm As New OleDb.OleDbCommand("select top " & Panel1.Controls.Count & " * from tb", con)
               Using dr As OleDb.OleDbDataReader = cm.ExecuteReader
                   While dr.Read
                       rows.Add(dr(1))
                       sts.Add(dr(2))
                   End While

                   For i = 0 To Panel1.Controls.Count - 1
                       Panel1.Controls(i).Text = rows(i)
                       Panel1.Controls(i).BackColor = setbc(sts(i))
                   Next

               End Using
           End Using
           If con.State = ConnectionState.Open Then con.Close()
       End Using




   End Sub

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       buttons = Panel1.Controls.Count
   End Sub

   Private Sub Btn_next_Click(sender As Object, e As EventArgs) Handles Btn_next.Click
       ' MsgBox(buttons)


       rows.Clear()
       sts.Clear()
       buttons += Panel1.Controls.Count
       Using con As New OleDb.OleDbConnection(str)
           If con.State = ConnectionState.Closed Then con.Open()
           Using cm As New OleDb.OleDbCommand("select top " & Panel1.Controls.Count & " * from tb where tid not in (select top " & buttons & " tid from tb)", con)
               Using dr As OleDb.OleDbDataReader = cm.ExecuteReader
                   While dr.Read
                       rows.Add(dr(1))
                       sts.Add(dr(2))
                   End While

                   For i = 0 To Panel1.Controls.Count - 1
                       Panel1.Controls(i).Text = rows(i)
                       Panel1.Controls(i).BackColor = setbc(sts(i))
                   Next

               End Using
           End Using
           If con.State = ConnectionState.Open Then con.Close()
       End Using

       ' MsgBox(buttons)

   End Sub
   Private Function replace(ByVal bc As String) As Boolean
       If bc = "Color [YellowGreen]" Then
           Return True
       Else
           Return False
       End If
   End Function
 
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click, Button6.Click, Button7.Click, Button8.Click, Button9.Click, Button10.Click
       Using con As New OleDb.OleDbConnection(str)
           If con.State = ConnectionState.Closed Then con.Open()
           Using cm As New OleDb.OleDbCommand("update tb set st=@st where korsi=@korsi", con)
               cm.Parameters.AddWithValue("@st", replace(sender.backcolor.ToString))
               cm.Parameters.AddWithValue("@korsi", sender.text)
               cm.ExecuteNonQuery()
           End Using
           If con.State = ConnectionState.Open Then con.Close()
       End Using

   End Sub

   Private Sub Btn_priv_Click(sender As Object, e As EventArgs) Handles Btn_priv.Click
       rows.Clear()
       sts.Clear()

       If buttons <= Panel1.Controls.Count Then btn_first.PerformClick() : Exit Sub


       buttons -= Panel1.Controls.Count
       Using con As New OleDb.OleDbConnection(str)
           If con.State = ConnectionState.Closed Then con.Open()
           Using cm As New OleDb.OleDbCommand("select top " & Panel1.Controls.Count & " * from tb where tid not in (select top " & buttons & " tid from tb)", con)
               Using dr As OleDb.OleDbDataReader = cm.ExecuteReader
                   While dr.Read
                       rows.Add(dr(1))
                       sts.Add(dr(2))
                   End While

                   For i = 0 To Panel1.Controls.Count - 1
                       Panel1.Controls(i).Text = rows(i)
                       Panel1.Controls(i).BackColor = setbc(sts(i))
                   Next

               End Using
           End Using
           If con.State = ConnectionState.Open Then con.Close()
       End Using

   End Sub

   Private Sub Btn_last_Click(sender As Object, e As EventArgs) Handles Btn_last.Click
       rows.Clear()
       sts.Clear()
       buttons += Panel1.Controls.Count
       Using con As New OleDb.OleDbConnection(str)
           If con.State = ConnectionState.Closed Then con.Open()
           Using cm As New OleDb.OleDbCommand("select top " & Panel1.Controls.Count & " * from tb where tid not in (select top " & (1000 - Panel1.Controls.Count) & " tid from tb)", con)
               Using dr As OleDb.OleDbDataReader = cm.ExecuteReader
                   While dr.Read
                       rows.Add(dr(1))
                       sts.Add(dr(2))
                   End While

                   For i = 0 To Panel1.Controls.Count - 1
                       Panel1.Controls(i).Text = rows(i)
                       Panel1.Controls(i).BackColor = setbc(sts(i))
                   Next

               End Using
           End Using
           If con.State = ConnectionState.Open Then con.Close()
       End Using

   End Sub
End Class

فقط تفحص الفكرة وقل رايك.
والسلام عليكم ورحمة الله وبركاته
(31-07-17, 08:08 AM)silverlight كتب : [ -> ]الرسم في حالتك هو الأفضل و الأخف علي البرنامج لكنه الطريق الأصعب

و علي فكرة Label أخف كثيرا من Button

و من الأخف  Label أو PicturBox

أعتدر على كثرة أسئلتي
لكن إجاباتك ستغير مسار برمجتي
شكرا لك

(31-07-17, 11:38 PM)سعود كتب : [ -> ]





شكرا كثيرا أخي سعود
لقد أتعبتك أعتذر

أرجوا لو تتكرم وتضع المثال بنسخة أخرى 2010 إذا كانت لديك
لأن 2012 يتشنج
الصفحات : 1 2 3 4