PDA

View Full Version : listbox و پیغام خطا



mahmood-r-sh
پنج شنبه 12 شهریور 1388, 17:04 عصر
سلام به همه .
من تازه عضو شدم .
دم همتون گرم . سایت توپیه .
اگه جای مناسبی سوال نپرسیدم عذر میخوام . تازه واردم دیگه ...

به کد زیر توجه کنید :


var
name : string ;

name:=ListBox1.Items.ValueFromIndex
[ListBox1.Itemindex];
ShowMessage(name);


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

ایراد دوم اینکه اگر آیتمی فارسی باشه پیغام خطای زیر رو نشون میده

" رگس " is not a valid component name .


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

vcldeveloper
پنج شنبه 12 شهریور 1388, 17:23 عصر
کد بالا به خودی خود مشکلی نداره. شما چرا از ValueFromIndex استفاده می کنید؟ هدفتان چی هست؟ از این خصوصیت زمانی استفاده میشه که مقادیر موجود در ListBox شما بصورت زوج name=value باشند؛ یعنی هر Item تشکیل شده باشه از یک نام، یک علامت مساوی، و یک مقدار برای آن نام. در این صورت با استفاده از خصوصیت ValueFromIndex می تونید بخش value از یک زوج name=value را استخراج کنید. هدف شما هم همین هست؟

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

mahmood-r-sh
پنج شنبه 12 شهریور 1388, 22:35 عصر
نه هدف من اونی که گفتید نیست . من دو تا لیست باکس دارم که اولی نام کتابهای بانک داده رو در خودش لود میکنه . حالا میخوام که با کلیک بر روی هر کدام از آیتمهای آن , در لیست باکس بعدی , تمام فصلهای اون کتابی که سلکت شد رو لیست کنم .
جدول 1 مربوط میشه به نام کتب و جدول2 مربوط میشه به نام فصلهای تمامی کتب . ارتباط این دو جدول هم با فیلد bookID برقرار میشه .کدی رو که در زیر قرار دادم مربوط میشه به انتخاب کردن نام کتاباز لیست باکس1 (کتب) .

procedure TFormLessonBook.ListBox1Click(Sender: TObject);
var
name: string;
ID: Integer;
begin
if (ListBox1.ItemIndex > -1 ) then
begin
with mainform do
begin
name:=ListBox1.Items.ValueFromIndex[ListBox1.Itemindex];
ShowMessage(name);
Table1.Open;
Table1.Filtered:=true;
Table1.Filter:='bookname='+QuotedStr(name);
ID:=Table1['BookID'];
Table1.Filtered:=false;
Table1.close;
Table2.open;
Table2.Filtered:=true;
Table2.Filter:='bookid='+inttostr(ID);
Table2.first;
while not Table2.Eof do
begin
ListBox2.Items.Add(Table2['ChapterName']);
Table2.Next;
end;
Table2.Filtered:=false;
Table2.Close;
end;
end;//end of if
end;

mahmood-r-sh
پنج شنبه 12 شهریور 1388, 23:08 عصر
اگر دستور دیگری وجود داره که باهاش میشه نام آیتم انتخاب شده رو به صورت string در متغیری ذخیره کرد ممنون میشم اگه بگید .




راستی کدنویسی من در حد مبتدیهاست , پس Take it easy :لبخند:

vcldeveloper
جمعه 13 شهریور 1388, 00:09 صبح
خب اون کد بالا چند مشکل داره؛ اولیش این هست که برای بدست آوردن گزینه انتخاب شده در ListBox اصلا نیازی به اون کد نیست. کد زیر گزینه انتخاب شده را بر میگردونه:


Name := ListBox1.Items
[ListBox1.ItemIndex];

دومیش هم اینکه، برای فیلتر کردن یک دیتاست شما باید اول خصوصیت Filtered آن را False کنید، بعد شرط مربوطه را به خصوصیت Filter اختصاص بدید، و در نهایت Filtered آن را True کنید، تا فیلتر اعمال بشه. شما برعکس کار کردید.


راستی کدنویسی من در حد مبتدیهاست , پس Take it easy
بحث کد نویسی شما نیست، بحث سر این هست که وقتی کدی در پست تان می نویسید، آن را در داخل تگ کد (با استفاده از دکمه http://barnamenevis.org/forum/images/editor/code.gifدر نوار ابزار ویرایشگر پست) قرار بدید، تا کد بصورت فرمت بندی شده نمایش داده بشه، مثل کاری که من با کدهای پست اول شما یا پست خودم در همین تاپیک کردم.

mahmood-r-sh
جمعه 13 شهریور 1388, 00:48 صبح
احسنت بر آقای کشاورز . مشکلم حل شد .در ضمن فهمیدم که ایراد دوم از کجا بود (همونی که با کلیک بر روی آیتمهای فارسی , پیغام خطا میداد !) . کلمه ی کلیدیه name رو عوض کردم . با دستور with mainform مشکل داشت . :لبخند: گاهی اوقات واقعا آدم مخش تعطیل میشه ها ! :گیج:
در مورد filter کردن هم باهات موافقم . از نظر عقلانی اون چیزی که شما گفتی درست تره . همش تقصیره این کتابهاست دیگه . موقع چاپ دقت نمیکنن و پس و پیش مینویسن بعدش ما به اشتباه می افتیم.