ROSTAM2
شنبه 03 دی 1401, 21:20 عصر
به نام خدا.
سلام.
قبل از هرچیز باید بگم که این یه روش من درآوردیه و اگه روش بهتر یا سوالی دارید در همین تاپیک اعلام کنید:
در این تاپیک با استفاده از یک Enumeration به یک لیست ویو که خصوصیت CheckBoxes از اون True شده آیتم اضافه می شه و سپس با استفاده از رویداد ItemChecked از ListView خصوصیتی که از نوع همون Enumeration هست با توجه به آیتم های انتخابی(CheckedItems) مقدار دهی می شه.
154390
و این هم بگم که Enumeration یک Attribute داره و اون هم Flags هست و هر کدوم از اجزای اون هم یک Attribute برای گرفتن متنی که قراره در لیست نمایش داده بشه می گیرن.
Visual Basic
<Flags()> Public Enum Languages
<AmbientValue("None")> None = 0
<AmbientValue("C#")> CSharp = 1
<AmbientValue("Visual Basic")> VB = 2
<AmbientValue("SQL")> SQL = 4
<AmbientValue("XML")> XML = 8
<AmbientValue("HTML")> HTML = 16
<AmbientValue("C++")> CPP = 32
End Enum
C#
[Flags]public enum Languages
{
[AmbientValue("None")]None = 0,
[AmbientValue("C#")]CSharp =1,
[AmbientValue("Visual Basic")]VB =2,
[AmbientValue("SQL")]SQL=4,
[AmbientValue("XML")]XML =8,
[AmbientValue("HTML")]HTML =16,
[AmbientValue("C++")]CPP=32
}
برای نمایش آیتم ها در لیست (ListView) از رویداد Load از فرم استفاده شده:
Visual Basic
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim Value As Integer = 0
Dim MemInf As MemberInfo
Dim MemAttr As AmbientValueAttribute
For Each member As String In [Enum].GetNames(GetType(Languages))
Value = [Enum].Parse(GetType(Languages), member)
If Value > 0 Then
MemInf = GetType(Languages).GetMember(member).FirstOrDefaul t
MemAttr = MemInf.GetCustomAttributes(GetType(AmbientValueAtt ribute), False).FirstOrDefault
Me.listView1.Items.Add(MemAttr.Value.ToString).Tag = Value
End If
Next
End Sub
C#
private void Form1_Load(object sender, EventArgs e)
{
int Value;
MemberInfo MemInf;
AmbientValueAttribute MemAttr;
foreach (string member in Enum.GetNames(typeof(Languages)))
{
Value = (int)Enum.Parse(typeof(Languages), member);
if (Value > 0) {
MemInf = typeof(Languages).GetMember(member).FirstOrDefault ();
MemAttr = (AmbientValueAttribute)MemInf.GetCustomAttributes( typeof(AmbientValueAttribute), false).FirstOrDefault();
this.listView1.Items.Add(MemAttr.Value.ToString()) .Tag = Value;
}
}
}
با فعال کردن CheckBox از هر آیتم تابع LanguagesValue مقدار آیتم های انتخاب شده رو برای خصوصیت Language فراهم می کنه:
Visual Basic
Function LanguagesValue() As Languages
Dim value% = 0
For Each item As ListViewItem In Me.listView1.CheckedItems
value += CInt(item.Tag)
Next
Return DirectCast(value, Languages)
End Function
C#
Languages LanguagesValue ()
{
int value = 0;
foreach (ListViewItem item in this.listView1.CheckedItems)
{
value += (int)item.Tag;
}
return (Languages)value;
}
که در رویداد ItemChecked از ListView این دستور بکار گرفته شده:
Visual Basic
Private Sub listView1_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles listView1.ItemChecked
Me.Language = LanguagesValue()
Me.Numberlabel.Text = CInt(Me.Language)
Me.Nameslabel.Text = Me.Language.ToString
End Sub
C#
private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
this.Language = LanguagesValue();
this.Numberlabel.Text = ((int)this.Language).ToString();
this.Nameslabel.Text = this.Language.ToString();
}
تا الآن یک مقدار داریم که عددی هست و می تونیم اون عدد رو ذخیره کنیم (که همون مقدار خصوصیت Language به عدد تبدیل بشه) می تونیم برای بازیابی آیتم های انتخاب شده از اون عدد استفاده کنیم:
Visual Basic
Private LanguageValue As Languages
Public Property Language() As Languages
Get
Return LanguageValue
End Get
Set(ByVal value As Languages)
LanguageValue = value
End Set
End Property
C#
public Languages Language { get; set; }
برای ذخیره مقدار عددی از یک متغیر استفاه شده که دسترسی به اون در سطح ماجول هست:
Visual Basic
Dim SavedValue As Integer
C#
int SavedValue;
برای مقدار دهی اون از یک کلید استفاده شده با این کد:
Visual Basic
Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click
Me.SavedValue = CInt(Me.Language)
End Sub
C#
private void button1_Click(object sender, EventArgs e)
{
SavedValue = (int)this.Language;
}
و برای استفاده از مقدار ذخیره شده و فعال شدن مجدد آیتم های لیست طبق مقدار ذخیره شده از متود SetValue استفاده شده:
Visual Basic
Private Sub SetValue(value As Integer)
Dim MemName As String
For Each Item As ListViewItem In Me.listView1.Items
MemName = [Enum].GetName(GetType(Languages), Item.Tag)
Item.Checked = DirectCast(value, Languages).ToString.Contains(MemName)
Next
End Sub
C#
void SetValue(int value)
{
foreach (ListViewItem item in this.listView1.Items)
{
item.Checked = ((Languages)value).ToString().Contains(((Languages )item.Tag).ToString());
}
}
با این روش می تونید یک تک مقدار عددی داشته باشید که برای ذخیره و بازیابی آیتم های انتحاب شده یک مجموعه از CheckBox استفاده کنید.(در دیتابیس یک فیلد از جدول)
سلام.
قبل از هرچیز باید بگم که این یه روش من درآوردیه و اگه روش بهتر یا سوالی دارید در همین تاپیک اعلام کنید:
در این تاپیک با استفاده از یک Enumeration به یک لیست ویو که خصوصیت CheckBoxes از اون True شده آیتم اضافه می شه و سپس با استفاده از رویداد ItemChecked از ListView خصوصیتی که از نوع همون Enumeration هست با توجه به آیتم های انتخابی(CheckedItems) مقدار دهی می شه.
154390
و این هم بگم که Enumeration یک Attribute داره و اون هم Flags هست و هر کدوم از اجزای اون هم یک Attribute برای گرفتن متنی که قراره در لیست نمایش داده بشه می گیرن.
Visual Basic
<Flags()> Public Enum Languages
<AmbientValue("None")> None = 0
<AmbientValue("C#")> CSharp = 1
<AmbientValue("Visual Basic")> VB = 2
<AmbientValue("SQL")> SQL = 4
<AmbientValue("XML")> XML = 8
<AmbientValue("HTML")> HTML = 16
<AmbientValue("C++")> CPP = 32
End Enum
C#
[Flags]public enum Languages
{
[AmbientValue("None")]None = 0,
[AmbientValue("C#")]CSharp =1,
[AmbientValue("Visual Basic")]VB =2,
[AmbientValue("SQL")]SQL=4,
[AmbientValue("XML")]XML =8,
[AmbientValue("HTML")]HTML =16,
[AmbientValue("C++")]CPP=32
}
برای نمایش آیتم ها در لیست (ListView) از رویداد Load از فرم استفاده شده:
Visual Basic
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim Value As Integer = 0
Dim MemInf As MemberInfo
Dim MemAttr As AmbientValueAttribute
For Each member As String In [Enum].GetNames(GetType(Languages))
Value = [Enum].Parse(GetType(Languages), member)
If Value > 0 Then
MemInf = GetType(Languages).GetMember(member).FirstOrDefaul t
MemAttr = MemInf.GetCustomAttributes(GetType(AmbientValueAtt ribute), False).FirstOrDefault
Me.listView1.Items.Add(MemAttr.Value.ToString).Tag = Value
End If
Next
End Sub
C#
private void Form1_Load(object sender, EventArgs e)
{
int Value;
MemberInfo MemInf;
AmbientValueAttribute MemAttr;
foreach (string member in Enum.GetNames(typeof(Languages)))
{
Value = (int)Enum.Parse(typeof(Languages), member);
if (Value > 0) {
MemInf = typeof(Languages).GetMember(member).FirstOrDefault ();
MemAttr = (AmbientValueAttribute)MemInf.GetCustomAttributes( typeof(AmbientValueAttribute), false).FirstOrDefault();
this.listView1.Items.Add(MemAttr.Value.ToString()) .Tag = Value;
}
}
}
با فعال کردن CheckBox از هر آیتم تابع LanguagesValue مقدار آیتم های انتخاب شده رو برای خصوصیت Language فراهم می کنه:
Visual Basic
Function LanguagesValue() As Languages
Dim value% = 0
For Each item As ListViewItem In Me.listView1.CheckedItems
value += CInt(item.Tag)
Next
Return DirectCast(value, Languages)
End Function
C#
Languages LanguagesValue ()
{
int value = 0;
foreach (ListViewItem item in this.listView1.CheckedItems)
{
value += (int)item.Tag;
}
return (Languages)value;
}
که در رویداد ItemChecked از ListView این دستور بکار گرفته شده:
Visual Basic
Private Sub listView1_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles listView1.ItemChecked
Me.Language = LanguagesValue()
Me.Numberlabel.Text = CInt(Me.Language)
Me.Nameslabel.Text = Me.Language.ToString
End Sub
C#
private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
this.Language = LanguagesValue();
this.Numberlabel.Text = ((int)this.Language).ToString();
this.Nameslabel.Text = this.Language.ToString();
}
تا الآن یک مقدار داریم که عددی هست و می تونیم اون عدد رو ذخیره کنیم (که همون مقدار خصوصیت Language به عدد تبدیل بشه) می تونیم برای بازیابی آیتم های انتخاب شده از اون عدد استفاده کنیم:
Visual Basic
Private LanguageValue As Languages
Public Property Language() As Languages
Get
Return LanguageValue
End Get
Set(ByVal value As Languages)
LanguageValue = value
End Set
End Property
C#
public Languages Language { get; set; }
برای ذخیره مقدار عددی از یک متغیر استفاه شده که دسترسی به اون در سطح ماجول هست:
Visual Basic
Dim SavedValue As Integer
C#
int SavedValue;
برای مقدار دهی اون از یک کلید استفاده شده با این کد:
Visual Basic
Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click
Me.SavedValue = CInt(Me.Language)
End Sub
C#
private void button1_Click(object sender, EventArgs e)
{
SavedValue = (int)this.Language;
}
و برای استفاده از مقدار ذخیره شده و فعال شدن مجدد آیتم های لیست طبق مقدار ذخیره شده از متود SetValue استفاده شده:
Visual Basic
Private Sub SetValue(value As Integer)
Dim MemName As String
For Each Item As ListViewItem In Me.listView1.Items
MemName = [Enum].GetName(GetType(Languages), Item.Tag)
Item.Checked = DirectCast(value, Languages).ToString.Contains(MemName)
Next
End Sub
C#
void SetValue(int value)
{
foreach (ListViewItem item in this.listView1.Items)
{
item.Checked = ((Languages)value).ToString().Contains(((Languages )item.Tag).ToString());
}
}
با این روش می تونید یک تک مقدار عددی داشته باشید که برای ذخیره و بازیابی آیتم های انتحاب شده یک مجموعه از CheckBox استفاده کنید.(در دیتابیس یک فیلد از جدول)