Object 为什么在将对象添加到列表中后,列表框立即返回nil或no对象?
以下是system.object: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;
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。我感到困惑。