PDA

View Full Version : combobox



rezamahdizadeh
شنبه 27 مرداد 1386, 14:36 عصر
چطوری میشه به combobox یه text ویه value متفاوت داد.مثلا در text آن علی ودر value آن85 قرار گیرد حالا اگر کسی علی را قبول کرد 85 را از آن گرفت

پرواز
شنبه 27 مرداد 1386, 16:42 عصر
فقط در یه صورت میشه اونم اینکه از DBLookupComboBox استفاده کنی. این کامپوننت باید یکی از فیلد های جدول رو بخونه و نمایش بده.

پرواز
شنبه 27 مرداد 1386, 16:43 عصر
با انتخاب یه مقدار از کمبو (سعید) جدول مورد نظر پیمایش میشه و به اون رکورد میره. حالا از اون جدول می تونی یه فیلد که مورد نظرته (85) رو بخونی.

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

SYNDROME
شنبه 27 مرداد 1386, 18:24 عصر
با سلام

چطوری میشه به combobox یه text ویه value متفاوت داد.مثلا در text آن علی ودر value آن85 قرار گیرد حالا اگر کسی علی را قبول کرد 85 را از آن گرفت
می توانی از دو ComboBoxاستفاده کنی.
موفق باشید

ghabil
شنبه 27 مرداد 1386, 21:24 عصر
یک راه خیلی حوب هستکه استفاده ازش رو به همه پیشنهاد میکنم :

اصولا توی هر استرینگ لیستی میشه همراه هر Stringی که اضافه میکنیم یک آبجکت هم اضافه کنیم ، حالا شما میتونید یک کلاس با هر تعداد که میخواهید پراپرتی از هر تایپی تعریف کنید و کنار اون بزنید یعنی اینجوری :


TTestObject = class
public
IntField : Integer;
StringField: String
end;

procedure TForm1.FormCreate(Sender: TObject);
var
ATO: TTestObject;
begin
ATO:= TTestObject.Create;
ATo.IntField := 3;
ATO.StringField := 'Test';
ComboBox1.AddItem('A Test Line' , ATO);
//....
ShowMessage((ComboBox1.Items.Objects[0] as TTestObject).StringField);


اما یک کلک باحال که اختراع یکی از دوستان هست (من ندیدم جای دیگه ای ازش استفاده کنند) و اتفاقا خیلی کاربردیه یعنی تقریبا پیش نمیاد تو کاری ازش استفاده نکنم :
اون آبجکتی که Add میکنیم درواقع پوینتر آبجکت اصلی در حافظه هست ، یعنی در واقع یک عدد هست ! پس میشه راحت جای اون Object یک Integer نگه داشت :


ComboBox1.AddItem('Test', TObject(85));
//...
ShowMessage(IntToStr(Integer(ComboBox1.Items.Objec ts[0])))

rezamahdizadeh
یک شنبه 28 مرداد 1386, 08:56 صبح
ضمن تشکر روش شما این اشکال را دارد که به کل ایتم ها یک ابجکت داده می شود اگر فرض کنیم کومبوباکس ما 4 ردیف داشته باشد و ردیف اول عالی با مقدار 20و ردیف دوم خوب با مقدار 15و ردیف سوم متوسط با مقدار 12 و ردیف چهارم ضعیف با مقدار 0 باشد چه کار کنیم اگر بنا به فرض کاربر اگر متوسط را انتخاب کرد مقدار 12 را یرگرداند.

Batman
یک شنبه 28 مرداد 1386, 09:11 صبح
ضمن تشکر روش شما این اشکال را دارد که به کل ایتم ها یک ابجکت داده می شود اگر فرض کنیم کومبوباکس ما 4 ردیف داشته باشد و ردیف اول عالی با مقدار 4 و ردیف دوم خوب با مقدار 3 و ردیف سوم متوسط با مقدار 2 و ردیف چهارم ضعیف با مقدار 1 باشد چه کار کنیم اگر بنا به فرض کاربر اگر متوسط را انتخاب کرد مقدار 2 را یرگرداند.
با سلام
دوست عزیز اولا عنوانی که انتخاب کردید اصلا مناسب نیست احترام به یه پیشکسوت خیلی مهمه در هر صورت شما میتونید از دستور Case استفاده کنید

Case combobox1.itemindex of
0:showmessage('Verygoog');
1:showmessage('good');
2:showmessage('notbad');
3:showmessage(bad);
4:showmessage('verybad');
end;

موفق باشید

rezamahdizadeh
یک شنبه 28 مرداد 1386, 09:40 صبح
اگر عنوان من خوب نبوده معذرت می خواهم اما هدف من این بود که عنوان ذکر شده نزدیکترین معنی را به شرح داشته باشد اما در هر حال از آقای کوشا که واقعا استاد دلفی هستند و من در پاسخ هایش به این نتیجه رسیده ام معذرت می خواهم. اشکال این بود که به کل ایتم ها یک ابجکت داده می شود اگر فرض کنیم کومبوباکس ما 4 ردیف داشته باشد و ردیف اول عالی با مقدار 20و ردیف دوم خوب با مقدار 15و ردیف سوم متوسط با مقدار 12 و ردیف چهارم ضعیف با مقدار 0 باشد چه کار کنیم اگر بنا به فرض کاربر اگر متوسط را انتخاب کرد مقدار 12 را برگرداند. در پاسخ آقای Batman باید گفت که ممکن است چند کومبوباکس داشته باشیم و بعضی از این کومبوباکس ها هر کدام با استفاده از یک Query پر شوند و الزاما کومبوباکس ها دارای چند ردیف ثابت و کم نباشند.

Batman
یک شنبه 28 مرداد 1386, 09:44 صبح
با سلام
دوست عزیز من هم که همین کد رو نوشتم مثلا اگر کاربر ردیف دوم رو انتخاب کنه کلمه good نمایش داده میشه خوب حالا شما به جای showmessage کد خودتون رو بنویسید
موفق باشید

ghabil
یک شنبه 28 مرداد 1386, 15:28 عصر
ضمن تشکر روش شما این اشکال را دارد که به کل ایتم ها یک ابجکت داده می شود اگر فرض کنیم کومبوباکس ما 4 ردیف داشته باشد و ردیف اول عالی با مقدار 20و ردیف دوم خوب با مقدار 15و ردیف سوم متوسط با مقدار 12 و ردیف چهارم ضعیف با مقدار 0 باشد چه کار کنیم اگر بنا به فرض کاربر اگر متوسط را انتخاب کرد مقدار 12 را یرگرداند.

نه اینطور نیست ، اگر اینطور بود که به درد نمیخورد ، من برای راحتی کار از AddItem خود ComboBox استفاده کردم هر ردیف یک StringList یک مقدار داره و یک آبجکت یعنی همونطور که میزنید



ComboBox1.Items.Strings[1]


مثلا بزنید


ComboBox1.Items.Objects[1]

یا مثلا


ComboBox1.Items.Objects[ComboBox1.ItemIndex]...




دوست عزیز اولا عنوانی که انتخاب کردید اصلا مناسب نیست احترام به یه پیشکسوت خیلی مهمه در هر صورت شما میتونید از دستور Case استفاده کنید

بیخیال بابا این حرفا چیه ! پیشکسوت چیه ؟!! من همش 18 سالمه (با چند ماه) قابل بدونید رفیقیم ، عنوانش هم بد نیست که ، ولی ممنون از لطفت.