معلومات

تخزين سلسلة (أو كائن) مع سلسلة في ListBox أو ComboBox

تخزين سلسلة (أو كائن) مع سلسلة في ListBox أو ComboBox


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

يعرض TListBox و TComboBox من دلفي قائمة من العناصر - سلاسل في قائمة "قابلة للاختيار". يعرض TListBox قائمة قابلة للتمرير ، يعرض TComboBox قائمة منسدلة.

خاصية مشتركة لجميع الضوابط المذكورة اعلاه هو العناصر خاصية. تحدد العناصر قائمة بالسلاسل التي ستظهر في عنصر التحكم للمستخدم. في وقت التصميم ، عندما تنقر نقرًا مزدوجًا فوق الخاصية Items ، يتيح لك "محرر قائمة السلسلة" تحديد عناصر السلسلة. خاصية العناصر هي في الواقع سليل نوع TStrings.

سلسلتان لكل عنصر في ListBox؟

هناك مواقف عندما ترغب في عرض قائمة بالسلسلة على المستخدم ، على سبيل المثال في عنصر تحكم مربع القائمة ، ولكن لديك أيضًا طريقة ل تخزين سلسلة إضافية واحدة على طول السلسلة المعروضة للمستخدم.

ما هو أكثر من ذلك ، قد ترغب في تخزين / إرفاق أكثر من مجرد سلسلة "عادي" في السلسلة ، قد ترغب في ذلك إرفاق كائن بالعنصر (سلسلة).

ListBox.Items - TStrings "يعرف" كائنات!

إعطاء كائن TStrings نظرة واحدة إضافية في نظام التعليمات. هناك شاء خاصية تمثل مجموعة من الكائنات المرتبطة بكل من السلاسل في خاصية السلاسل - حيث تشير خاصية السلاسل إلى السلاسل الفعلية في القائمة.

إذا كنت ترغب في تعيين سلسلة ثانية (أو كائن) لكل سلسلة في مربع القائمة ، فأنت بحاجة إلى ملء خاصية العناصر في وقت التشغيل.

بينما يمكنك استخدام ListBox.Items.Add طريقة لإضافة سلاسل إلى القائمة ، لربط كائن مع كل سلسلة ، سوف تحتاج إلى استخدام نهج آخر.

ال ListBox.Items.AddObject طريقة تقبل معلمتين. المعلمة الأولى ، "العنصر" هي نص العنصر. المعلمة الثانية ، "AObject" هي الكائن المرتبط بالعنصر.

لاحظ أن مربع القائمة يكشف اضافة عنصر الطريقة التي تفعل نفس Items.AddObject.

سلسلتان لسلسلة واحدة

نظرًا لأن كلا Items.AddObject و AddItem يقبلان متغيرًا من النوع TObject للمعلمة الثانية ، سطر مثل:

//تجميع خطأ! ListBox1.Items.AddObject ('zarko'، 'gajic')؛

سينتج خطأ ترجمة: E2010 الأنواع غير المتوافقة: "TObject" و "string".

لا يمكنك ببساطة توفير سلسلة للكائن لأن قيم سلسلة Win32 في دلفي ليست كائنات.

لتعيين سلسلة ثانية لعنصر مربع القائمة ، تحتاج إلى "تحويل" متغير سلسلة إلى كائن - تحتاج إلى كائن TString مخصص.

عدد صحيح لسلسلة

إذا كانت القيمة الثانية التي تحتاج إلى تخزينها مع عنصر السلسلة قيمة عددية ، فأنت لا تحتاج في الواقع إلى فئة TInteger مخصصة.

ListBox1.AddItem ('Zarko Gajic'، TObject (1973))؛

السطر أعلاه يخزن الرقم الصحيح "1973" جنبًا إلى جنب مع السلسلة "Zarko Gajic" المضافة.

يتم إجراء typecast مباشرة من عدد صحيح إلى كائن أعلاه. المعلمة "AObject" هي بالفعل مؤشر 4 بايت (عنوان) الكائن المضافة. منذ في Win32 يحتل عدد صحيح 4 بايت - مثل هذا يلقي الصعب ممكن.

لاستعادة العدد الصحيح المرتبط بالسلسلة ، يجب إعادة "الكائن" مرة أخرى إلى قيمة عدد صحيح:

// السنة == 1973 السنة: = عدد صحيح (ListBox1.Items.ObjectsListBox1.Items.IndexOf ('Zarko Gajic')) ؛

تحكم دلفي لسلسلة

لماذا توقف هنا؟ إن تعيين السلاسل والأعداد الصحيحة لسلسلة في مربع قائمة ، كما جربت للتو ، قطعة من الكعكة.

بما أن عناصر التحكم في دلفي هي في الواقع كائنات ، يمكنك إرفاق عنصر تحكم بكل سلسلة معروضة في مربع القائمة.

يضيف الرمز التالي إلى التسميات التوضيحية ListBox1 (مربع القائمة) من كافة عناصر التحكم TButton في نموذج (ضع هذا في معالج الأحداث OnCreate للنموذج) مع الإشارة إلى كل زر.

فار idx: عدد صحيح ابدأ   إلى عن على idx: = 0 إلى -1 + مكون فعل   ابدأ     إذا Componentsidx هو TButton ثم ListBox1.AddObject (TButton (Componentsidx) .Caption، Componentsidx)؛النهاية; النهاية;

من أجل "النقر فوق" الزر "الثاني" برمجيًا ، يمكنك استخدام العبارة التالية:

TButton (ListBox1.Items.Objects1). انقر.

أريد تخصيص كائناتي المخصصة لعنصر السلسلة

في موقف أكثر عمومية ، يمكنك إضافة مثيلات (كائنات) للفئات المخصصة الخاصة بك:

نوع TStudent = صف دراسي   نشر fName: سلسلة ؛ السنة: عدد صحيح.عامة     خاصية اسم : قراءة سلسلة fName.خاصية السنة: عدد صحيح اقرأ fYear.البناء خلق(CONST اسم : خيط; CONST السنة: عدد صحيح) ؛النهاية;… البناء TStudent.Create (CONST اسم : خيط; CONST السنة: عدد صحيح) ؛ ابدأ fName: = الاسم ؛ السنة: = السنة ؛ النهاية; -------- ابدأ   / / أضف سلسلتين / كائنات -> الطلاب إلى القائمة ListBox1.AddItem ('John'، TStudent.Create ('John'، 1970))؛ ListBox1.AddItem ('Jack'، TStudent.Create ('Jack'، 1982))؛// الاستيلاء على الطالب الأول - جون الطالب: = ListBox1.Items.Objects0 مثل TStudent.// عرض سنة جون ShowMessage (IntToStr (student.Year)) ؛ النهاية;

ما تصنعه يجب عليك مجانا

إليك ما يجب أن تقوله التعليمات حول الكائنات الموجودة في أحفاد TStrings: لا يمتلك كائن TStrings الكائنات التي تضيفها بهذه الطريقة. لا تزال الكائنات المضافة إلى كائن TStrings موجودة حتى إذا تم إتلاف مثيل TStrings. يجب أن يكونوا دمرت صراحة بواسطة التطبيق.

عند إضافة كائنات إلى سلاسل - كائنات تنشئها - يجب عليك التأكد من تحرير الذاكرة التي تشغلها ، أو سيكون لديك تسرب للذاكرة

يقبل إجراء مخصص عام FreeObjects متغير نوع TStrings كمعلمة فقط. سيقوم FreeObjects بتحرير أي كائنات مرتبطة بعنصر في قائمة السلسلة في المثال أعلاه ، يتم إرفاق "الطلاب" (فئة TStudent) بسلسلة في مربع قائمة ، عندما يكون التطبيق على وشك الإغلاق (حدث OnDestroy الرئيسي للنموذج ، من أجل مثال) ، تحتاج إلى تحرير الذاكرة المحتلة:

FreeObjects (ListBox1.Items)؛

ملاحظة: يمكنك فقط الاتصال بهذا الإجراء عندما يتم إنشاء الكائنات المعينة لعناصر السلسلة.


شاهد الفيديو: تحويل Object ListBox الى ComboBox في برنامج auto play media studio (قد 2022).