التأكد من تحديد عنصر واحد على الأقل في قائمة TPopup دائمًا
-
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;