Cách tạo TComboBox với hai cột có một trong các cột được ẩn để có thể giữ giá trị id cùng với mục thực tế trong đó? Và sau đó làm thế nào để có được giá trị id đó lập trình?Làm thế nào để tạo ra một combobox với hai cột (một ẩn) trong Delphi 7?
Trả lời
Không cần hai cột ở đây.
Bạn có thể tận dụng thực tế là TComboBox.Items
(giống như nhiều thứ khác trong Delphi, như TStringList
, TMemo.Lines
và TListBox.Items
) xuống từ TStrings
, trong đó có cả Strings
và Objects
tài sản. Objects
lưu trữ mọi thứ có kích thước là TObject
, là con trỏ.
Điều này có nghĩa bạn có thể lưu trữ giá trị số nguyên của bạn bằng cách đơn giản typecasting nó vào một TObject khi thêm nó, và typecasting nó trở lại một Integer khi lấy nó.
Something như thế này nên làm việc:
procedure TForm1.FormCreate(Snder: TObject);
var
i: Integer;
sItem: String;
begin
for i := 0 to 9 do
begin
sItem := Format('Item %d', [i]);
ComboBox1.Items.AddObject(sItem, TObject(i));
end;
end;
Để lấy giá trị:
procedure TForm1.ComboBox1Click(Sender: TObject);
var
Idx: Integer;
Value: Integer;
begin
Idx := ComboBox1.ItemIndex;
if Idx <> -1 then
begin
Value := Integer(ComboBox1.Items.Objects[Idx]);
// Do something with value you retrieved
end;
end;
Lưu ý rằng, kể từ khi Objects sở hữu thực sự có nghĩa là để lưu trữ đối tượng, điều này mang đến cho bạn rất linh hoạt. Dưới đây là một ví dụ (cố ý rất tầm thường) về việc lưu trữ thông tin liên hệ của khách hàng trong một cá thể đối tượng được liên kết và hiển thị nó trong các nhãn khi một mục từ một hộp danh sách được chọn.
unit Unit1;
interface
uses
Windows, Messages, Variants, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
type
TCustomer=class
private
FContact: string;
FPhone: string;
public
constructor CreateCustomer(const AContact, APhone: string);
property Contact: string read FContact write FContact;
property Phone: string read FPhone write FPhone;
end;
TForm1 = class(TForm)
ListBox1: TListBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
lblContact: TLabel;
lblPhone: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ListBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TCustomer }
constructor TCustomer.CreateCustomer(const AContact, APhone: string);
begin
inherited Create;
FContact := AContact;
FPhone := APhone;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i: Integer;
begin
for i := 0 to ListBox1.Items.Count - 1 do
ListBox1.Items.Objects[i].Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
lblContact.Caption := '';
lblPhone.Caption := '';
// Create some customers. Of course in the real world you'd load this
// from some persistent source instead of hard-coding them here.
ListBox1.Items.AddObject('N Company', TCustomer.CreateCustomer('Nancy', '555-3333'));
ListBox1.Items.AddObject('B Company', TCustomer.CreateCustomer('Brad', '555-1212'));
ListBox1.Items.AddObject('A Company', TCustomer.CreateCustomer('Angie', '555-2345'));
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
Cust: TCustomer;
begin
if ListBox1.ItemIndex <> -1 then
begin
Cust := TCustomer(ListBox1.Items.Objects[ListBox1.ItemIndex]);
lblContact.Caption := Cust.Contact;
lblPhone.Caption := Cust.Phone;
end;
end;
end.
Điều khiển ComboBox không hỗ trợ cột và bạn không cần cột ẩn để hoàn thành những gì bạn cần.
Thuộc tính TComboBox.Items
là số TStrings
hậu duệ. Nó có thể giữ cả hai giá trị chuỗi và các giá trị dữ liệu do người dùng xác định liên kết cùng một lúc, nhưng người dùng sẽ chỉ thấy các giá trị chuỗi trong giao diện người dùng. Sử dụng phương thức Items.AddObject()
để thêm chuỗi + giá trị ID vào danh sách, sau đó sử dụng thuộc tính Items.Objects[]
để truy xuất giá trị ID khi cần.
Ngoài ra, bạn chỉ có thể lưu trữ giá trị ID của mình trong một mảng riêng biệt có cùng số phần tử như ComboBox và sau đó sử dụng chỉ mục mục ComboBox để truy cập các giá trị mảng. Điều này đặc biệt quan trọng nếu bạn cần lưu trữ giá trị -1, vì giá trị cụ thể đó không thể truy xuất được từ thuộc tính Objects[]
của TComboBox
do cách thức triển khai phương thức getter, như Rob nói.
- 1. Làm thế nào để tạo ra một Combobox Winforms với Label và giá trị?
- 2. Làm thế nào để tạo ra một tập tin XML sử dụng TXML Document trong Delphi 7
- 3. Làm thế nào để tạo ra một cột không null trong một cái nhìn
- 4. Làm thế nào để ẩn một cột excel?
- 5. làm thế nào để tạo ra một cửa sổ với hai nút đó sẽ mở ra một cửa sổ mới
- 6. Làm cách nào để có hai cột trong một điểm bảng với cùng một cột trong cột khác với ActiveRecord?
- 7. Delphi: Làm thế nào để tạo ra một chủ đề an toàn toàn cầu TList?
- 8. Làm thế nào để tạo ra một chi nhánh của một phiên bản cũ với TortoiseSVN?
- 9. Làm thế nào để tạo một Outlook Plugin bằng Delphi?
- 10. Làm thế nào để chèn một cột trong một GridView sau khi tự động tạo ra các cột - ASP.NET
- 11. Làm thế nào để tạo một thể hiện đối tượng với RTTI trong Delphi 2010?
- 12. Làm thế nào để ẩn một cột trong một điều khiển ListView?
- 13. làm thế nào để kết hợp hai cột với một if/else trong pandas python?
- 14. Làm thế nào để tạo ComboBox như UserControl trong WPF
- 15. Làm thế nào để tạo ra một vòng tròn với một lỗ trong một vòng tròn trong WPF?
- 16. Làm thế nào để làm một dòng lệnh xây dựng bằng cách sử dụng Delphi 7?
- 17. tạo ra một DSN sử dụng ODBC mới với Delphi
- 18. Ẩn một cột trong JTable
- 19. Làm thế nào để tạo ra một mảng toàn cầu?
- 20. Đặt một hình ảnh bên trong một combobox (cạnh phải) trong Delphi/Win32
- 21. Làm thế nào để bạn tạo ra một cột truy cập gia đình với CQL3 trong cassandra
- 22. Python & GTK3: Làm thế nào để tạo ra một Liststore
- 23. Làm thế nào để tạo ra một boxplot trong ggplot sử dụng một ma trận
- 24. Làm cách nào để tạo đầu ra cột trong Perl?
- 25. Làm thế nào để tạo ra một RectangleF sử dụng hai PointF?
- 26. Clojure: Làm thế nào để tạo ra một 'trie'?
- 27. Làm thế nào để rò rỉ một chuỗi trong Delphi
- 28. Làm thế nào để tạo ra một mô hình với một trường kiểu enum?
- 29. Làm thế nào để tạo ra một khóa ngoại với "ON UPDATE CASCADE" trên Oracle?
- 30. Làm thế nào để tạo ra một icosahedron chia nhỏ?
comboboxes không cột chống đỡ, nhưng listboxes như một phần của combo làm – OnTheFly
@ user539484 và có rất nhiều chết tiệt của comboboxes của bên thứ 3, cột hỗ trợ và hình ảnh và HTML và bất cứ điều gì khác. Vì vậy, chúng tôi phải giải thích nó hoặc là "cách tạo lớp combobox không cổ phần mới ..." hoặc "cách tạo ví dụ của cổ phiếu TCombobox để ...". Tôi cho sau –
Cẩn thận với việc cố gắng lưu trữ 'TObject (-1)' trong một hộp tổ hợp. Bạn có thể lưu trữ nó, nhưng bạn không thể lấy lại nó sau đó. Đó là giá trị hệ điều hành trả về như một lỗi khi nó không thể lấy một giá trị từ một hộp kết hợp, do đó, điều khiển VCL dịch nó thành một ngoại lệ khi bạn đọc nó. –