定义了全局变量 NowCol NowRow 点击按钮,焦点自动移动,但是遇到换列的时候就不对了。是因为先执行了
     StringGrid.Col:=NowCol;     后执行了StringGrid.Row:=NowRow;造成了行列显示焦点混乱。请教有什么办法解决吗?procedure TFrm_Main.Button1Click(Sender: TObject);begin
     NowCol:=(Trunc(RzNumericEdit.Value)-1)  div   10  ;
     NowRow:=(Trunc(RzNumericEdit.Value)-1) mod 10;
     StringGrid.setFocus;
     StringGrid.Col:=NowCol;
     StringGrid.Row:=NowRow;
     StringGrid.Cells[NowCol,NowRow]:='K';
end;procedure TFrm_Main.StringGridDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
 with StringGrid.Canvas do
 begin     Brush.Color := clinfobk;   //所有格子颜色;
     FillRect(Rect);
     font.color := clblue;
     textout(rect.left, rect.top, RzStringGrid.cells[Acol, ARow]); end;
 with StringGrid.Canvas do
 begin
   if (ACol = Nowcol) and (ARow = Nowrow) then
   begin
     Brush.Color := clred;  //选定的格子颜色;
     FillRect(Rect);
     font.color := clblack;
     textout(Rect.Left + 2, Rect.Top + 2, StringGrid.cells[Nowcol, Nowrow]);
   end;
 end;
end;
procedure TFrm_Main.StringGridSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
   if CanSelect then
 begin
   NowCol := ACol;
   NowRow := ARow;
 end;end;

解决方案 »

  1.   

    把这段代码去掉
    procedure TFrm_Main.StringGridSelectCell(Sender: TObject; ACol,
      ARow: Integer; var CanSelect: Boolean);
    begin
      if CanSelect then
     begin
      NowCol := ACol;
      NowRow := ARow;
     end;
      

  2.   

    或者把button1click中的代码如此修改procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      i:Integer;
      row,col:Integer;
    begin
      i:=self.StringGrid1.RowCount;
      vg_col:=(Trunc(RzNumericEdit1.Value)) div i;
      vg_row:=(Trunc(RzNumericEdit1.Value)) mod i;
      //StringGrid1.setFocus;
      if vg_col+1>self.StringGrid1.ColCount then
      begin
        MessageBox(application.Handle,'超出表格范围','信息',MB_OK or MB_ICONINFORMATION);
        Exit;
      end;
      //注意这部分
      col:=vg_col;
      row:=vg_row;
      StringGrid1.Col:=col;//在修改这个值时,会再次调用selectcell,所以会出现错误
      StringGrid1.Row:=row;
      vg_col:=col;
      vg_row:=row;
      //**********************
      StringGrid1.Cells[vg_col,vg_row]:='K';
    end;
      

  3.   

    你是触发了SelectCell事件代码,导致混乱的,把这个去掉,总之不要相互影响