Object 为什么在将对象添加到列表中后,列表框立即返回nil或no对象?

Object 为什么在将对象添加到列表中后,列表框立即返回nil或no对象?,object,listbox,nullreferenceexception,delphi-prism,Object,Listbox,Nullreferenceexception,Delphi Prism,以下是system.object: TTrendGroup = class(System.Object) SigList:ArrayList; Rate,Phase,Delay:SmallInt; RateIndex,PhaseIndex:SmallInt; firstTime:Boolean; base:integer; Enabled:Boolean; name:string; public constructor;

以下是system.object:

  TTrendGroup = class(System.Object)
    SigList:ArrayList;
    Rate,Phase,Delay:SmallInt;
    RateIndex,PhaseIndex:SmallInt;
    firstTime:Boolean;
    base:integer;
    Enabled:Boolean;
    name:string;
    public
    constructor;
    method AddTGroup(signal:TTrendSignal);
    method Clear;
    method Poll(list:ArrayList);
    method ReadTGroup(bTGr:BinaryReader);
    method WriteTGroup(bTGw:BinaryWriter);
    method WriteSignals(bWSw:BinaryWriter);
    method ToString:String;override;
  end;

constructor TTrendGroup;
begin
  SigList := new ArrayList;
  Rate := 30;
  Phase := 0;
  Delay := Phase;
  RateIndex := 4;
  PhaseIndex := 0;
  firsttime := true;
  enabled := true;
  name := '';
end;
下面是如何从上面的system.object创建对象并将其添加到我的GroupList列表框中:

method HTrendFrm.AddGroup1_Click(sender: System.Object; e: System.EventArgs);
var
  i:integer;
  grp:TTrendGroup;
begin
  if ReadWrite then
  begin
    grp := new TTrendGroup;
    grp.name:='New Group';
    i := GroupList.Items.Add(grp);
    GroupList.SelectedIndex := i;
    grpName.Text := 'New Group';
    PollBtn.Checked := grp.Enabled;
    RateBox.SelectedIndex := grp.RateIndex;
    PhaseBox.SelectedIndex:= grp.PhaseIndex;
    SignalListBox.Items.Clear;
    UpdateButtons;
  end;
end;
以下是我如何尝试检索刚才添加的system.object:

method HTrendFrm.GroupList_Click(sender: System.Object; e: System.EventArgs);
 var
  grp:TTrendGroup;
begin
  if (GroupList.SelectedIndex = -1) then exit;
  with GroupList do
  begin
    grp := TTrendGroup(items[SelectedIndex]); <<<<< HERE is WHERE THE PROBLEM IS. grp always returns NIL.
  end;
end;
方法HTrendFrm.GroupList\单击(发送方:System.Object;e:System.EventArgs);
变量
grp:ttr组;
开始
如果(GroupList.SelectedIndex=-1),则退出;
用GroupList做什么
开始

grp:=TTrendGroup(项目[SelectedIndex]) 当返回的对象为
nil
时,是否验证
SelectedIndex
值是否实际有效?您的代码中有一个逻辑错误,当列表框不为空时,允许将
SelectedIndex
设置为
-1
。您的
if
语句需要使用
运算符,而不是
运算符:

// if (GroupList.Items.Count<=0) and (GroupList.SelectedIndex = -1) then exit;
if (GroupList.Items.Count<=0) or (GroupList.SelectedIndex = -1) then exit;

//if(GroupList.Items.Countif(GroupList.Items。Count@DavidHeffernan,好的,我对代码做了更改…我的程序运行方式奇怪,我忽略了那个小逻辑错误。
GroupList.Items.Count
怎么可能是
<0
@KenWhite,你完全正确。我忽略了这个简单的错误,因为我更专注于为什么我不能我似乎无法从列表框中检索system.object,但没有收到nil错误消息。是的,我确实验证了返回的object grp是否设置为nil。@Remy Lebeau,我已经对代码进行了更改,并验证了selectedIndex值是否正确。但它仍然返回nil。我感到困惑。