2012-09-18 31 views
8

Tôi làm cách nào để tìm tất cả các điều khiển trên biểu mẫu hiện có thể hiển thị với người dùng? tức là liệt kê tất cả các điều khiển có thể được gắn thẻ và không bị ẩn khỏi chế độ xem (ví dụ: trên một trang tính không nhìn thấy được).Tìm tất cả các điều khiển hiển thị cho người dùng

+2

Phần trước 'tức là' không khớp chính xác với phần sau nó. Ví dụ, trước khi nó, các 'điều khiển' không cần phải được cửa sổ, và chúng có thể bị vô hiệu hóa. Sau đó, họ phải được cả hai cửa sổ và kích hoạt. –

Trả lời

14

Vì bạn viết rằng bạn muốn liệt kê các điều khiển mà bạn có thể tab, tôi cho rằng bạn đang nói về điều khiển cửa sổ.

Sau đó, bạn có thể làm đơn giản

procedure TForm1.Button1Click(Sender: TObject); 
var 
    i: integer; 
begin 
    for i := 0 to ComponentCount - 1 do 
    if Components[i] is TWinControl then 
     if TWinControl(Components[i]).CanFocus then 
     Memo1.Lines.Add(Components[i].Name) 
end; 

nếu bạn biết rằng hình thức sở hữu tất cả con của nó và không có điều khiển khác. Nếu không, bạn phải làm

procedure AddVisibleChildren(Parent: TWinControl; Memo: TMemo); 
var 
    i: Integer; 
begin 
    for i := 0 to Parent.ControlCount - 1 do 
    if Parent.Controls[i] is TWinControl then 
     if TWinControl(Parent.Controls[i]).CanFocus then 
     begin 
     Memo.Lines.Add(Parent.Controls[i].Name); 
     AddVisibleChildren(TWinControl(Parent.Controls[i]), Memo); 
     end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    AddVisibleChildren(Self, Memo1); 
end; 
Các vấn đề liên quan