首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

奇怪的现象,求高人指点,该怎么解决

2012-02-05 
奇怪的现象,求高人指点小弟刚学Delphi不久,写了段程序,现贴如下:Delphi(Pascal) codem_iCheckedCount : 0

奇怪的现象,求高人指点
小弟刚学Delphi不久,写了段程序,现贴如下:

Delphi(Pascal) code
  m_iCheckedCount := 0;  if G_iStepNumTemp > 0 then  begin    for i := 0 to G_iStepNumTemp-1 do    begin      NewItem := RzListView.Items.Add;      NewItem.Caption := IntToStr(ArrPulse(pEventTemp)[i].iSerialNum);      if ArrPulse(pEventTemp)[i].bLevel then        NewItem.SubItems.Add('高')      else        NewItem.SubItems.Add('低');      NewItem.SubItems.Add(IntToStr(ArrPulse(pEventTemp)[i].iKeepTime));      NewItem.Checked := ArrPulse(pEventTemp)[i].bChecked;      if NewItem.Checked then      begin        NewItem.DropTarget := true;        Inc(m_iCheckedCount);      end;    end;    FreeMem(pEventTemp);     // 释放 pEventTemp  end;

现假设pEventTemp的数据中有一个结构体,并且该数据的bChecked为true,G_iStepNumTemp表示其中的结构体的个数,当执行完这段程序之后,为甚么m_iCheckedCount的值为2,当里面的结构体多于一个时,只有一个bChecked为true,运算出来的m_iCheckedCount的值确是1,我调试过,当循环体只执行一遍,从if对应的end跳到for对应的end时,m_iCheckedCount的值就由1变为2了,很不理解.

[解决办法]
简化代码:
m_iCheckedCount := 0;
if G_iStepNumTemp > 0 then
begin
for i := 0 to G_iStepNumTemp-1 do
begin
if ArrPulse(pEventTemp)[i].bChecked then
Inc(m_iCheckedCount);
end;
end;

可以看出问题并不出在这里
是不是m_iCheckedCount是全局变量,但m_iCheckedCount := 0;不是放在这里
或者外面还有別的代码,还有其它赋值、循环...

[解决办法]
应该是NewItem.Checked属性 写了赋值方法。 一般是 procedure SetFChecked(value : boolean);
你全文找一下 m_iCheckedCount 哪些地方做过修改

热点排行