delphi4arab منتديات دلفي للعرب

نسخة كاملة : مشاكل الكومبو بوكس
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
استخدم 3 كمبو بوكس
الاول به مصر - السودان - الجزائر - الخ
الثاني به القاهرة - الخرطوم -طرابلس
الثالث به اسماء احياء القاهرة والخرطوم

لما اختار علي مصر يظهر لي في الثاني القاهرة و مدن مصر
ولما اختار علي القاهرة تظهر لي احياء القاهرة فقط

هذه كل المشكله
هل يوجد طريقة غير معقدة لعمل ذلك

الطريقة المعتادة
اني اعمل
كود :
if combobox1.itemindex=0 then Combobox2.items.Clear; Combobox2.items.Add('القاهرة

ولكن هذا مرهق وذلك لان اعمل هذا في كل الاختيارات بالكامل

احاول استخدمه لتحقيق نفس الهدف
كود :
procedure TForm1.ComboBox1Change(Sender: TObject); begin if combobox1.itemindex=0 then begin if combobox2.itemindex=1 then begin combobox3.ItemIndex:=1 end; end; end;

الغريب انه يعطيني رساله خطأ في سطر فارغ تماما
و رساله الخطأ تقول
declaration expected but end of file found
السلام عليكم

كما ذكر سابقا لا يمكن الفلترة في الكومبوبوكس

لذا يجب عليك إنشاء قوائم لمعطياتك بالشكل التالي

البلد 1 قائمة الولايات الولاية 1 قائمة الأحياء الولاية 2 قائمة الأحياء ..
البلد 2 قائمة الولايات الولاية 2 قائمة الأحياء الولاية 2 قائمة الأحياء ..

التطبيق بالكود
تصريح عام

كود :
City1,City2,state1,state2 : TStringList ;

إعطاء القيم ( الولايات ، الأحياء )

كود :
procedure TForm1.Button1Click(Sender: TObject); begin City1 := TStringList.Create; City2 := TStringList.Create; state1 := TStringList.Create; state2 := TStringList.Create; city1.Add('State1City1_1') ; city1.Add('State1City1_2') ; city1.Add('State1City1_3') ; city2.Add('State1City2_1') ; city2.Add('State1City2_2') ; city2.Add('State1City2_3') ; state1.Add('County1state1') ; state1.Add('County1state2') ; state1.Add('County1state3') ; state2.Add('County2state1') ; state2.Add('County2state2') ; state2.Add('County2state3') ; end;

تغيير الولايات حسب البلد في الكومبو 1

كود :
procedure TForm1.ComboBox1Change(Sender: TObject); begin case ComboBox1.ItemIndex of 0:begin // البلد1 ComboBox2.Items.Clear ; ComboBox2.Items.AddStrings(state1); end; 1: begin // البلد2 ComboBox2.Items.Clear ; ComboBox2.Items.AddStrings(state2); end; end;

تغيير الأحياء حسب الولاية في الكمبو 2

كود :
procedure TForm1.ComboBox2Change(Sender: TObject); begin case ComboBox2.ItemIndex of 0:begin // الولاية1 ComboBox3.Items.Clear ; ComboBox3.Items.AddStrings(city1); end; 1: begin // الولاية 2 ComboBox3.Items.Clear ; ComboBox3.Items.AddStrings(city2); end; end;



نتمنى أن يفيدك
بالتوفيق
و السلام عليكم
السلام عليكم
طريقة أخرى...
PHP كود :
var
  
Form1: TForm1;
  
Country: array[0..2] of string = ('الجزائر', 'مصر', 'السودان');
  
City: array[0..2, 1..2] of string = (('عنابة', 'وهران') ,('القاهرة', 'الاسكندرية'),('الخرطوم', 'الأبيض'));

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  
i: Integer;
begin
  
for i:= Low(Country) to High(Country) do ComboBox1.Items.Add(Country[i]);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  
i: Integer;
begin
  ComboBox2
.Clear;
  for 
i:= Low(City[ComboBox1.ItemIndex]) to High(City[ComboBox1.ItemIndex]) do
    
ComboBox2.Items.Add(City[ComboBox1.ItemIndex, i]);
end; 
بالتوفيق.
شكرا جزيلا اخي lam.abdeljalil
بارك الله فيك ولكن هذا الكود جربته يعمل جيدا علي المستوي الثاني
أما علي مستوي التفرع الثالث لا يؤدي المطلوب وذلك للأتي
اذا قلت
الكومبو الاول
country1
country2
الكومبو الثاني
city1-country1
city2-country1

city1-country2
city2-ountry2

الكومبو الثالث
state1-city1-country1
state2-city1-country1

state1-city2-country1
state2-city2-country1

state1-city1-country2
state2-city1-country2

state1-city2-country2
state2-city2-country2

هذا الكومبو الثالث لا يعمل جيدا بالتصنيف الهرمي
وذلك لان الشرط الموجود بالكومبو 2
يتعلق ب itemindex 0,1 فقط وهذا يجعله يعطيني نفس state

فهل من حل لهذا
ولو انني اخطأت الفهم - ان لم يكن فيها حرج
لو تعمل المثال و تبعت لي الملف .pas علي المنتدي او الايميل
اكون شاكرا لك . وجزاك الله خيرا
السلام عليكم

العفو أخي m_m_saad

أعطيتك مثال فقط لكي تكمل العمل مع الباقي بنفس الطريقة

الملف المرفق

و السلام عليكم
جزاك الله خيرا
بارك الله لك وزادك علما علي علم
الاخ - عبد الجليل

سؤال آخر لو اردنا تحسين نتيجه البرنامج
عندما نختار الدوله في كومبو 1
تظهر المحافظات في كومبو 2 و عند اختيار محافظه من كومبو 2
بالتالي تظهر الاحياء في كومبو 3

ولكن اذا رجعنا الي كومبو 1 بعد اختيار احد ا لمحافظات والاحياء يظل الاختيار كما هو
يعني نريد ان نعمل refresh للبرنامج
لانه من يعمل عليه قد يخطأ بسبب ذلك

هل هذا ممكن
سؤال آخر لماذا يتم وضع
end;
ثلاث مرات متتاليات رغم ان begin مرة واحده
السلام عليكم

إقتباس :ولكن اذا رجعنا الي كومبو 1 بعد اختيار احد ا لمحافظات والاحياء يظل الاختيار كما هو
يعني نريد ان نعمل refresh للبرنامج

ما عليك إلا إضافة السطرين للحدث ComboBox1Change
كود :
ComboBox2.Items.Clear ; ComboBox3.Items.Clear ;

الصيغة العامة للعمل بالـ Case

كود :
case Var of 0:begin instructions end; 1: begin instructions end; else end;

و السلام عليكم
عندما استخدمها في اول سطر في combo1 change
تقوم بمسح القائمه كلها
السلام عليكم

خطأ فني ->قم مسح الكمبو 3 فقط

يصبح الكود

كود :
procedure TForm1.ComboBox1Change(Sender: TObject); begin ComboBox3.Items.Clear ; case ComboBox1.ItemIndex of 0:begin // البلد1 ComboBox2.Items.Clear ; ComboBox2.Items.AddStrings(state1); end; 1: begin // البلد2 ComboBox2.Items.Clear ; ComboBox2.Items.AddStrings(state2); end; else ComboBox2.Items.Clear ; end; end;
الصفحات : 1 2