如题:比如说如果当前选中的单元框内容为1.1,已经存在了1.1.1和1.1.2,现在我点击button,那么就把1.1.2那一行删除了,再点击,就把1.1.1删除了. 

解决方案 »

  1.   

    你的问题描述的不清楚啊,是操作EXECl,还是GRid呢,能描述清楚一些。
      

  2.   

    还是那个index全局变量,你让它每单击一下按钮就把对应的单元框删除,然后递减一次不就行了
    如:
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    self.F1Book1.TextRC[index,1]:='';
    index:=index-1;
    end;
    在另一个贴子里我已经给你说的很清楚了
      

  3.   

    还有你这个问题
    对了,如果已经在1.1下存在1.1.1,那么再选中1.1时,点击button,就应该是1.1.2,这个怎么弄啊? 
     
    这里,你看我注释掉的就是你想要的 
    procedure TForm1.F1Book1SelChange(Sender: TObject); 
    begin 
    index:=1;//self.F1Book1.SelStartRow; 
    end; 
    把1换成注释后面的就可以了 
     
      

  4.   

    to"小和":有三个问题---
             1. 运行时有个问题,比如说:运行开始直接点button,他不会直接在'1.1'下加'1.1.1',而是报错'invalid cell interfence',必须点到1.1下面的单元格,再点回1.1,再点击button,才会正常,你碰到过么???
             2. 举例:比如说已经有了
                       1.1
                     1.1.1
                     1.1.2
                     1.1.3
                    1.2
                    1.2.1
                    这时候选中的单元框应该是'1.2',这时候我想在'1.1'下面加个'1.1.4',我必须点回'1.1'.再点button点3次,才能加上'1.1.4',这个没法判断已拥有的最大值吗?
             3.还有就是你限制了最多两个点,而实际上是没有限制的,比如说我会需要在'1.1.1'下面加上'1.1.1.1',再在'1.1.1.1'下面加上'1.1.1.1.1',依次而行,能改进吗?
                  
      

  5.   

    1、碰到过你的问题,这是因为刚开始运行时因为index没有赋初值的原因,给它赋一个初值1可以解决
    2、这个问题是你把
    procedure TForm1.F1Book1SelChange(Sender: TObject); 
    begin 
    index:=1;//self.F1Book1.SelStartRow; 
    end; 
    改成
     procedure TForm1.F1Book1SelChange(Sender: TObject); 
    begin 
    index:=self.F1Book1.SelStartRow; 
    end; 
    就可以了
    3、可以改进,不过需要条件限制,即如果1.1.1的话,知道什么时候该1.1.2,还是该1.1.1.1,你的条件是什么
      

  6.   

    谢谢“小和”,我试一下,第3个问题的条件是:点button1的时候就是该1.1.2,点button2的时候就该1.1.1.1,是根据点不同button的。
      

  7.   

    你的意思是说点button1减增,如
    1.1 1.2 1.3
    或者
    1.1.1 1.1.2 1.1.3
    或者
    1.2.1 1.2.2 1.2.3
    或者1.1.1.1  1.1.1.2  1.1.1.3
    点button2变长
    1.1变为1.2 1.2变为1.3
    1.1.1变为1.1.2是这个意思吧,那么如果单元格内容为空呢
      

  8.   

    是这个意思,如果单元格内容为空,那么就不进行任何的操作,也就是说无法进行任何的增减,button1和button2的enabled为false就行了!
    button1就是同级别的增加,如:
     1.1 1.2 1.3  
    一但点击button2了,就是加长:
    1.1 变成 1.1.1 再点击一下 变成 1.1.2 
      
      

  9.   

    给你做了一下,你看是否可意
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, AxCtrls, OleCtrls, VCF1, ComCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        F1Book1: TF1Book;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure F1Book1SelChange(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      index:integer=1;
      col:integer=1;
    implementation{$R *.dfm}
    function RightPos(c:char;s:string):integer;
    var       //返回从右第一个字符出现的位置
    i:integer;
    begin
    result:=0;
    for i:=length(s) downto 1 do
       if c=s[i] then
          begin
          result:=i;
          break;
          end;
    end; function GetRightStr(s:string;c:char):string;  //返回某字符右边的字符串
    var i:integer;
    begin
    result:='';
    for i:=length(s) downto 1 do
       begin
       if s[i]=c then
          exit;
       result:=s[i]+result;
       end;
    end;function GetIncStr(s:string):string;//返回递增后的字符串
    var
    i:integer;
    s1,ss:string;
    begin
       ss:=GetRightStr(s,'.');
       delete(s,RightPos('.',s),length(ss)+1);
       i:=strtoint(ss);
       inc(i);
       result:=s+'.'+inttostr(i);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
    str:string;
    begin
    str:=self.F1Book1.TextRC[index,col];
    inc(index);
    self.F1Book1.TextRC[index,col]:=GetIncStr(str);
    end;procedure TForm1.F1Book1SelChange(Sender: TObject);
    begin
    if self.F1Book1.TextRC[self.F1Book1.SelStartRow,self.F1Book1.SelStartCol]<>'' then
       begin
       self.Button1.Enabled:=true;
       self.Button2.Enabled:=true;
       index:=self.F1Book1.SelStartRow;
       col:=self.F1Book1.SelStartCol;
       end else begin
       self.Button1.Enabled:=false;
       self.Button2.Enabled:=false;
       end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    self.F1Book1.TextRC[1,1]:='1.1';
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
    str:string;
    begin
    str:=self.F1Book1.TextRC[index,col];
    inc(index);
    self.F1Book1.TextRC[index,col]:=str+'.1';
    end;end.
      

  10.   

    我对f1book不太熟悉,插入一行的语句应怎样写
      

  11.   

    增加列、行insertRange(最好先结束编辑EndEdit),这个不知道行不行???
      

  12.   

     '-------------------F1的基本操作-----------------   
        
    Public   Sub   F1_InRng(CurF1   As   F1Book,   ByVal   CurtLine   As   Long,   ByVal InCount   As   Long)   
              With   CurF1   
                      .InsertRange   CurtLine   +   1,   -1,   CurtLine   + InCount,   .MaxCol,   F1ShiftRows   
                      .MaxRow   =   .MaxRow   +   InCount   
              End   With   
    End   Sub   
      

  13.   

    在开发过程中,右键点击workdesigner,选中整个一行,再点击插入,就是往下插入的,可我找不到源码
      

  14.   

    to“小和”:能不能先不失去焦点??就是说按button的时候举个例子:
      现在是 
      1.1
      
    现在点击button插入的时候f1book焦点该移到1.2上面。我想然后再看看能不能向下插入行???
      

  15.   

    to“小和”:能不能先不失去焦点??就是说按button的时候举个例子:
      现在是 
      1.1
      
    现在点击button插入的时候f1book焦点该移到1.2上面。我想然后再看看能不能向下插入行???
      

  16.   

    to:“小和”大虾:  刚研究出来:就是insertrange这个函数就是(nr1,nc1,nr2,nc2,f1shiftwindows),nr1和nr2其实就是f1book的行序号:如果这么写:
                     insertrange(1,-1,1,-1,...)那么插入的就是永远在第一行之前
                     insertrange(10,-1,10,-1,...)那么插入的就是永远在第10行之前 
    不知道这么说有用吗?能实现吗?
      

  17.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, AxCtrls, OleCtrls, VCF1, ComCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        F1Book1: TF1Book;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure F1Book1SelChange(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      index:integer=1;
      col:integer=1;
    implementation{$R *.dfm}function RightPos(c:char;s:string):integer;
    var       //返回从右第一个字符出现的位置
    i:integer;
    begin
    result:=0;
    for i:=length(s) downto 1 do
       if c=s[i] then
          begin
          result:=i;
          break;
          end;
    end; function GetRightStr(s:string;c:char):string;  //返回某字符右边的字符串
    var i:integer;
    begin
    result:='';
    for i:=length(s) downto 1 do
       begin
       if s[i]=c then
          exit;
       result:=s[i]+result;
       end;
    end;function GetIncStr(s:string):string;//返回递增后的字符串
    var
    i:integer;
    s1,ss:string;
    begin
       ss:=GetRightStr(s,'.');
       delete(s,RightPos('.',s),length(ss)+1);
       i:=strtoint(ss);
       inc(i);
       result:=s+'.'+inttostr(i);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
    str:string;
    begin
    str:=self.F1Book1.TextRC[index,col];
    inc(index);
    F1Book1.InsertRange(index,1,index,1,2);
    self.F1Book1.TextRC[index,col]:=GetIncStr(str);
    end;procedure TForm1.F1Book1SelChange(Sender: TObject);
    begin
    if self.F1Book1.TextRC[self.F1Book1.SelStartRow,self.F1Book1.SelStartCol]<>'' then
       begin
       self.Button1.Enabled:=true;
       self.Button2.Enabled:=true;
       index:=self.F1Book1.SelStartRow;
       col:=self.F1Book1.SelStartCol;
       end else begin
       self.Button1.Enabled:=false;
       self.Button2.Enabled:=false;
       end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    self.F1Book1.TextRC[1,1]:='1.1';
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
    str:string;
    begin
    str:=self.F1Book1.TextRC[index,col];
    inc(index);
    F1Book1.InsertRange(index,1,index,1,2);
    self.F1Book1.TextRC[index,col]:=str+'.1';
    end;end.现在做好了,应该没什么问题了吧
      

  18.   

    不过好像还是在上面插入的 insertrange(f1book1.row,-1,f1book.row,-1,f1shiftrows),这个是每行的!!!