سؤال

كما ترون في تاريخ سؤالي ، أقوم بتطوير مدير إلكتروني ، وسيكون ذلك مفتوح المصدر وسأطلقه في حوالي 10 أيام ، لكن لديّ TRadioGroup, ، كما ترون:
Tradiogroup المستخدمة في النموذج الخاص بي http://img85.imageshack.us/img85/1830/radiogroup.png

وأريد تخزين شيء ما في متغير (يجب أن يكون Integer) سيكون "مرتبطًا" بهذا TRadioGroup.

أنا بحاجة للقيام if وظيفة مثل هذا:

التسمية التوضيحية للرقم TradiObutton -> الذي يجب تخزينه في المتغير

قم بتناسب 2xwidth - الافتراضي -> 0
مناسب 2xheight -> 1
عرض مناسب -> 2
ارتفاع الارتفاع -> 3

لكني استخدمت للتو TRadioGroup و TRadioButton مرة واحدة ، مختلفة عن C# التي استخدمتها أكثر من 20 مرة. ثم أريد أن أعرف ما أحتاج إلى وضعه على وظيفة if ، لأن ما الذي سأفعله بالفعل أعرف كيفية القيام به:

var
  num: Integer;

begin
  if(TRadioButton1 checked?)
  begin
    num := 0;
  end;
end.

ما أحتاج إلى وضعه داخل أقواس if وظيفة؟

ملاحظة: سأضع الاعتمادات على البرنامج للأشخاص الذين ساعدوني في هذا المشروع الصغير.

هل كانت مفيدة؟

المحلول

لدى TradiObutton الخاصية التي تم فحصها. ولكن لدى Tradiogroup خاصية itemIndex.

يتم تخزين العناصر الموجودة في مجموعة Tradiogroup باستخدام tstrings. حتى تتمكن من ربط كائن بكل خيار ويمكنك إلقاء عدد صحيح على tooject لتخزينه.

مثال:

// fill the radiogroup
radiogroup.Items.AddObject('Fit 2xWidth', TObject(0));
radiogroup.Items.AddObject('Fit 2xHeight', TObject(1));
radiogroup.Items.AddObject('Fit Width', TObject(2));
radiogroup.Items.AddObject('Fit Height', TObject(3));
radiogroup.ItemIndex := 0;

لقراءة الإعداد الحالي:

value := radiogroup.ItemIndex;

أو للحصول على عدد صحيح مرتبط:

index := radiogroup.ItemIndex;
Assert(index>=0); // Sanity check
value := Integer(radiogroup.Items.Objects[index]);

في حالتك ، تكون القيم من 0 إلى 3 حتى تتمكن من استخدام itemIndex.

كملاحظة ، إذا لم تكن وظيفة. الوظيفة هي قطعة من التعليمات البرمجية التي تُرجع قيمة بناءً على معلمات الإدخال. إذا كان بيان ، وهو أمر يمكن تنفيذه. البيان IF خاص لأنه يمكّنك من تنفيذ عبارة مختلفة بناءً على شرط IF.

نصائح أخرى

مجرد نصيحة صغيرة: الإعداد .ItemIndex لا يرسل تركيز لوحة المفاتيح إلى عنصر الراديو ، وأنا أعلم كيفية إصلاحه ، اقرأ مسبقًا.

بدلاً من التحديد بواسطة رمز راديو في مجموعة مشعة عن طريق الإعداد .ItemIndex من الأفضل القيام بذلك عن طريق إرسال التركيز إلى عنصر الراديو ؛ فقط لأكون واضحًا جدًا: أعني إرسال التركيز فقط إلى عنصر الراديو ، وليس مجموعة الراديو بأكملها.

بدلاً من: radiogroup.itemindex:=TheIndex;

افعلها على هذا: TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;

سيجعل عنصر الراديو ليتم تحديده و أرسل تركيز لوحة المفاتيح إليه, ، لذلك سيعرض المستطيل المنقط عليه ، كما لو كان المستخدم قد نقر عليه.

ملاحظة 1: لرؤيته في العمل ، استخدم مفاتيح مؤشر لوحة المفاتيح ومقارنةلة فقط الإعداد .ItemIndex وإرسال التركيز إلى عنصر الراديو.

ملاحظة 2: إذا كنت تستخدم TRadioButton(radiogroup.Controls[TheIndex]).SetFocus; ثم لا توجد حاجة لتعيين .ItemIndex على الإطلاق ، سيتم ذلك أيضًا.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top