PDA

View Full Version : سوال: ذخیره کردن وضعیت چک باکس های روی فرم



JaVa
سه شنبه 24 بهمن 1391, 15:13 عصر
سلام و درود بر شما.

دوستان من با استفاده از کد زیر وضعیت 9 تا چک باکس رو ذخیره کردم(فعال یا غیر فعال)


Dim ind As Integer
ind = 0
Dim ar(9) As Integer
Dim LevelAccess As String = "" 'سطح دسترسی
For Each ctrl As Control In GroupBox2.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 8
LevelAccess = LevelAccess + ar(a).ToString()
Next


که در آخر رشته از 0 و 1 داخل LevelAccess قرار می گیره.

در فرم ویرایش هم برای اینکه این 0 و 1 ها رو که وضعیت هر چک باکس رو مشخص می کنه رو ربط بدم به هر چک باکس از کد زیر استفاده می کنم.


Dim ind, i As Integer
Dim s(9) As String
ind = 0

For i = 1 To 9
s(i) = (Mid(DGV1.CurrentRow.Cells(4).Value, i, 1))
Next

For Each ctrl As Control In GroupBox1.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 s(ind) = "1" Then
chk.Checked = True
Else
chk.Checked = False
End If
ind += 1
End If
Next


حالا متاسفانه مشکلی که وجود داره اینه که هر 0 و 1 مربوط به هر چک باکس رو فعال نمی کنه.

یعنی اگه مثلا 00001 چک باکس اولی رو فعال میکنه وقتی می خوام برعکس موضوع باشه میاد چک باکس مثلا 4 رو فعال می کنه

اگه موضوع رو متوجه نشدید بگید تا بیشتر توضیح بدم.

با تشکر

فرید نجفلو
سه شنبه 24 بهمن 1391, 16:04 عصر
سلام بر آقا مختار دات نت عزیز
شما بهتره برای Tag هر کدوم از چک باکس هاتون یک عدد بدید که نشان دهنده موقعیت بیت اون هست
یعنی مال اولی میشه 0 ، دومی 1 و نهم 8 (اندیس ها از صفر شروع میشن)

حالا به جای متغیر ind از (Cint(Chk.Tag استفاده کنید

با این روش موقعیت و ترتیب اضافه شدن چک باکس ها هم تاثیری در محاسبات شما نداره

JaVa
سه شنبه 24 بهمن 1391, 17:44 عصر
فرید جان ممنون از لطفتون.

برای قسمت اول یعنی ذخیره سازی سطح دسترسی دیگه به ترتیب 0101010 ک وجود دارند به ترتیب قرار گرفتن کنترل های روی فرم ذخیره می شن:لبخندساده:
این شکلی:


Dim ind As Integer
ind = 0
Dim ar(9) As String
Dim LevelAccess As String = "" 'سطح دسترسی
For Each ctrl As Control In GroupBox2.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(CInt(chk.Tag)) = "1"
Else
ar(CInt(chk.Tag)) = "0"
End If
ind += 1
End If
Next

For a As Integer = 0 To 8
LevelAccess = LevelAccess + ar(a).ToString()
Next


حالا عکس این موضوع :

Dim s(9) As String
For i = 1 To 9
s(i) = (Mid(DGV1.CurrentRow.Cells(4).Value, i, 1))
Next

Dim ind As Integer = 0
For Each ctrl As Control In GroupBox1.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 s(ind) = "1" Then
chk.Tag(ind).Checked = True
Else
chk.Tag(ind).Checked = False
End If
ind += 1
End If
Next


خط 14 این خطا رو میگیره : Public member 'Checked' on type 'Char' not found.

من از صبح تا حالا دارم روش کار می کنم دیگه قاط زدم:افسرده:

فرید نجفلو
سه شنبه 24 بهمن 1391, 21:42 عصر
مختار جان فکر کنم اشباه متوجه شدی
تو قسمت اول نباید Tag رو مقدار دهی کنی ، در واقع تو دیزاینر بهش مقدار می دی (مثلا مثل Text چک باکس) تا همیشه ثابت بمونه



خط 14 این خطا رو میگیره : Public member 'Checked' on type 'Char' not found.

این خطوط رو :
If s(ind) = "1" Then chk.Tag(ind).Checked = True
Else
chk.Tag(ind).Checked = False
End If


با این خط عوض کن:
chk.Checked = (s(CInt(chk.Tag))="1"))

و همون طور که گفتم تو هیچ کدوم از کدهات به ind احتیاج نداری

JaVa
سه شنبه 24 بهمن 1391, 22:35 عصر
فرید جان بازم اون چک باکس هایی که باید فعال بشن نمیشن و اون هایی که باید فعال نش فعال میشن.(خطا همیشه رو 2 تا چک باکس وجود داره)


Dim s(9) As String
For i = 1 To 9
s(i) = (Mid(DGV1.CurrentRow.Cells(4).Value, i, 1))
Next

For Each ctrl As Control In GroupBox1.Controls
If TypeOf ctrl Is DevComponents.DotNetBar.Controls.CheckBoxX Then
Dim chk As DevComponents.DotNetBar.Controls.CheckBoxX
chk = DirectCast(ctrl, DevComponents.DotNetBar.Controls.CheckBoxX)
chk.Checked = (s(chk.Tag) = "1")
End If
Next

shahryari
چهارشنبه 25 بهمن 1391, 10:39 صبح
چک باکس های خود دات نت رو امتحان کنید ببینید باز همین مشکل است؟؟؟

JaVa
چهارشنبه 25 بهمن 1391, 10:45 صبح
چک باکس های خود دات نت رو امتحان کنید ببینید باز همین مشکل است؟؟؟
سلام.

دوست گرامی یه بار همشون رو چک کردم از نوع دات نت بار هستند.

با تشکر

shahryari
چهارشنبه 25 بهمن 1391, 10:55 صبح
سلام.

دوست گرامی یه بار همشون رو چک کردم از نوع دات نت بار هستند.

با تشکر

منظورم اینه که در یک فرم دیگر (بصورت ازمایشی) چک باکس های خود دات نت را با همبن کدها تست کنید ببینید بازم مشکل هست؟
یک مورد دیگر را نیز چک کنید و اون هم اینه که ببینید تمام چک باکس ها داخل گروپ باکس قرار دارند؟

JaVa
چهارشنبه 25 بهمن 1391, 11:33 صبح
منظورم اینه که در یک فرم دیگر (بصورت ازمایشی) چک باکس های خود دات نت را با همبن کدها تست کنید ببینید بازم مشکل هست؟
یک مورد دیگر را نیز چک کنید و اون هم اینه که ببینید تمام چک باکس ها داخل گروپ باکس قرار دارند؟

آخر(مشکلش ) رو فهمیدم.:تشویق:

خصیصه Tag کنترل CheckBox باید از 1 شروع بشه:چشمک:

تشکر از همه ی دوستان

فرید نجفلو
چهارشنبه 25 بهمن 1391, 21:25 عصر
خصیصه Tag کنترل CheckBox باید از 1 شروع بشه:چشمک:

می دونی چرا؟!

چون با اینکه اندیس ها از 0 شروع میشن تو متغیرت رو از 1 پر کردی یعنی اولین فضا رو خالی گذاشتی (مقدار i رو ببین)

اگه Tag ها رو از 0 شروع کنی می تونی اولین حلقه رو حذف و این کد رو بنویسی:


Dim s(9) As String

Dim PrmsStr As String =Cstr(DGV1.CurrentRow.Cells(4).Value)
For Each ctrl As Control In GroupBox1.Controls
If TypeOf ctrl Is DevComponents.DotNetBar.Controls.CheckBoxX Then
Dim chk As DevComponents.DotNetBar.Controls.CheckBoxX
chk = DirectCast(ctrl, DevComponents.DotNetBar.Controls.CheckBoxX)
chk.Checked = (PrmsStr (Cint(chk.Tag)) = "1"c)
End If
Next

در ضمن از کدهات معلومه Option Strict رو off کردی ، سعی کن همیشه تو پروژه هات On باشه تا در صد خطاها (ی معمولا سهوی) پایین بیاد