众位大侠,我的checklistbox的clickcheck事件是这样定义的:
...
procedure TFrmTvFood.CLBxTvPgmClickCheck(Sender: TObject);
var
  i:integer;
begin
  i:=StrToInt(copy(CLBxTvPgm.Items[CLBxTvPgm.ItemIndex],2,2));
  if CLBxTvPgm.Items[CLBxTvPgm.ItemIndex][6]='-' then
    CLBxTvPgm.Checked[CLBxTvPgm.ItemIndex]:=False;
  if CLBxTvPgm.Checked[CLBxTvPgm.ItemIndex] then
    Authority[i]:='*'
  else
    Authority[i]:='-';
end;
...其中,Authority是我在implementation上面定义的全局变量,如下:
...
var
  FrmTvFood: TFrmTvFood;
  Authority: String;
implementation
...但是运行后,我点击checklistbox内的每一项,就会出现如下警告:
Access violation at address 004F0A08 in module 'UsrNet.exe'. Write of address 0000000F.
我点击确定后,有可以继续选择下一个。但是弹出同样的警告。
请问这是为什么?

解决方案 »

  1.   

    因为全局变量Authority没有指定空间
    var
      i:integer;
    begin
      i:=StrToInt(copy(CLBxTvPgm.Items[CLBxTvPgm.ItemIndex],2,2));
      /////////////
      SetLength(Authority, i); //这样就可以了
      ///////////
      if CLBxTvPgm.Items[CLBxTvPgm.ItemIndex][6]='-' then
        CLBxTvPgm.Checked[CLBxTvPgm.ItemIndex]:=False;
      if CLBxTvPgm.Checked[CLBxTvPgm.ItemIndex] then
        Authority[i]:='*'
      else
        Authority[i]:='-';
    end;
      

  2.   

    平大侠,我可否在全局变量定义处将它定义为能够容纳99个字符的字符串呢?
     
    我记得以前好象这样写:
    Authority: type [0..99] String;//忘记怎么定义了。请指教。谢谢。
      

  3.   

    SetLength(Authority, i); 
    这样更符合内存分配的思想
    用以前的方法为字符串分配空间在处理没有现在这样方便
      

  4.   

    我已经知道怎样定义了(Authority:String[99]),但是现在又有了一个新的的问题:就是我点击窗口某一按钮,希望将Authority这个字符串显示出来,结果是空的
     ShowMessage(Authority);//显示的就是一个小窗口和一个按钮,其他什么都没有请问这是为什么,我明明已经点选了checklistbox里面的选项呀?Authority就应该已经被赋值。