奇怪的现象,求高人指点
小弟刚学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 哪些地方做过修改