Tôi đang sử dụng menu bật lên ở Delphi. Tôi muốn sử dụng nó theo kiểu "nhóm radio" nếu người dùng chọn một mục được chọn và các mục khác không được chọn. Tôi đã thử sử dụng thuộc tính AutoCheck, nhưng điều này cho phép nhiều mục được kiểm tra. Có cách nào để đặt menu bật lên sao cho chỉ có một mục có thể được kiểm tra?Menu Delphi Popup Kiểm tra
Trả lời
Zartog là đúng, nhưng nếu bạn muốn giữ hộp kiểm, hãy gán sự kiện này cho mọi mục trong menu bật lên.
Lưu ý rằng mã này có vẻ hơi lông bởi vì nó không phụ thuộc vào việc biết tên của menu bật lên của bạn (do đó, tìm kiếm bằng "GetParentComponent").
procedure TForm2.OnPopupItemClick(Sender: TObject);
var
i : integer;
begin
with (Sender as TMenuItem) do begin
//if they just checked something...
if Checked then begin
//go through the list and *un* check everything *else*
for i := 0 to (GetParentComponent as TPopupMenu).Items.Count - 1 do begin
if i <> MenuIndex then begin //don't uncheck the one they just clicked!
(GetParentComponent as TPopupMenu).Items[i].Checked := False;
end; //if not the one they just clicked
end; //for each item in the popup
end; //if we checked something
end; //with
end;
Bạn có thể gán sự kiện trong thời gian chạy cho mỗi hộp cửa sổ bật lên vào mẫu của bạn như thế này (nếu bạn muốn làm điều đó):
procedure TForm2.FormCreate(Sender: TObject);
var
i,j: integer;
begin
inherited;
//look for any popup menus, and assign our custom checkbox handler to them
if Sender is TForm then begin
with (Sender as TForm) do begin
for i := 0 to ComponentCount - 1 do begin
if (Components[i] is TPopupMenu) then begin
for j := 0 to (Components[i] as TPopupMenu).Items.Count - 1 do begin
(Components[i] as TPopupMenu).Items[j].OnClick := OnPopupItemClick;
end; //for every item in the popup list we found
end; //if we found a popup list
end; //for every component on the form
end; //with the form
end; //if we are looking at a form
end;
Để đáp lại bình luận bên dưới câu trả lời này: Nếu bạn muốn yêu cầu ít nhất một mục cần kiểm tra, sau đó sử dụng mục này thay vì khối mã đầu tiên. Bạn có thể muốn đặt mục được chọn mặc định trong sự kiện oncreate.
procedure TForm2.OnPopupItemClick(Sender: TObject);
var
i : integer;
begin
with (Sender as TMenuItem) do begin
//go through the list and make sure *only* the clicked item is checked
for i := 0 to (GetParentComponent as TPopupMenu).Items.Count - 1 do begin
(GetParentComponent as TPopupMenu).Items[i].Checked := (i = MenuIndex);
end; //for each item in the popup
end; //with
end;
Để xử lý các mục menu bật lên (hoặc bất kỳ) khác như mục nhóm radio, hãy đặt thuộc tính 'RadioItem' thành đúng cho từng mục bạn muốn có trong nhóm radio.
Thay vì hiển thị dấu kiểm, nó sẽ hiển thị dấu đầu dòng theo mục đã chọn, nhưng nó sẽ hoạt động theo cách bạn muốn và dấu hiệu trực quan sẽ khớp với tiêu chuẩn cửa sổ.
Để phóng to trên bài đăng của Zartog: Menu bật lên trong Delphi (từ ít nhất D6) có thuộc tính GroupIndex cho phép bạn có nhiều bộ mục radio trong một menu. Đặt GroupIndex 1 cho nhóm đầu tiên, 2 cho một thứ hai, vv
Vì vậy: Set autocheck = True Set RadioItem = True Set GroupIndex nếu bạn cần nhiều hơn một nhóm các mặt hàng thanh
- 1. Menu Popup tùy chỉnh trong VIM
- 2. Làm thế nào để kiểm tra Menu
- 3. Kiểm tra tệp được mở ở Delphi
- 4. emacs: x-popup-menu hạn chế kích thước tối đa?
- 5. Popup chặn trong Google Chrome gây vấn đề với Capybara/RSpec kiểm tra
- 6. Delphi XE2 Kiểu: Menu chính Bỏ qua
- 7. ToolTip so với Popup (kiểm soát WPF)
- 8. Các thành phần kiểm tra chính tả cho Delphi
- 9. Máy chủ HTTP để kiểm tra đơn vị trong Delphi
- 10. Hộp thoại Popup Privacy Privacy bị thiếu "Nhớ" hộp kiểm
- 11. Dừng cảnh báo javascript popup trong webbrowser C# kiểm soát
- 12. Ràng buộc Python AppIndicator -> howto kiểm tra xem menu có đang mở không?
- 13. Làm cách nào để kiểm tra xem menu thả xuống có bị vô hiệu hóa không?
- 14. Radio Button Kiểm tra không kiểm tra
- 15. angularjs - bộ kiểm tra kiểm tra
- 16. Tăng thời lượng hoạt ảnh WPF PopUp
- 17. Selenium: Kiểm tra cửa sổ bật lên
- 18. Kéo điều khiển WPF Popup
- 19. Bất kỳ công cụ để kiểm tra phụ thuộc vòng tròn trong một dự án Delphi
- 20. Delphi: Kiểm tra xem tệp có đang được sử dụng hay không
- 21. Cách chính xác để kiểm tra xem giá trị là ngày/số trong Delphi
- 22. kiểm tra xem đối tượng được tạo hay không trong delphi
- 23. Công cụ kiểm tra chức năng nguồn mở Delphi yêu thích của bạn là gì?
- 24. Kiểm tra đơn vị Delphi cho một TThread với FreeOnTerminate = True
- 25. Kiểm tra đơn vị nguồn đơn cho Free Pascal và Delphi
- 26. Có thể hoặc hợp lý để thực hiện khóa kiểm tra kép ở Delphi?
- 27. Kế hoạch tái cấu trúc cho hơn 17 năm Mã Delphi không thể kiểm tra
- 28. Delphi - Không thể nhận HMAC-SHA256 để vượt qua các vectơ kiểm tra RFC 4231
- 29. Làm thế nào để làm cho Delphi DUnit kiểm tra thất bại khi TSQLConnection.Connected = true
- 30. Làm thế nào để kiểm tra xem một tiến trình đang chạy bằng Delphi?
Ông cũng nên thêm mã kiểm tra rằng ít nhất một mục menu được chọn và điều đó cho biết thêm người dùng kiểm tra lại bỏ chọn mục đã chọn. Điều đó phải đơn giản cho ví dụ của bạn. – gabr
Tôi không chắc đó là mục tiêu của anh ấy, nhưng tôi đã thêm một khối để xử lý điều đó trong câu trả lời. Nó thực sự đơn giản hóa mọi thứ một chút. – JosephStyons
Điều này chắc chắn không phải là cách để đi: chức năng này đã được tích hợp sẵn. Xem bài viết của Zartog và Gerry, và kết hợp cả hai. – onnodb