PDA

View Full Version : چند سئوال در باره List Box



migrant
جمعه 18 مرداد 1387, 13:42 عصر
سلام به همه دوستان
چند تا سئوال در باره list box دارم :
اول : چطور میشه که کاربر سطری رو در list box انتخاب کرده است یا خیر . می خواهم در صورتی که هنوز هیچ سطری رو انتخاب نکرده بازدن یه button یه پیغام خطا صادر کنم .

دوم : می خواهم یه سطر از List box که کاربر انتخاب کرده رو حذف کنم . آیا با حذف یک سطر بقیه سطر ها شیفت پیدا می کنند به بالا ؟؟؟ اگه نه چیکار باید کرد ؟؟؟؟؟

Hsimple11
جمعه 18 مرداد 1387, 14:00 عصر
این یه راهشه :


If ListBox1.Selected[ItemIndex] = False Then
ShowMessage('');


بله، شیفت پیدا میکند :


ListBox1.DeleteSelected;

migrant
جمعه 18 مرداد 1387, 14:23 عصر
دوست عزیز Hsimple11 (http://barnamenevis.org/forum/member.php?u=14163) خیلی خیلی تشکر می کنم .
یه سئوال دیگه هم دارم که باید ببخشید :
چطور میشه با یه حلقه while از اول list box تا آخر یکی یکی item ها رو انتخاب کرد . می خواهم در این حلقه یه رشته تولید بشه حاوی تمام گزینه های یه list box که با علامت کاما از هم جدا شده باشند .
مثلا : علی ، رضا ، محمد ، ..........

migrant
جمعه 18 مرداد 1387, 14:38 عصر
این یه راهشه :


If ListBox1.Selected[ItemIndex] = False Then
ShowMessage('');بله، شیفت پیدا میکند :


ListBox1.DeleteSelected;


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

if (allFood_lsb.Selected[allFood_lsb.ItemIndex] = ) then
begin
ShowMessage('');
Exit ;
end;

selectedFood_lsb.Items.Add(allFood_lsb.Items[allFood_lsb.ItemIndex]) ;


من با این کد (سطر آخر )می خواهم سطری رو که انتخاب می کنه کاربر در list box دیگه ای قرار بدهم ولی در صورت انتخاب نکردن هیچ سطری می خواهم از این انتقال جلوگیری کنم تا مانع از پیغام خطا بشه . . . . .

Hsimple11
جمعه 18 مرداد 1387, 15:29 عصر
چطور میشه با یه حلقه while از اول list box تا آخر یکی یکی item ها رو انتخاب کرد . می خواهم در این حلقه یه رشته تولید بشه حاوی تمام گزینه های یه list box که با علامت کاما از هم جدا شده باشند .
مثلا : علی ، رضا ، محمد ، ..........


از حلقه For.
راه بهتر استفاده از یک StringList است مثلا یه چیزی شبیه این :


procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
S : TStringList;
begin
S := TStringList.Create;
for i := 0 to ListBox1.Items.Count-1 do
s.Add(ListBox1.Items.Strings[i]+',');
Memo1.Lines.Assign(S);
S.Free;
end;

yashar666
جمعه 18 مرداد 1387, 15:33 عصر
من این قطعه کد رو امتحان کردم . اگه هیچ سطری از list box انتخاب نشده باشه پیغام خطای مبنی بر خارج از محدوده بودن نشان داده میشه و شرط اجرا نمیشه که پیغام خطا جلوی ادامه اجرا بشه




مننم دقیقا این اشکال رو دارم خطا میده ...؟؟؟

کسی نمی دونه ؟؟

Mahmood_M
جمعه 18 مرداد 1387, 15:36 عصر
با سلام

من با این کد (سطر آخر )می خواهم سطری رو که انتخاب می کنه کاربر در list box دیگه ای قرار بدهم ولی در صورت انتخاب نکردن هیچ سطری می خواهم از این انتقال جلوگیری کنم تا مانع از پیغام خطا بشه . . . . .
برای اضافه کردن سطرهای یک ListBox به یک ListBox دیگه می تونید در یک حلقه از ابتدا تا انتهای لیست باکس اول رو برید و هرکدوم از آیتم ها که انتخاب شده بودن ، اونها رو به ListBox دوم اضافه کنید ، یعنی :

procedure TForm1.AddBtnClick(Sender: TObject);
var
I : Integer;
Index : Integer;
begin
for I := 0 to SListBox.Items.Count - 1 do
begin
Index := I;
if SListBox.Selected[Index] = True then
DListBox.Items.Add(SListBox.Items.ValueFromIndex[Index]);
end;
end;

یک برنامه نمونه : لینک دانلود (http://nabegheh.parsaspace.com/Examples/ListBox.rar)

برای اینکه چک کنید که آیا آیتمی در لیست باکس انتخاب شده یا نه ، میتونید مقدار SelCount اون رو چک کنید ، اگر برابر 0 بود ، پس آیتمی انتخاب نشده :

if SListBox.SelCount = 0 then
ShowMessage('No Item Selected');

اگه مشکلتون حل نشده بگید تا مثال کاملتری بزارم ...

موفق باشید ...

yashar666
جمعه 18 مرداد 1387, 15:40 عصر
ممنونم ولی با خود listbox نمیشه ؟

Mahmood_M
جمعه 18 مرداد 1387, 15:46 عصر
ممنونم ولی با خود listbox نمیشه ؟
ببخشید ولی منظورتون رو متوجه نمی شم !

Hsimple11
جمعه 18 مرداد 1387, 16:22 عصر
من این قطعه کد رو امتحان کردم . اگه هیچ سطری از list box انتخاب نشده باشه پیغام خطای مبنی بر خارج از محدوده بودن نشان داده میشه و شرط اجرا نمیشه که پیغام خطا جلوی ادامه اجرا بشه


دوست گرامی ItemIndex ایندکس آیتم شما است که خودتان باید مشخص کنید. میتوانید با یک حلقه برای تمام آیتم ها آن را چک کنید مثلا :


procedure TForm1.Button1Click(Sender: TObject);

var
i,j:integer;
begin
for i:=0 to ListBox1.Items.Count-1 do
If ListBox1.Selected[i]=True Then begin
ListBox2.Items.Add(ListBox1.Items[i]);
j:=1;
End;
if j <> 1 Then Showmessage('No Item has been Selected!')
end;

migrant
جمعه 18 مرداد 1387, 17:18 عصر
برای اینکه چک کنید که آیا آیتمی در لیست باکس انتخاب شده یا نه ، میتونید مقدار SelCount اون رو چک کنید ، اگر برابر 0 بود ، پس آیتمی انتخاب نشده :

if SListBox.SelCount = 0 then
ShowMessage('No Item Selected');اگه مشکلتون حل نشده بگید تا مثال کاملتری بزارم ...

موفق باشید ...[/quote]


دوست گرامی ItemIndex ایندکس آیتم شما است که خودتان باید مشخص کنید. میتوانید با یک حلقه برای تمام آیتم ها آن را چک کنید مثلا :


procedure TForm1.Button1Click(Sender: TObject);

var
i,j:integer;
begin
for i:=0 to ListBox1.Items.Count-1 do
If ListBox1.Selected[i]=True Then begin
ListBox2.Items.Add(ListBox1.Items[i]);
j:=1;
End;
if j <> 1 Then Showmessage('No Item has been Selected!')
end;

با کد فوق تونستم اگه هیچ سطری انتخاب نشده بود پیغام بدم و دیگه اون خطا رو هم نمی ده .
با دستور selcount جواب نمی داد . ببینید اگه مشکلی داره حل کنید چون خیلی راحت تره
if SListBox.SelCount = 0 then
ShowMessage('No Item Selected');

migrant
جمعه 18 مرداد 1387, 17:34 عصر
سه سئوال دیگه :
چطور میشه از خالی بودن لیست باکس مطلع شد ؟؟؟؟؟؟
آیا این کد درسته :

if (list box1.items.text = '')

Hsimple11
جمعه 18 مرداد 1387, 17:47 عصر
با کد فوق تونستم اگه هیچ سطری انتخاب نشده بود پیغام بدم و دیگه اون خطا رو هم نمی ده .
با دستور selcount جواب نمی داد . ببینید اگه مشکلی داره حل کنید چون خیلی راحت تره



متد SelCount از اونجا که اساسا برای شمارش آیتمهای انتخاب شده استفاده میشود زمانی کاربرد دارد که خاصیت MultiSelect مربوط به ListBox شما True باشد. طبیعی است که در صورت MultiSelect بودن میتوانید تعداد چند آیتم انتخاب شده را بدست آورید.

در مورد برنامه شما هم اگر با MultiSelect بودن مشکل ندارید میتوانید آن را True کنید و از SelCount استفاده کنید.

موفق باشید...

Hsimple11
جمعه 18 مرداد 1387, 17:48 عصر
سه سئوال دیگه :
چطور میشه از خالی بودن لیست باکس مطلع شد ؟؟؟؟؟؟
آیا این کد درسته :

if (list box1.items.text = '')


راه های مختلفی وجود دارد. یا اگر متنی وجود نداشت یا
اگر تعداد آیتم صفر بود :


If MyListBox.Items.Count = 0 Then
.
.
.


یا ...

Mahmood_M
جمعه 18 مرداد 1387, 19:52 عصر
با دستور selcount جواب نمی داد .
از سئوالتون من این طور فهمیدم که چند تا آیتم رو با هم انتخاب می کنید ، که در صورت مطمئنا خاصیت MultiSelect مربوط به ListBox مقدار True خواهد داشت ... !
همون طور که دوستمون گفتند باید برای به کار گیری خاصیت SelCount ، مقدار True رو در خاصیت MultiSelect قرار بدید ...

برای تشخیص خالی بودن یک ListBox بهتره تعداد آیتمها رو چک کنید که دوستمون توضیح دادند ...

موفق باشید ...