小弟刚学Delphi不久,写了段程序,现贴如下: 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了,很不理解.
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了,很不理解.
if NewItem.Checked then
begin在执行NewItem.Checked := ArrPulse(pEventTemp)[i].bChecked;时m_iCheckedCount还为0
当执行完 if NewItem.Checked then 后m_iCheckedCount就变为1了,
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;不是放在这里
或者外面还有別的代码,还有其它赋值、循环...
你全文找一下 m_iCheckedCount 哪些地方做过修改