在运行时填充时,ComboBox项不会缩进

时间:2009-08-21 15:13:35

标签: delphi delphi-2009

编辑:在底部更新。

希望有人能在这里帮忙,因为它让我绕过弯道!

Delphi 2009

我有一个包含两个TComboxBoxEx组件的表单

我在运行时使用以下代码填充

procedure TForm1.btn1Click(Sender: TObject);
var
  N: Integer;
begin
  cb1.ItemsEx.Add.Caption := 'Test';
  for N := 0 to 5 do
    with cb1.ItemsEx.Add do
    begin
      Caption := 'Item ' + IntToStr(N);
      Indent := 1;
    end;
 end;

另一个我在设计时使用相同的数据填充并设置相同的属性。

我在运行时填充的那些项目根本没有缩进,而设计时间缩进就好了。

有什么想法吗?帮助说,ident是要缩进的像素数,但设计时间缩进了多个像素,即使缩进设置为1。

例如,在上面的代码中将缩进设置为10无效。

以下是设计时comobo的DFM部分

object cb2: TComboBoxEx
Left = 184
Top = 8
Width = 145
Height = 22
ItemsEx = <
  item
    Caption = 'Test'
  end
  item
    Caption = 'Item 0'
    Indent = 1
  end
  item
    Caption = 'Item 1'
    Indent = 1
  end
  item
    Caption = 'Item 2'
    Indent = 1
  end
  item
    Caption = 'Item 3'
    Indent = 1
  end
  item
    Caption = 'Item 4'
    Indent = 1
  end
  item
    Caption = 'Item 5'
    Indent = 1
  end>
ItemHeight = 16
TabOrder = 2
Text = 'cb1'
end

更新

在标题和缩进后设置组合项的数据属性似乎可以使其起作用。

procedure TForm1.btn1Click(Sender: TObject);
var
  N: Integer;
begin
  cb1.ItemsEx.Add.Caption := 'Test';
  for N := 0 to 5 do
    with cb1.ItemsEx.Add do
    begin
      Caption := 'Item ' + IntToStr(N);
      Indent := 1;
      Data := Pointer(N);  // New Line
    end;
 end;

有点奇怪。

2 个答案:

答案 0 :(得分:1)

不太确定为什么你的代码不起作用,但这里有一些代码:

for N := 0 to 5 do
   cb1.ItemsEx.AddItem(intToStr(N), 0, 0, 0, DESIRED_INDENT_LEVEL, nil);

答案 1 :(得分:0)

尝试在设置标题之前设置缩进属性。 似乎是TComboBoxEx中的“已知错误”。