PDA

View Full Version : سوال: مشکل جدی در کار با ChekedListBox



Mohandes2009
سه شنبه 02 شهریور 1389, 18:10 عصر
فقط اگه آیتمی تیک خورده باشه چجوری میشه نوشت که پاک نشه از چک لیست باکس بقیه clear بشه؟

و دیگه اینکه تابعی در رشته ها نداریم که بتونم حرف به حرف را مقایسه کنم؟

مثلا من یه حرف از اون چیزی را که می نویسم با کل کلمه موجود مقایسه کنه اگه داخلش بود بیاره برام.
تشکر از همه دوستانی که جواب میدند.
_________________________________________

الان دوباره Salar Ashgi (http://barnamenevis.org/forum/private.php?do=newpm&u=70109)میاد میگه برای پروژه کارفرماش:قهقهه:من اصلا کار نمیکنم جایی عزیز!

مهدی فرزاد
سه شنبه 02 شهریور 1389, 19:05 عصر
سلام

قابلت رو نداره
جواب 1

if (checkedListBox1.Items.Count != checkedListBox1.CheckedItems.Count)
for (int i = 0; i < checkedListBox1.Items.Count; i++)
{
if (checkedListBox1.Items.IndexOf(i) != checkedListBox1.CheckedIndices.IndexOf(i))
checkedListBox1.Items.RemoveAt(i);
}

else
{
checkedListBox1.Items.Clear();
}
جواب 2


string str = "سلام مهدی خوبی؟";

if (str.Contains("مهدی") == true)
MessageBox.Show("در خدمتم");

Mohandes2009
سه شنبه 02 شهریور 1389, 23:10 عصر
[quote=Mehdi550u;1075823]سلام

قابلت رو نداره
جواب 1

if (checkedListBox1.Items.Count != checkedListBox1.CheckedItems.Count)
for (int i = 0; i < checkedListBox1.Items.Count; i++)
{
if (checkedListBox1.Items.IndexOf(i) != checkedListBox1.CheckedIndices.IndexOf(i))
checkedListBox1.Items.RemoveAt(i);
}

else
{
checkedListBox1.Items.Clear();
}
این که نمیشه هر کدوم که تیک داره را حذف میکنه:افسرده:

مهدی فرزاد
سه شنبه 02 شهریور 1389, 23:15 عصر
ببخشید من برعکس متوجه شدم

Mohandes2009
سه شنبه 02 شهریور 1389, 23:38 عصر
خب درستش چیه؟

مهدی فرزاد
سه شنبه 02 شهریور 1389, 23:39 عصر
این تشخیص میده آیتم چک خورده یا نه

if (checkedListBox1.GetItemCheckState(i).ToString() == "Unchecked")
checkedListBox1.Items.RemoveAt(i);

ولی توی حلقه اگه بگذاری فقط اولی رو پاک میکنه و بعد Index ها بهم میریزه
دارم روش کار میکنم

مهدی فرزاد
چهارشنبه 03 شهریور 1389, 00:46 صبح
تشکر ولی فک کنم اینم نشه ها!

شد با این روش

ArrayList l = new ArrayList();
int b = 0;
for (int i = 0; i <checkedListBox1.Items.Count; i++)
{
if (checkedListBox1.GetItemChecked(i) == true)
{
l.Add(checkedListBox1.Items[i]);
}
}
checkedListBox1.Items.Clear();
foreach (var item in l)
{

checkedListBox1.Items.Add(item);
checkedListBox1.SetItemChecked(b,true);
b += 1;
}

mmd2009
چهارشنبه 03 شهریور 1389, 02:26 صبح
با سلام.

نمیدونم چرا حلقه اینقدر اینبار دردسر داشت :متفکر:

این کد رو هم ببین نوشتم جواب میده



for (int i = 0; i < checkedListBox1.Items.Count+10; i++)
{
for (int d = 0; d < checkedListBox1.Items.Count; d++)
{
if (checkedListBox1.GetItemCheckState(d) != CheckState.Checked)
{
checkedListBox1.Items.RemoveAt
(d);
}
}
}

Mohandes2009
چهارشنبه 03 شهریور 1389, 04:56 صبح
مرسی هر دوتا کد به خوبی جواب میده ولی آقای mmd2009 چرا تو حلقه اولی با 10 جمع شده؟! میشه توضیح بدین؟

mmd2009
چهارشنبه 03 شهریور 1389, 05:10 صبح
واسه حصول اطمینان از کارم که مطمئن بشم همه رو پاک میکنه. چون اگر تکرار زیاد نباشه بعضی جاها پاک نمیشه.

مهدی فرزاد
چهارشنبه 03 شهریور 1389, 13:19 عصر
اینم یک راه توپ دیگه تست شده

while (checkedListBox1.Items.Count - checkedListBox1.CheckedItems.Count >0)
{
for (int i = 0; i < checkedListBox1.Items.Count; i++)
{
if (checkedListBox1.GetItemCheckState(i) == CheckState.Unchecked)
checkedListBox1.Items.RemoveAt(i);
}
}

Mohandes2009
پنج شنبه 04 شهریور 1389, 13:11 عصر
یه سوال از این چیز

از بانک دارم با روش LINQ این چک باکس را پر میکنم نام و نام خانوادگی در پایگاه داده جدا هست و وقتی اد میشه داخل چک لیست با یه خط فاصله "-" از هم جدا میشه !

حالا این کد مشکلش چیه؟



privatevoid textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text=="")
{
ClearChekList();
var k = from c in linq.TPerson_Infos
select c;
foreach (TPerson_Info item in k)
{
for (int i = 0; i < checkedListBox1.Items.Count; i++)
{
if (checkedListBox1.Items[i].ToString() != (item.Name + "-" + item.Family) )
{
checkedListBox1.Items.Add(item.Name + "-" + item.Family);
}
}

}
}
else
{
ClearChekList();
var k = from c in linq.TPerson_Infos
where c.Name.Trim()==textBox1.Text.Substring(0) ||
c.Family.Trim() == textBox1.Text.Substring(0)
select c;
foreach (TPerson_Info item in k)
{
checkedListBox1.Items.Add(item.Name + "-" + item.Family);
}
}
}



تو این قطعه کد تابع

ClearChekList(); همون تابع ای هست که شما نوشتید! این قطعه کدی که سبز نوشته ارور میده یعنی می خواستم بنویسم (اگر در چک لیست چیزی چک خورده بود و چیزی در داخل تکست باکس نوشته نشده بود بقیه اسامی را از بانک لیست کن به جز این مورد:خجالت:)حالا کجاش غلطه؟

مهدی فرزاد
پنج شنبه 04 شهریور 1389, 14:09 عصر
سلام
من درست متوجه منظورت نشدم بگو چه خطایی مبگره
ولی میخوام کد Linq رو برات اصلاح کنم تا کارت راحت تر بشه

به جای کدی که نوشتی بنویس

var k = from c in linq.TPerson_Infos
select new { FullName = c.Name + "-" + c.Family };
و بعد دیگه لازم نیست کد سبز رو اونشکلی بنویسی
بجاش مینویسی

if (checkedListBox1.Items[i].ToString() != (item.FullName) )


البته این ربطی به اشکالت نداره ولی هرجا میخوای در Linq دو فیلد رو با هم ترکیب کنی از این راه استفاده کن بفیه کدهای Linq رو هم خودت اصلاح کن

بعد دقیق تر توضیح بده یا یک فایل ضمیمه کن تا اصلاحش کنم

Mohandes2009
پنج شنبه 04 شهریور 1389, 15:29 عصر
ببین مهدی آقا کل این قضیه و حرف و بحث که گذاشتم داشتم یه سرچ می نویشتم تو چک لیست باکس که به اون مشکل و الان این بر خوردم !

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

مرسی از توجه تون:بوس:

مهدی فرزاد
جمعه 05 شهریور 1389, 13:07 عصر
سلام
بالاخره اینم حل شد دقیقا مثل نوکیا اونهایی رو که چک دارن نگه میداری و در جستجوی بعدی در اونهایی میگرده که چک ندارن و چک دارها در صفحه هستن یعنی اگه هیچی پیدا نکرد چک دارها رو نگه میداره (به عنوان نتیجه مورد قبول قبلی):لبخند:
و درضمن مثل نوکیا شما نمیتونی دوتا اسم و فامیل کاملا یکسان داشته باشی!!!
من هم فایلش رو بهت میدم هم کد رو
البته با 2010 نوشتم
اما اگه 2010 نداری کافی یک New درست کنی و یک CheckListBx و یک Textbox بگذار تویش و کدهای منو بنویس
البته database و Linq to sql هم داره
این کدها
فایل هم در آخر ضمیمه شد

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DataClasses1DataContext db = new DataClasses1DataContext();
Hashtable hs = new Hashtable();
private void Form1_Load(object sender, EventArgs e)
{
this.checkedListBox1.Sorted = true;
var q = from a in db.Table1s
select new { FullName = a.FisrtName + " " + a.LastName };
foreach (var item in q)
{
hs.Add(item.FullName, CheckState.Unchecked);
}
foreach (System.Collections.DictionaryEntry item in hs)
{
checkedListBox1.Items.Add(item.Key);
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
while (checkedListBox1.Items.Count - checkedListBox1.CheckedItems.Count > 0)
{
for (int i = 0; i < checkedListBox1.Items.Count; i++)
{
if (checkedListBox1.GetItemCheckState(i) == CheckState.Unchecked)
{
checkedListBox1.Items.RemoveAt(i);
}
}
}
foreach (System.Collections.DictionaryEntry item in hs)
{
if (item.Value.ToString() == "Unchecked" && item.Key.ToString().Contains(textBox1.Text))
{
checkedListBox1.Items.Add(item.Key);
}
}
}
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.NewValue == CheckState.Checked)
hs.Remove(checkedListBox1.Items[e.Index].ToString());
else
hs.Add(checkedListBox1.Items[e.Index].ToString(), e.NewValue);
}
}

mmd2009
جمعه 05 شهریور 1389, 19:38 عصر
fastcode این کد رو نوشته به نظرم از همه کدها بهتره باشه



for (int i = 0; i < checkedListBox1.Items.Count; i++)
if (checkedListBox1.GetItemCheckState(i) == CheckState.Unchecked)
checkedListBox1.Items.RemoveAt(i--);