我在 Delphi xe6 中创建了一个自定义 ListBoxItem,(基于 @MikeSutton 在这篇文章中的回答What control should I use to create this UI in Delphi Firemonkey)
我有 2TNumberBox
和 2TLabels
那里。这是我的自定义列表框项
TListBoxItemMatchBet = class(TListBoxItem)
private
....
//some other methods and properties
fLeftValue: integer;
procedure setLeftValue(const Value: integer);
procedure setLeftValueStyle();
procedure LeftValueChange(Sender: Tobject);
protected
procedure ApplyStyle; override;
published
property Text: string read fText write setText;
property LeftValue: integer read fLeftValue write setLeftValue;
property RightValue: integer read fRightValue write setRightValue;
end;
procedure TListBoxItemMatchBet.setLeftValue(const Value: integer);
begin
fLeftValue := Value;
setLeftValueStyle();
end;
procedure TListBoxItemMatchBet.setLeftValueStyle;
var
O: TFMXObject;
begin
O := FindStyleResource('nmbLeft'); // StyleName of the item
if O is TNumberBox then
begin
TNumberBox(O).ValueType := TNumValueType.Integer;
TNumberBox(O).Value := fLeftValue;
TNumberBox(O).OnChange := LeftValueChange;
end;
end;
procedure TListBoxItemMatchBet.ApplyStyle;
begin
inherited;
setTextStyle();
setLeftValueStyle();
setRightValueStyle();
end;
procedure TListBoxItemMatchBet.LeftValueChange(Sender: Tobject);
begin
fLeftValue := round((Sender as TNumberBox).Value);
end;
一切都很好,除非我的列表框中有很多(大约 20 个)项目并且我向上滚动,当我向下滚动时,数字框的值将更改为其他记录(例如,当我回滚项目时值为 50 时,它的值将更改为 10 和 50 之类的其他内容将转到其他列表框项)。
此行为在 Android 和 Iphone 模拟器上。
这是一些屏幕截图。
设置值(右上角)
向上滑动
向下滚动
价值观没了