(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 يتشنج