PDA

View Full Version : چک لیست باکس



smt_414
پنج شنبه 29 شهریور 1386, 21:21 عصر
سلام
من یک چک لیست باکس دارم و میخوام زمانی که یکی از محتویات اون تیک (check)خورد اتفاقی رخ بدهد
من برای بررسی تیک خوردن از دستور زیر استفاده کردم اما زمانی که مور شیشم انتخاب می شود بدون اینکه حتی تیک بخوره دستور مقدارtrue را برمی گرداند

( if (Convert.ToBoolean(checkedlistbox1.CheckedItems.In dexOf(6))

PC2st
پنج شنبه 29 شهریور 1386, 22:28 عصر
برای بررسی تیک خوردن از دستور زیر استفاده کنید:


foreach(int index in checkedListBox1.CheckedIndices)
MessageBox.Show((string)checkedListBox1.Items[index]);

در هر بار گردش در حلقه، متغیر index برابر با ایندکس یکی از آیتم های تیک خورده خواهد بود.

smt_414
جمعه 30 شهریور 1386, 11:14 صبح
سلام PC2st.ir جان
باز هم نشد کاملا مثه دفعه قبل شد بدون تیک خوردن MessageBox نشون داده می شه
من CheckOnClick رو true کردم
راستش اینطوری کاربر احتیاج نیست دو بار کلیک کنه تا , موردی رو انتخاب کنه.

PC2st
جمعه 30 شهریور 1386, 15:18 عصر
شما این کدها رو در رویدادی مثل ItemChecked یا Click مینویسید؟ اگر اینطور باشد:

1. از رویداد دیگری مثلا SelectedIndexChanged استفاده کنید.

2. یا اینکه اگر نباید رویداد رو عوض کنید، به شکل زیر کد را تغییر دهید:


private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
foreach(int index in checkedListBox1.CheckedIndices)
MessageBox.Show((string)checkedListBox1.Items[index]);
if(e.NewValue == CheckState.Checked)
MessageBox.Show((string)checkedListBox1.Items[e.Index]);
}

کد فوق برای رویداد ItemChecked نوشته شده است.

3. اگر از رویداد Click استفاده میکردید، میتونید بجاش از رویدادهای MouseUp و KeyUp بطور همزمان استفاده کنید، مثلا:


private void checkedListBox1_MouseUp(object sender, MouseEventArgs e)
{
foreach(int index in checkedListBox1.CheckedIndices)
MessageBox.Show((string)checkedListBox1.Items[index]);
}
private void checkedListBox1_KeyUp(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Space)
{
foreach(int index in checkedListBox1.CheckedIndices)
MessageBox.Show((string)checkedListBox1.Items[index]);
}
}

smt_414
شنبه 31 شهریور 1386, 17:02 عصر
سلام
ممنون از راهنماییتون
با ایونت های مخصوص موس و کیبرد به آنچه می خواستم رسیدم
اما متوجه شدم صورت سوال رو می تونستم شفاف تر مطرح کنم
اینطور که با تیک خوردن عملی انجام شود و با حذف تیک دو باره همه چیز به حالت قبل از تیک برگردد

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

private void checkedlistbox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.NewValue == CheckState.Checked )
{
if (checkedlistbox1.SelectedItem.ToString() =="سایر موارد")
{
Textbox1.Enabled = true;
}
}
else if (e.NewValue == CheckState.Unchecked)
{
if (checkedlistbox1.SelectedItem.ToString() == "سایر موارد")
{
Textbox1.Enabled = false;
}
}
}

smt_414
جمعه 06 مهر 1386, 14:48 عصر
سلام
سوال اینه چطور میشه
محتویات آیتم های انتخاب شده از یک چک لیست باکس رو داخل یک رشته ریخت ؟؟
اگر کدی مثه این قابل اجرا بود مشکل حل می شد


string comb="";

for (int index = 0; index < checkedlistbox1.Items.Count; index++)
{
if (Convert.ToBoolean(checkedlistbox1.Items[index] == CheckState.Checked))
{
comb = comb + Convert.ToString(checkedlistbox1.Items[index]) + ";";

}
}


(برای این سوال تایپیک جدید ایجاد نکردم .فکر کنم مرتبط با همین تایپیک باشه)

PC2st
جمعه 06 مهر 1386, 20:00 عصر
ایراد در شرط داخل عبارت if است، میتوانید به شکل زیر تصحیحش کنید:


if(checkedlistbox1.GetItemCheckState(index) == CheckState.Checked)
{
...
}

PC2st
جمعه 06 مهر 1386, 23:37 عصر
برای گرفتن لیست آیتمها چک شده، میتونستید که به شکل زیر هم عمل کنید تا نیازی به if نباشه:


string comb = "";
foreach(object o in checkedListBox1.CheckedItems)
comb += (string)o;

smt_414
شنبه 10 آذر 1386, 22:04 عصر
سلام
به همه دوستان
سوال : من می خوام در صورتیکه که یک رشته با یکی از آیتمهای چک لیست باکس برابر ببود اون آیتم چک بخورد برای اینکار چه باید کرد
اگر کدی مثه این جواب می داد حل بود

for (int j=0; j < clb_e_h.Items.Count; j++)
{
if (clb_e_h.Items[j].ToString() == words[i])
clb_e_h.Items[j] = CheckState.Checked;
}

با تشکر

smt_414
یک شنبه 11 آذر 1386, 15:00 عصر
::salam
kasi nemidone:ناراحت:
(system farsi nadasht ):خجالت:

PC2st
یک شنبه 11 آذر 1386, 16:18 عصر
اینطور تصحیح کنین


for (int j=0; j < clb_e_h.Items.Count; j++)
{
if (clb_e_h.Items[j].ToString() == words[i])
{
clb_e_h.SetItemChecked(j, true);
}
}