Trong Delphi 2010 có cách nào để lặp qua bất kỳ loại thuộc tính được lập chỉ mục nào (ví dụ như Pages of TPageControl) không?Lặp lại qua thuộc tính được lập chỉ mục trong Delphi 2010
Trả lời
Không, đây là không thể, vì không có mô hình chuẩn:
- quy định cụ thể các loại chỉ số
- xác định các giá trị khởi đầu và kết thúc của chỉ số để sử dụng
Đó là tại sao các lớp nhất định có các điều tra viên: đó là mô hình cho biết ... trong tuyên bố cách liệt kê nó.
gì bạn có thể làm tuy nhiên là một ước tính tốt nhất:
- nhất lần so với chỉ số là số nguyên
- nhất lần so với chỉ số giá khởi điểm zero
- hầu hết các lần có một Bá tước tài sản hoặc Chiều dài mà nói bạn cách lấy giá trị kết thúc
Cuối cùng, có thể "retrofit" TPageControl with a GetEnumertor using class helpers (hoặc ghi người trợ giúp nếu loại cơ bản là bản ghi).
Tôi đã xem bài đăng của bạn (nội dung tốt) trong khi tôi đang tìm kiếm trên internet, cố gắng tìm câu trả lời cho điều này :) Trong trường hợp của tôi, tôi có một nửa tá thuộc tính được lập chỉ mục của các thành phần khác nhau . Tôi lặp qua chúng chỉ để có được thuộc tính "Chú thích". Vì vậy, ngay bây giờ, tôi có nửa tá các vòng gần giống hệt nhau và tôi không thích điều đó. Mặc dù điều GetEnumerator là tuyệt vời, nhưng đó là quá nhiều mã cho một vấn đề nhỏ như vậy. –
Điều gì về việc trừu tượng hóa các vòng lặp đó thành một số mã chung, sau đó chuyển một phương thức nặc danh cho nó có chứa mã không giống hệt nhau? –
Nếu tôi hiểu chính xác bạn, bạn muốn lặp qua các thuộc tính này thông qua RTTI mà không biết bất kỳ điều gì về thuộc tính và giá trị chỉ mục của nó. Bởi vì các giá trị chỉ mục hợp lệ không được là một chuỗi các giá trị số nguyên, điều này không thể thực hiện được. Có thể có các thuộc tính với chuỗi chỉ mục hoặc với tham chiếu đối tượng làm giá trị chỉ mục. Và không có cơ chế trong RTTI để truy vấn các giá trị chỉ mục hợp lệ có thể được sử dụng cho một lần lặp.
@TLame 'ActivePageIndex' không phải là thuộc tính được lập chỉ mục. –
Tôi không hiểu bình luận của bạn, khá xúc phạm bằng cách ... Tôi đã không nói bất cứ điều gì về ActivePageIndex, tôi không biết nơi bạn nhìn thấy nó. Tôi đã nói Pages. –
Tôi đoán bạn đang đề cập đến các ý kiến đã xóa –