عندي على الفورم عده ادوات من نوع CheckBox
واريد عندالضغط على اي اداة من هذه الادوات ان يكتب اسم الاداة واسماء جميع الادوات CheckBox التي تم التعليم عليها
ليكون التكست بوكس يحتوي اسماء جميع الادوات التي تم وضع علامة الصح عليها فقط
هل يمكن ذلك
شاكرا لكم تفاعلكم
يمكن ذلك بعدة طرق و ابسطها باضافة مؤقت(تايمر) بحيث يكون مفعل و ضع فيه الكود التالي كمثال
PHP كود :
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick TextBox1.Text = (String.Join(", ", From cb In Controls.OfType(Of CheckBox)() Where cb.Checked Select cb.Text)) End Sub
31-05-23, 06:35 PM (آخر تعديل لهذه المشاركة : 31-05-23, 06:37 PM {2} بواسطة fouadhdfouad.)
Imports System
Imports System.Collections.Generic
Imports System.Windows.Forms
Public Class Form1
Private checkboxes As List(Of CheckBox)
Public Sub New()
InitializeComponent()
checkboxes = New List(Of CheckBox)() From {CheckBox1, CheckBox2, CheckBox3, CheckBox4}
End Sub
Private Sub CheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged, CheckBox4.CheckedChanged
TextBox1.Clear()
Dim selectedCheckboxes As List(Of String) = GetSelectedCheckboxes()
For Each checkboxName As String In selectedCheckboxes
TextBox1.AppendText(checkboxName & Environment.NewLine)
Next
End Sub
Private Function GetSelectedCheckboxes() As List(Of String)
Dim selectedCheckboxes As New List(Of String)()
For Each checkbox As CheckBox In checkboxes
If checkbox.Checked Then
selectedCheckboxes.Add(checkbox.Text)
End If
Next
Return selectedCheckboxes
End Function
End Class
كود :
Imports System
Imports System.Collections.Generic
Imports System.Windows.Forms
Public Class Form1
Private checkboxes As List(Of CheckBox)
Public Sub New()
InitializeComponent()
checkboxes = New List(Of CheckBox)() From {CheckBox1, CheckBox2, CheckBox3, CheckBox4}
End Sub
Private Sub CheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged, CheckBox4.CheckedChanged
TextBox1.Clear()
Dim selectedCheckboxes As List(Of String) = GetSelectedCheckboxes()
For Each checkboxName As String In selectedCheckboxes
TextBox1.AppendText(checkboxName & Environment.NewLine)
Next
End Sub
Private Function GetSelectedCheckboxes() As List(Of String)
Dim selectedCheckboxes As New List(Of String)()
For Each checkbox As CheckBox In checkboxes
If checkbox.Checked Then
selectedCheckboxes.Add(checkbox.Text)
End If
Next
Return selectedCheckboxes
End Function
End Class
01-06-23, 03:38 AM (آخر تعديل لهذه المشاركة : 01-06-23, 03:53 AM {2} بواسطة سعود.)
مشاركة لكم احببت وضع المثال البسيط
عدل الحدث (heckBox1_CheckedChanged) الى :
PHP كود :
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox6.CheckedChanged, CheckBox5.CheckedChanged, CheckBox4.CheckedChanged, CheckBox3.CheckedChanged, CheckBox2.CheckedChanged, CheckBox1.CheckedChanged Dim c As CheckBox = DirectCast(sender, CheckBox) If (c.Checked = True And txtchecked.Text.Contains(c.Text) = False) Then txtchecked.AppendText(c.Text & " ") Else txtchecked.Text = txtchecked.Text.Replace((" " & c.Text), "") End If End Sub
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
01-06-23, 05:16 AM (آخر تعديل لهذه المشاركة : 01-06-23, 05:19 AM {2} بواسطة سعود.)
الكود رغم بساطته اتعبني معه كل شوي اكتشف غلط او قصور!
آخر كلام :
كود :
Public Class Form1
Dim ax, ay As Integer, dr As Boolean
Dim sr As Integer = Screen.PrimaryScreen.Bounds.Right
Dim sb As Integer = Screen.PrimaryScreen.WorkingArea.Bottom
Dim lst As New List(Of String)
Private Sub rep(f As Form)
If f.Left < 0 Then f.Left = 0
If f.Top < 0 Then f.Top = 0
If f.Right >= sr Then f.Left = sr - f.Width
If f.Bottom >= sb Then f.Top = sb - f.Height
End Sub
Private Sub Form1_MouseUp(sender As Object, e As MouseEventArgs) Handles MyBase.MouseUp, Label1.MouseUp
dr = False
rep(Me)
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
rep(Me)
End Sub
Private Sub btnclose_Click(sender As Object, e As EventArgs) Handles btnclose.Click
Close()
End Sub
Private Sub btnmin_Click(sender As Object, e As EventArgs) Handles btnmin.Click
WindowState = FormWindowState.Minimized
End Sub
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox6.CheckedChanged, CheckBox5.CheckedChanged, CheckBox4.CheckedChanged, CheckBox3.CheckedChanged, CheckBox2.CheckedChanged, CheckBox1.CheckedChanged
Dim c As CheckBox = DirectCast(sender, CheckBox)
If (c.Checked = True And lst.Contains(c.Text & " ") = False) Then
lst.Add(c.Text & " ")
ElseIf (c.Checked = False And lst.Contains(c.Text & " ") = True) Then
lst.Remove(c.Text & " ")
End If
lbl.Text = "Controls Count: " & pnlc.Controls.Count & " | " & lst.Count
txtchecked.Clear()
For Each h As String In lst
If txtchecked.Text.Contains(h) = False Then
txtchecked.AppendText(h)
End If
Next
End Sub
Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles MyBase.MouseMove, Label1.MouseMove
If dr Then
Left = MousePosition.X - ax
Top = MousePosition.Y - ay
End If
End Sub
Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown, Label1.MouseDown
If e.Button = MouseButtons.Left Then
dr = True
ax = MousePosition.X - Left
ay = MousePosition.Y - Top
End If
End Sub
End Class
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
Private Sub rep(f As Form)
If f.Left < 0 Then f.Left = 0
If f.Top < 0 Then f.Top = 0
If f.Right >= sr Then f.Left = sr - f.Width
If f.Bottom >= sb Then f.Top = sb - f.Height
End Sub
Private Sub Form1_MouseUp(sender As Object, e As MouseEventArgs) Handles MyBase.MouseUp, Label1.MouseUp
dr = False
rep(Me)
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
rep(Me)
End Sub
Private Sub btnclose_Click(sender As Object, e As EventArgs) Handles btnclose.Click
Close()
End Sub
Private Sub btnmin_Click(sender As Object, e As EventArgs) Handles btnmin.Click
WindowState = FormWindowState.Minimized
End Sub
Private Sub CheckBoxes_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox6.CheckedChanged, CheckBox5.CheckedChanged, CheckBox4.CheckedChanged, CheckBox3.CheckedChanged, CheckBox2.CheckedChanged, CheckBox1.CheckedChanged
Dim c As CheckBox = DirectCast(sender, CheckBox)
If c.Checked = True AndAlso Not lst.Contains(c.Text & " ") Then
lst.Add(c.Text & " ")
ElseIf c.Checked = False AndAlso lst.Contains(c.Text & " ") Then
lst.Remove(c.Text & " ")
End If
lbl.Text = "Controls Count: " & pnlc.Controls.Count & " | " & lst.Count
txtchecked.Clear()
For Each h As String In lst
If Not txtchecked.Text.Contains(h) Then
txtchecked.AppendText(h)
End If
Next
End Sub
Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles MyBase.MouseMove, Label1.MouseMove
If dr Then
Left = MousePosition.X - ax
Top = MousePosition.Y - ay
End If
End Sub
Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown, Label1.MouseDown
If e.Button = MouseButtons.Left Then
dr = True
ax = MousePosition.X - Left
ay = MousePosition.Y - Top
End If
End Sub
أفضل وأبسط حل هو الذي طرحه الأخ (asmarsou):
وهذا هو ولكن مع تعديل بسيط ،
حيث أنه من الخطأ استخدام تايمر في هذه الحالة :
بالاضافة لترتيب التحديد بحسب اسم الأداة .
الكود بعد التعديل هو :
كود :
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles _
CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged,
CheckBox4.CheckedChanged, CheckBox5.CheckedChanged, CheckBox6.CheckedChanged
TextBox1.Text = (String.Join(", ",
From cb In Controls.OfType(Of CheckBox)()
Where cb.Checked
Order By cb.Text
Select cb.Text))
الـ OfType هي عبارة عن Extension Methods
الـ OfType هذة الـ Extension تم إضافتها بواسطة الـ NET. أي انها تحديث للـ NET. وليست Extension مخصصة ألتي يظيفها المبرمج في المشروع.
أي انها لم تكن موجودة في الإصدارات القديمة من الـ NET. ، وتم إضافتها لاحقاً على شكل ( Extension )
لذلك إذا قمت بوضع الماوس على كلمة OfType سيظهر لك أنها Extension
سبب هذة المشاركة ليس حل موضوع المشاركة ولكن أحببت أن اتكلم عن الـ Extension
الجدير بالذكر انه يمكنك عمل الـ Extension الخاص بك، في ملف Module منفصل ، تضع فيه كل الـ Extension الخاصة بك.
يمكنك إلصاق أي Function أو Sub بأي أسم انت تراه ، وإلصاقة في أي كلاس موجود في كامل الـ NET.
مثلاً الـ CheckBox عبارة عن كلاس
وكما تعلم هذا الكلاس لا يحتوي على Function باسم ()ChangeMyColorToRed
مثلاً : ()CheckBox1.ChangeMyColorToRed
بإمكانك إنشاء هذة الـ Function وإلصاقها بالكلاس CheckBox
مفيدة جداً جداً ، مثال بسيط على إستخدامي لهذة الـ Extension
الكلاس Image
قمت بإنشاء Function باسم ()ToBytesArray وألصقتها بالكلاس Image
الآن أي صورة Image لدي أستطيع إستخدام الوظيفة ()ToBytesArray عليها لتحويلها إلى مصفوفة بايتات
مثلاً : MyImg صورة
بهذة الطريقة :
()Dim BlaBla As Byte() = MyImg.ToBytesArray
تستطيع إلصاق الكثير من الــ Extension في الكلاس Image على سبيل المثال :
()MyImg.ToBytesArray Function تعود بقيمة من نوع مصفوفة بايتات لتسهيل عملية الحفظ مثلاً في قواعد البيانات
()MyImg.ToStream Function تعود بقيمة من نوع Stream
()MyImg.Print Sub يقوم بإرسال أمر الطباعة إلى الطابعة لطباعة الصورة ( مثلاً )
()MyImg.ToGrayscale Function تعود بقيمة من نوع Image ولكن بعد تحويلها من صورة ملونة إلى صورة بدون ألوان ( تدرجات الرمادي )
()MyImg.ToIcon Function تعود بقيمة من نوع Icon بعد تحويلها من صورة إلى أيقونة
ستسهل عليك أمور كثيرة ، حتى أنها أجمل بكثير ، ومرتبة .
هذا مثال بسيط ، تخيل ماذا يمكن أن تفعل مع هذة الـ Extension
واجهتني مشكلة في الكود المستعمل
Dim c As CheckBox = DirectCast(sender, CheckBox)
If (c.Checked = True And lst.Contains(c.Text & " - ") = False) Then
lst.Add(c.Text & "- ")
ElseIf (c.Checked = False And lst.Contains(c.Text & " - ") = True) Then
lst.Remove(c.Text & " ")
End If
Txtdetails.Text = "Controls Count: " & GroupPanel2.Controls.Count & " | " & lst.Count
Txtdetails.Clear()
For Each h As String In lst
If Txtdetails.Text.Contains(h) = False Then
Txtdetails.AppendText(h)
End If
Next
بعد تفريغ الحقل الذي يحتوى البيانات من محتوياته فانه يحتفظ بالبيانات اريد تفريغ الذاكرة من البيانات لبدء العمل بسجل جديد