PDA

View Full Version : تشخیص بین کامبو



Mask
چهارشنبه 05 خرداد 1389, 17:49 عصر
با سلام
بنده در برنامه ای تعداد 14 کامبو باکس دارم.
این کامبو باکسها از عدد 1 تا 14 رو دارند.
چه کدی رو باید در دکمه ای بنویسم که اگه تکست این 14 کمبو مثل هم بود به کاربر اخطار بده.
خودم کدی رو نوشتم که از ابتدا تکست کامبو 1 رو با 13 کامبو دیگه مقایسه میکرد.اگه مثل بقیه نبود ، میرفت و کامبو دوم رو با بقیه مقایسه میکرد و همین جور تا آخر ...
این کد نویسی جواب میده و من به هدفم میرسم اما مشکل اینجاست که کلی باید کد بنویسم و به نظرم منطقی نیست.
به نظر دوستان راهی ساده تر برایه این کار وجود داره؟
ممنون.

حسین شهریاری
چهارشنبه 05 خرداد 1389, 18:15 عصر
سلام

به تعداد کامپوننتهای کامبو حلقه اجرا میشه و اگه مقدار هرکدام با هم برابر بود یکی به شمارنده اضافه میشه.اگه شمارنده برابر تعداد کامبوها بود پیام خطا صادر میشه:


var
Counter:integer;
for i := 0 to Self.ComponentCount-1 do
begin
if (Self.Components[i] is TCombobox) then
begin
if (Self.Components[i] as TCombobox).Text = (Self.Components[i+1] as TCombobox).Text then
Counter:=Counter+1;
end;
end;
if Counter=14 then
showmessage('ERROR!!!');

موفق باشید

Mahmood_M
چهارشنبه 05 خرداد 1389, 18:25 عصر
فرض کنید چهارده ComboBox روی فرم هست به نامهای ComboBox1 تا ComboBox14 ، در اینصورت به شکی زیر می تونید مقادیرشون رو بررسی کنید :
var
S1, S2 : String;
I : Integer;
B : Boolean;
begin
S1 := ComboBox1.Text;
B := True;
for I := 2 to 14 do
begin
S2 := (FindComponent('ComboBox'+IntToStr(I)) as TComboBox).Text;
if S1 <> S2 then
begin
B := False;
Break;
end;
end;
if B = True then
ShowMessage('You Lost !!')
else
ShowMessage('You Win !!');
end;

باید یک جوری ترتیبی براشون در نظر بگیرید که بشه اونها رو در فرم پیدا کرد ، مثلا با اسمشون که در دستور بالا هم همین کار انجام شده ...

در کد بالا ، ابتدا مقدار اولین ComboBox در یک متغیر ریخته میشه و بعد متغیر رشته ای دوم میاد به ترتیب از ComboBox دوم تا چهاردهم رو مقادیرشون رو می گیره و با مقدار اول مقایسه می کنه ، هر کدوم که تفاوت کرد ، یعنی اینکه همهشون یکسان نیستند ، پس مقدار متغیر Boolean رو هم False می کنه ، ولی اگر همشون یکسان باشن ، مقدار متغیر B که در ابتدا True شده بود ، در پایان هم همون True می مونه ...

ویرایش : جوابها همزمان شد ... !

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

حمیدرضاصادقیان
چهارشنبه 05 خرداد 1389, 23:17 عصر
سلام.البته به نظر من کد پست شده در مورد دوم کاملتر هست به این دلیل که ممکنه combobox ما هرنامی داشته باشه و الزاما از عدد 1 تا 14 نباشه.در این شرایط کد مورد سوم جوابگو نخواهد بود.

Mahmood_M
پنج شنبه 06 خرداد 1389, 03:47 صبح
سلام.البته به نظر من کد پست شده در مورد دوم کاملتر هست به این دلیل که ممکنه combobox ما هرنامی داشته باشه و الزاما از عدد 1 تا 14 نباشه.در این شرایط کد مورد سوم جوابگو نخواهد بود.
درسته ، ولی این موارد کاملا در اختیار کاربر هست ، می تونه نام رو به هر چیزی که خاصت تغییر بده ، ولی باید جوری عمل بشه که این کامبوباکس ها از سایر کامبوباکسهای روی فرم تمییز داده بشن ، مثلا در کد اول اگر چند ComboBox دیگه هم روی فرم وجود داشته باشه و مقادیرشون از 1 تا 14 باشه باز هم ممکنه مشکل در اجرای کد پیش بیاد و نتیجه ی درستی حاصل نشه ، به هر حال یا باید یک ترتیبی برای کامبوباکس ها در نظر گرفته بشه یا اینکه اونها درون یک Parent جدا ( مثلا یک GroupBox ) قرار داده بشن و درون همون Parent مقادیرشون مثلا با کدی که جناب شهریاری قرار دادن ( البته با کمی تغییر ) چک بشه ...
راه حل زیاده ، باید دید که کاربر هدف اصلیش چی هست و ابزارها رو کجا و چطور چیده ...

به هر حال ، موفق باشید ...