منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] مشروع سأحتاج فيه أكثر من ألف 1000 زر ما رأيكم - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [VB.NET] مشروع سأحتاج فيه أكثر من ألف 1000 زر ما رأيكم (/showthread.php?tid=21239)

الصفحات: 1 2 3 4


RE: مشروع سأحتاج فيه أكثر من ألف 1000 زر ما رأيكم - سعود - 04-08-17

إقتباس :أرجوا لو تتكرم وتضع المثال بنسخة أخرى 2010 إذا كانت لديك
انظر للشرح
http://vb4arb.com/vb/showthread.php?tid=13024


RE: مشروع سأحتاج فيه أكثر من ألف 1000 زر ما رأيكم - sniperjawadino - 04-08-17

شكرا لك كثيرا أخي سعود


RE: مشروع سأحتاج فيه أكثر من ألف 1000 زر ما رأيكم - سعود - 04-08-17



مارايك بالمثال الأخير
استخدمت الكود لزرع الازرار وانشاء  احداثها

كود :
Public Class otherForm
   Dim i As Integer = 0
   Dim i2 As Integer = 0
   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 otherForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       For r = 0 To 400
           Dim btn As New Button
           btn.Text = "button-" & r
           btn.Left = i
           btn.Top = i2
           If btn.Right >= (Panel2.Width - btn.Width) Then
               i = 0
               i2 += btn.Height
               Panel2.Controls.Add(btn)
           Else
               Panel2.Controls.Add(btn)
               i += btn.Width
           End If
           AddHandler btn.Click, AddressOf btn_click
       Next

       buttons = Panel2.Controls.Count

   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 btn_click(sender As Object, e As EventArgs)
       ' MsgBox(sender.text)
       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 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 Button1_Click(sender As Object, e As EventArgs) Handles Button1.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 " & Panel2.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 Panel2.Controls.Count - 1
                       Panel2.Controls(i).Text = rows(i)
                       Panel2.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 Button2_Click(sender As Object, e As EventArgs) Handles Button2.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 " & Panel2.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 Panel2.Controls.Count - 1
                       Panel2.Controls(i).Text = rows(i)
                       Panel2.Controls(i).BackColor = setbc(sts(i))
                   Next

               End Using
           End Using
           If con.State = ConnectionState.Open Then con.Close()
       End Using
       buttons += Panel2.Controls.Count

   End Sub

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

       If buttons <= Panel2.Controls.Count Then Button1.PerformClick() : Exit Sub


       buttons -= Panel2.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 " & Panel2.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 ii = 0 To Panel2.Controls.Count - 1
                       Panel2.Controls(ii).Text = rows(ii)
                       Panel2.Controls(ii).BackColor = setbc(sts(ii))
                   Next

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

   End Sub

   Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
       rows.Clear()
       sts.Clear()
       buttons += Panel2.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 " & Panel2.Controls.Count & " * from tb where tid not in (select top " & (1000 - Panel2.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 ii = 0 To Panel2.Controls.Count - 1
                       Panel2.Controls(ii).Text = rows(ii)
                       Panel2.Controls(ii).BackColor = setbc(sts(ii))
                   Next

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

   End Sub
End Class

المثال المعدل مرفق
انظر للفورم الاخر وليس الأول

آخر تعديل

كود :
Public Class otherForm
   Dim i As Integer = 0
   Dim i2 As Integer = 0
   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 otherForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       For r = 0 To 400
           Dim btn As New Button
           btn.Text = "button-" & r
           btn.Left = i
           btn.Top = i2
           If btn.Right >= (Panel2.Width - btn.Width) Then
               i = 0
               i2 += btn.Height
               Panel2.Controls.Add(btn)
           Else
               Panel2.Controls.Add(btn)
               i += btn.Width
           End If
           AddHandler btn.Click, AddressOf btn_click
       Next

       buttons = Panel2.Controls.Count

   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 btn_click(sender As Object, e As EventArgs)
       ' MsgBox(sender.text)
       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
       Me.Refresh()
   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 Button1_Click(sender As Object, e As EventArgs) Handles Button1.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 " & Panel2.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 Panel2.Controls.Count - 1
                       Panel2.Controls(i).Text = rows(i)
                       Panel2.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 Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
       rows.Clear()
       sts.Clear()
       For r = 0 To Panel2.Controls.Count - 1
           Panel2.Controls(r).Text = String.Empty
       Next

       ' buttons += Panel2.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 " & Panel2.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 n = 0 To Panel2.Controls.Count - 1
                   '    Panel2.Controls(n).Text = rows(n)
                   '    Panel2.Controls(n).BackColor = setbc(sts(n))
                   'Next


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


               End Using
           End Using
           If con.State = ConnectionState.Open Then con.Close()
       End Using
       buttons += Panel2.Controls.Count

   End Sub

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

       For r = 0 To Panel2.Controls.Count - 1
           Panel2.Controls(r).Text = String.Empty
       Next

       If buttons <= Panel2.Controls.Count Then Button1.PerformClick() : Exit Sub


       buttons -= Panel2.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 " & Panel2.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 ii = 0 To rows.Count - 1
                       Panel2.Controls(ii).Text = rows(ii)
                       Panel2.Controls(ii).BackColor = setbc(sts(ii))
                   Next

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

   End Sub

   Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
       rows.Clear()
       sts.Clear()
       buttons += Panel2.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 " & Panel2.Controls.Count & " * from tb where tid not in (select top " & (1000 - Panel2.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 ii = 0 To Panel2.Controls.Count - 1
                       Panel2.Controls(ii).Text = rows(ii)
                       Panel2.Controls(ii).BackColor = setbc(sts(ii))
                   Next

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

   End Sub

 
End Class



RE: مشروع سأحتاج فيه أكثر من ألف 1000 زر ما رأيكم - sniperjawadino - 05-08-17

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


RE: مشروع سأحتاج فيه أكثر من ألف 1000 زر ما رأيكم - ابو ليلى - 07-08-17

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

خطر ببالي اجرب الــ PictureBox

المقاعد الاولى محجوزة للاخوة الاعضاء المشاركين بالموضوع  Dodgy

اللي معهم عائلات يروحوا للمقاعد الاخيرة  Confused





RE: مشروع سأحتاج فيه أكثر من ألف 1000 زر ما رأيكم - alsouf - 07-08-17

اخي يتبغي ان يكون البرنامج عملي و ليس ورقة وورد او المفكرة
1-رتب و قسم المجموعة الى صفوف وفي كل صف عدد من المقاعد
2- اجعل عدد الصفوف في (صندوق قائمة ListBox ) و كل عنصر يعرض قائمة تضم عدد المقاعدة
3- اضف عداد و زر حذف او اضافة (يمكنك حذف مقعد تلو الاخر او اضافة عدد للعداد).


RE: مشروع سأحتاج فيه أكثر من ألف 1000 زر ما رأيكم - sniperjawadino - 10-08-17

شكرا كثيرا أخي ابو ليلى على المثال
شكرا لك أخي alsouf


RE: مشروع سأحتاج فيه أكثر من ألف 1000 زر ما رأيكم - viv - 08-05-18

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

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

انا اجربت تجربة بواسطة ListView ولم اجد مشكلة استغرق الامر اجزاء من الثانية



اذا كان الكرسي مثلا غير مشغول تستخدم ايقونة ملونة واذا كان مشغول تسخدم ايقونة سوداء او مختلفة



ولاحظ ايضا ان الاداة ستعفيك من عملية البحث اذا اردت كرسي رقمه في الـ 700 انقر على زر الرقم 7 وسوف تنتقل الى هناك مباشرة .

بالنسبة الى كيف تستخدم الايقونة المناسبة انظر للمثال التالي

PHP كود :
For Int As Integer 1 To 1000
            If Int 
Or Int Or Int 8 Then
                ListView1
.Items.Add(Int.ToString1)
 
           Else
                ListView1
.Items.Add(Int.ToString0)
 
           End If 

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

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



ايضا يمكنك التحكم بحجم الخط كذلك



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


RE: مشروع سأحتاج فيه أكثر من ألف 1000 زر ما رأيكم - عبد العزيز البسكري - 08-05-18

(08-05-18, 06:18 PM)viv كتب : ألف عنصر هو لاشئ ، اننا نجري تجارب على قراءة سجلات من قاعدة بيانات فيها 100 ألف سجل ولا مشكلة ويحتاج هذا الى ثوان واجزاء من الثانية

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

انا اجربت تجربة بواسطة ListView ولم اجد مشكلة استغرق الامر اجزاء من الثانية



اذا كان الكرسي مثلا غير مشغول تستخدم ايقونة ملونة واذا كان مشغول تسخدم ايقونة سوداء او مختلفة



ولاحظ ايضا ان الاداة ستعفيك من عملية البحث اذا اردت كرسي رقمه في الـ 700 انقر على زر الرقم 7 وسوف تنتقل الى هناك مباشرة .

بالنسبة الى كيف تستخدم الايقونة المناسبة انظر للمثال التالي

PHP كود :
For Int As Integer 1 To 1000
            If Int 
Or Int Or Int 8 Then
                ListView1
.Items.Add(Int.ToString1)
 
           Else
                ListView1
.Items.Add(Int.ToString0)
 
           End If 

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

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



ايضا يمكنك التحكم بحجم الخط كذلك



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

السّلام عليكم و رحمة الله و بركاته
أخي الكريم .. لو كان بإمكانك وضع مثال صغير سيكون رائع جدا ما تكرمت بشرحه
تحياتي



RE: مشروع سأحتاج فيه أكثر من ألف 1000 زر ما رأيكم - viv - 08-05-18

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