PDA

View Full Version : سوال: دسترسی به 18 کنترل CheckBox و چک کردن خاصیت CheckState



JaVa
یک شنبه 15 مرداد 1391, 19:50 عصر
با سلام و خسته نباشید و...

من توی یکی از فرم هام 18 کنترل CheckBox دارم و میخوام خاصیت CheckState همه ی چک باکس هام رو کنترل کنم اگر CheckState=true مقدار (arr(i مقدار 1 و اگه CheckState=false مقدار (arr(i مقدار 0 بگیرد.

لطفا کمک کنید.:ناراحت::افسرده:

Mani_rf
یک شنبه 15 مرداد 1391, 20:48 عصر
از Foreach برای این کار استفاده کن.
اطلاعات بیشتر = جستجو (بارها و بارها مطرح شده است)

JaVa
یک شنبه 15 مرداد 1391, 20:57 عصر
از Foreach برای این کار استفاده کن.
اطلاعات بیشتر = جستجو (بارها و بارها مطرح شده است)

اینو نوشتم ولی همش صفر چاپ می کنه .


Dim ind As Integer
ind = 0
Dim ar(17) As Integer

For Each ctrl As Control In Me.Controls
If TypeOf ctrl Is CheckBox Then
Dim chk As CheckBox = DirectCast(ctrl, CheckBox)
If chk.Checked = CheckState.Checked Then
ar(ind) = "1"
Else
ar(ind) = "0"
End If
ind += 1
End If
Next

For a As Integer = 0 To 17
Me.Text = Me.Text + ar(a).ToString()
Next

Mani_rf
یک شنبه 15 مرداد 1391, 21:10 عصر
کدی که نوشتی به ظاهر درست میاد اما این نکته رو در نظر بگیر که کد فقط داره کنترل های داخل فرم رو بررسی میکنه. یعنی اگه داخل گروپ یا پنل باشه بررسی نمیشه. اگه داخل یکی از اینها قرار گرفته بجای ME باید اسم اون رو بنویسی

JaVa
یک شنبه 15 مرداد 1391, 21:27 عصر
کدی که نوشتی به ظاهر درست میاد اما این نکته رو در نظر بگیر که کد فقط داره کنترل های داخل فرم رو بررسی میکنه. یعنی اگه داخل گروپ یا پنل باشه بررسی نمیشه. اگه داخل یکی از اینها قرار گرفته بجای ME باید اسم اون رو بنویسی

باز هم صفر چاپ می کنه


Dim ind As Integer
ind = 0
Dim ar(17) As Integer


For Each ctrl As Control In GPanel.Controls
If TypeOf ctrl Is CheckBox Then
Dim chk As CheckBox
chk = DirectCast(ctrl, CheckBox)
If chk.Checked = True Then
ar(ind) = "1"
Else
ar(ind) = "0"
End If
ind += 1
End If
Next

For a As Integer = 0 To 17
Me.Text = Me.Text + ar(a).ToString()
Next

younes221
یک شنبه 15 مرداد 1391, 21:45 عصر
سلام به شکل زیر تغییرش بدین تا درست بشه :


Dim inc As Integer = 0
Dim ar(17) As Integer

For Each ctrl As CheckBox In GroupBox1.Controls
If ctrl.Checked = True Then
ar(inc) = "1"
Else
ar(inc) = "0"
End If
Next

For i As Integer = 0 To 17
Me.Text += ar(i).ToString()
Next

JaVa
یک شنبه 15 مرداد 1391, 21:55 عصر
آقا OK شد .
دلیل مشکل این بود که من از کنترل های دانت بار استفاده می کردم و CheckBox رو شناسایی نم کرد بجاش باید DevComponents.DotNetBar.Controls.CheckBoxX استفاده بکنیم:

Private Sub ButtonX2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonX2.Click
Dim ind As Integer
ind = 0
Dim ar(17) As Integer


For Each ctrl As Control In GPanel.Controls
If TypeOf ctrl Is DevComponents.DotNetBar.Controls.CheckBoxX Then
Dim chk As DevComponents.DotNetBar.Controls.CheckBoxX
chk = DirectCast(ctrl, DevComponents.DotNetBar.Controls.CheckBoxX)
If chk.Checked = True Then
ar(ind) = "1"
Else
ar(ind) = "0"
End If
ind += 1
End If
Next

For a As Integer = 0 To 17
Me.Text = Me.Text + ar(a).ToString()
Next
End Sub


بازم ممنون

the king
یک شنبه 15 مرداد 1391, 22:03 عصر
با سلام و خسته نباشید و...

من توی یکی از فرم هام 18 کنترل CheckBox دارم و میخوام خاصیت CheckState همه ی چک باکس هام رو کنترل کنم اگر CheckState=true مقدار (arr(i مقدار 1 و اگه CheckState=false مقدار (arr(i مقدار 0 بگیرد.

لطفا کمک کنید.:ناراحت::افسرده:

این کد برایش فرفی نمی کنه که CheckBox ها روی خود فرم اند یا داخل سایر کنترل ها نظیر GroupBox یا Panel ، هر جا باشند پیداشون می کنه :

Dim checkBoxes As New List(Of CheckBox)
Dim arr() As Integer
GetCheckBoxes(Me, checkBoxes)
ReDim arr(0 To checkBoxes.Count - 1)
For index As Integer = 0 To arr.Length - 1
arr(index) = IIf(checkBoxes(index).Checked, 1, 0)
Next



Private Sub GetCheckBoxes(ByRef target As Control, ByRef checkBoxes As List(Of CheckBox))
For Each ctl As Control In target.Controls
If TypeOf ctl Is CheckBox Then
checkBoxes.Add(ctl)
Else
GetCheckBoxes(ctl, checkBoxes)
End If
Next
End Sub

JaVa
پنج شنبه 19 مرداد 1391, 00:31 صبح
سلامی دوباره...
(برای اطلاعات بیشتر)

اگه بر عکس این موضوع باشه یعنی رشته رو داشته باشی بخوای بر اساس رشته کنترل ها رو Check or Uncheck کنید.*

موفق باشید.*

the king
پنج شنبه 19 مرداد 1391, 04:18 صبح
سلامی دوباره...
(برای اطلاعات بیشتر)

اگه بر عکس این موضوع باشه یعنی رشته رو داشته باشی بخوای بر اساس رشته کنترل ها رو Check or Uncheck کنید.*

موفق باشید.*

اساسا کد فرقی نمی کنه، کد داخل حلقه For عوض میشه وگرنه بقیه اش همونه.

اگر arr یک آرایه عددی 0 و 1 ئه :

For index As Integer = 0 To arr.Length - 1
checkBoxes(index).Checked = (arr(index) <> 0)
Next


و اگر arr آرایه رشته ای "0" و "1" ئه :

For index As Integer = 0 To arr.Length - 1
checkBoxes(index).Checked = (arr(index) = "1")
Next

JaVa
چهارشنبه 11 بهمن 1391, 16:06 عصر
آقا OK شد .
دلیل مشکل این بود که من از کنترل های دانت بار استفاده می کردم و CheckBox رو شناسایی نم کرد بجاش باید DevComponents.DotNetBar.Controls.CheckBoxX استفاده بکنیم:

Private Sub ButtonX2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonX2.Click
Dim ind As Integer
ind = 0
Dim ar(17) As Integer


For Each ctrl As Control In GPanel.Controls
If TypeOf ctrl Is DevComponents.DotNetBar.Controls.CheckBoxX Then
Dim chk As DevComponents.DotNetBar.Controls.CheckBoxX
chk = DirectCast(ctrl, DevComponents.DotNetBar.Controls.CheckBoxX)
If chk.Checked = True Then
ar(ind) = "1"
Else
ar(ind) = "0"
End If
ind += 1
End If
Next

For a As Integer = 0 To 17
Me.Text = Me.Text + ar(a).ToString()
Next
End Sub


بازم ممنون


دوباره سلام.

من با استفاده از دستوراتی که بالا نوشتم اومدم وضعیت هر چک باکس رو بررسی کردم . اگه چک باکس فعال باشه مقدار 1 و اگه غیر فعال باشه مقدار 0 رو بر می گردونه که با 30 تا چک باکس نتیجه ای به شکل زیر برگشت داده میشه :

000000111100111000000111010010

حالا من می خوام وضعیت رو بر عکس کنم یعنی 30 تا کاراکتر دارم و می خوام بر اساس کاراکتر هایی که بالا هستند چک باکس ها رو فعال یا غیر فعال کنم.

لطفا راهنمایی کنید.

با تشکر

asghar2008
چهارشنبه 11 بهمن 1391, 16:49 عصر
سلام

شما با استفاده از تابع mid اون رشته رو یکی یکی جدا کن .از کد زیر استفاده کن:


Dim s(17) As Integer

For i = 1 To 18
s(i) = (Mid(TextBox1.Text, i, 1))
Next



بعد با استفاده از For each به کنتر ل مقدار بده.


If s(i) = "1" Then
chk.Checked = True
Else
chk.Checked = false
End If