我有TPopup菜單,其中3項設置具有以下屬性。確保始終選擇TPopup菜單中至少有一個項目
AutoCheck = True
RadioItem = True
和用於所述第一菜單項的我Checked
屬性設置爲True
以及因此菜單已經最初顯示與它選擇的至少1個項目。這一切都很好,但是如果我點擊當前選中的項目,檢查(點)就會消失,我希望這樣做的目的是在任何時候至少選擇彈出窗口中的一個項目。我該如何去做呢?
我有TPopup菜單,其中3項設置具有以下屬性。確保始終選擇TPopup菜單中至少有一個項目
AutoCheck = True
RadioItem = True
和用於所述第一菜單項的我Checked
屬性設置爲True
以及因此菜單已經最初顯示與它選擇的至少1個項目。這一切都很好,但是如果我點擊當前選中的項目,檢查(點)就會消失,我希望這樣做的目的是在任何時候至少選擇彈出窗口中的一個項目。我該如何去做呢?
組中的項目也應該具有相同的非零GroupIndex
。這與RadioItem
一起應該使這些項目像無線電組一樣工作。
但是,AutoCheck
似乎並不尊重GroupIndex
和RadioItem
屬性,因爲當您單擊當前檢查的項目時,它將清除檢查。 (可以說,這也算是在VCL中的錯誤。)
這裏有一個解決方法:
設置AutoCheck
到False
,將所有項目的相同的非零GroupIndex
和共同OnClick
處理程序來檢查被點擊像這樣的項目:
procedure TForm1.ItemClick(Sender: TObject);
begin
(Sender as TMenuItem).Checked := True;
end;
或使用Actions,與他們這似乎按預期工作。
可以以下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;
謝謝,我剛剛使用了@TOndrej建議的actionlist方法,現在它工作正常。 – avue 2012-07-27 07:10:22
謝謝,有點擺弄周圍後,我能使其工作同時使用的您發佈的方法。我會同意這看起來像是VCL中的一個錯誤,因爲我使用的是Delphi7,而且你可能使用了比這更新的東西,並且在你的版本中「bug」仍然存在。再次感謝tho的幫助,非常感謝。 – avue 2012-07-27 07:05:09
謝謝。我使用的是當前版本的XE2,它仍然像上面描述的那樣工作。 – 2012-07-27 07:30:09