2012-07-27 46 views
1

我有TPopup菜單,其中3項設置具有以下屬性。確保始終選擇TPopup菜單中至少有一個項目

AutoCheck = True 
RadioItem = True 

和用於所述第一菜單項的我Checked屬性設置爲True以及因此菜單已經最初顯示與它選擇的至少1個項目。這一切都很好,但是如果我點擊當前選中的項目,檢查(點)就會消失,我希望這樣做的目的是在任何時候至少選擇彈出窗口中的一個項目。我該如何去做呢?

回答

7

組中的項目也應該具有相同的非零GroupIndex。這與RadioItem一起應該使這些項目像無線電組一樣工作。

但是,AutoCheck似乎並不尊重GroupIndexRadioItem屬性,因爲當您單擊當前檢查的項目時,它將清除檢查。 (可以說,這也算是在VCL中的錯誤。)

這裏有一個解決方法:

設置AutoCheckFalse,將所有項目的相同的非零GroupIndex和共同OnClick處理程序來檢查被點擊像這樣的項目:

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

或使用Actions,與他們這似乎按預期工作。

+0

謝謝,有點擺弄周圍後,我能使其工作同時使用的您發佈的方法。我會同意這看起來像是VCL中的一個錯誤,因爲我使用的是Delphi7,而且你可能使用了比這更新的東西,並且在你的版本中「bug」仍然存在。再次感謝tho的幫助,非常感謝。 – avue 2012-07-27 07:05:09

+0

謝謝。我使用的是當前版本的XE2,它仍然像上面描述的那樣工作。 – 2012-07-27 07:30:09

0

可以以下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; 
+0

謝謝,我剛剛使用了@TOndrej建議的actionlist方法,現在它工作正常。 – avue 2012-07-27 07:10:22