التأكد من تحديد عنصر واحد على الأقل في قائمة TPopup دائمًا

StackOverflow https://stackoverflow.com//questions/11681420

  •  12-12-2019
  •  | 
  •  

سؤال

لدي قائمة TPopup مع إعداد 3 عناصر بالخصائص التالية.

AutoCheck = True
RadioItem = True

وبالنسبة لعنصر القائمة الأول قمت بتعيين Checked الملكية ل True بالإضافة إلى ذلك، تحتوي القائمة على عنصر واحد محدد على الأقل ويتم عرضه في البداية.كل هذا جيد وجيد، ولكن إذا قمت بالنقر فوق العنصر المحدد حاليًا، فإن علامة الاختيار (النقطة) تختفي وأريد أن أجعلها بحيث يتم تحديد عنصر واحد على الأقل في النافذة المنبثقة في جميع الأوقات.كيف أفعل ذلك؟

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

المحلول

يجب أن تحتوي العناصر الموجودة في المجموعة أيضًا على نفس العناصر غير الصفرية GroupIndex.هذا، جنبا إلى جنب مع RadioItem يجب أن تجعل العناصر تتصرف مثل مجموعة الراديو.

ومع ذلك، يبدو أن AutoCheck لا يحترم GroupIndex و RadioItem الخصائص، حيث أنه سيتم مسح الشيك عند النقر فوق عنصر محدد حاليًا.(يمكن القول إن هذا يمكن اعتباره خطأً في VCL.)

إليك الحل البديل:

تعيين AutoCheck ل False, ، قم بتعيين جميع العناصر بنفس القيمة غير الصفر GroupIndex وشائعة OnClick معالج للتحقق من العنصر الذي تم النقر عليه مثل هذا:

procedure TForm1.ItemClick(Sender: TObject);
begin
  (Sender as TMenuItem).Checked := True;
end;

او استعمل أجراءات, يبدو أن هذا يعمل معهم كما هو متوقع.

نصائح أخرى

يمكنك تعيين معالج OnClick التالي لجميع عناصر قائمة مجموعة الراديو الخاصة بك:

procedure TForm1.MenuItemClickHandler(Sender: TObject);
    begin
        if Sender is TMenuItem then
        begin
            if not (Sender as TMenuItem).Checked then (Sender as TMenuItem).Checked:=True;
        end;
    end;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top