在窗体放一stringgrid控件,改名为sg,可我在代码中设置它的属性的时候却说sg没定义
procedure csh_sg();
     begin
       sg.colwidths[0]:=50;
       sg.colwidths[1]:=200;
       sg.colwidths[2]:=300;
       sg.colwidths[3]:=200;
     end;    

解决方案 »

  1.   


    procedure csh_sg(); 
    begin  with form1.sg do begin//--------------窗体名.sg.
          colwidths[0]:=50; 
           colwidths[1]:=200; 
           colwidths[2]:=300; 
           colwidths[3]:=200;  end; 
    end; 
      

  2.   

    当然还要引用SG所以的窗体uses Unit1;
      

  3.   

    procedure csh_sg(); 上面这个方法不属于FORM1的处理过程,属于共用处理过程,
    FORM1可以调用此处理过程但csh_sg()处理过程中要调用FORM1的内容,必须指定其父类名称
    调用方法同二楼的
      

  4.   

    声明的时候这么写:procedure form1.csh_sg(); 对么?
    定义时这么写: procedure form1.csh_sg();
                   begin
                      with sg do
                         begin
                            colwidths[0]:=50;
                            ...
                            colwidths[6]:=100;
                         end;
                   end;    对么?
    调用的时候这么写:form1.csh_sg(); 对么?    
      

  5.   

    声明不加form1,你要把它生成在public中,这样当别的单元引用这个单元时,才可以调用这个过程.
      

  6.   


    {声明:}procedure form1.csh_sg; {如果要让其它窗体能调用此方法,要在 public之下声明.}
    {定义:} procedure form1.csh_sg; 
                   begin 
                      with sg do 
                         begin 
                            colwidths[0]:=50; 
                            ... 
                            colwidths[6]:=100; 
                         end; 
                   end;    对么? 
    其它窗体调用:form1.csh_sg; 本窗体:csh_sg;
      

  7.   

    此过程只在本窗体调用,打开此窗口出错。
    声明,定义不加form1,如果加,编译通不过。
    咋搞的???
      

  8.   

    在form1的public里声明procedure csh_sg();  
    然后procedure form1.csh_sg(); 
         begin 
           sg.colwidths[0]:=50; 
           sg.colwidths[1]:=200; 
           sg.colwidths[2]:=300; 
           sg.colwidths[3]:=200; 
         end;   
      

  9.   

    就错在with form1.sg do 这句
      

  10.   


    procedure Tform1.csh_sg; 
                   begin 
                      with sg do 
                         begin 
                            colwidths[0]:=50; 
                            ... 
                            colwidths[6]:=100; 
                         end; 
                   end;   
      

  11.   

    重新整理一下:1.本过程只在本窗体中声明,定义,调用2.在interface中声明:procedure csh_sg(); //不能加窗体名,加了编译通不过
      声明的地方在type
                 ...
                end;之下,也就是不再private,public内  
       
    3.在implementation内定义:procedure csh_sg(); //不能加窗体名,加了编译通不过
                               begin
                                 with frmkjlb.sg do  //必须加窗体名,不加编译通不过,说sg未定义
                                    begin
                                      colwidths[0]:=50;
                                      colwidths[1]:=200;
                                      colwidths[2]:=300;
                                      colwidths[3]:=200;
                                    end;
                                end;4.procedure Tfrmkjlb.FormCreate(Sender: TObject);
        begin
         csh_sg(); 在窗体加载过程中调用
        end;
    5.编译通过,打开frmkjlb窗体出错,在with frmkjlb.sg do处挂起,弹出错误对话框,报告大意是在访问内存地址某处错。急死人了。help me!!!  
      

  12.   

    以下代码运行通过,请你参考一下:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids;type
      TForm1 = class(TForm)
        sg: TStringGrid;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure csh_sg;
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.csh_sg;
    begin
           sg.colwidths[0]:=50;
           sg.colwidths[1]:=200; 
           sg.colwidths[2]:=300; 
           sg.colwidths[3]:=200;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      csh_sg;
    end;end.
      

  13.   

    另一种:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids;type
      TForm1 = class(TForm)
        sg: TStringGrid;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;  procedure csh_sg;
    var
      Form1: TForm1;implementation{$R *.dfm}
    procedure csh_sg;
    begin
     with Form1.sg do begin
        colwidths[0]:=50;
        colwidths[1]:=200;
        colwidths[2]:=300;
        colwidths[3]:=200;
     end;end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      csh_sg;
    end;end.
      

  14.   

    找到问题所在了,我按GDTOPONE 的方法单独建立一个工程运行完全没问题,我又仔细看了我的工程,发现不把csh_sg语句放在formcreate过程中就正常,在formcreate过程中还有条语句adods.acitve:=true; (adods是个adodataset控件)这2语句不能在一起,有没有办法让它们“和谐”的在一起呢?
      

  15.   

    1.我用了ADOConnection1数据控件来连一个SQL数据库.
    2.我将ADODataSet1的Connection属性设为:ADOConnection1;
    3.我的ADODataSet1的commandtype属性为:cmdText;
    4.我的ADODataSet1的commandtext属性为:select x_a,x_b,x_c from x_eng
    5.
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      csh_sg;
      ADODataSet1.Active:=true;
    end;
    当运行程序时没出现你所说的问题.
    6.所以应该是你的ADODataSet设置有问题
    7.如果你是看书学的,请你务必要搞清所有数据控件的用法.
      

  16.   

    如果不是多层或业务分离应用,请用ADOQUERY控件.
      

  17.   

    对了,我窗体上还有个dbgrid控件,adodataset控件通过一个datasuorce控件和它连接的,是不是和这有关系?sg控件只是验证csh_sg过程而存在,不连接数据控件。
      

  18.   

    你搞的是主从表?如果不是,为什么要这样呢?你倒不如直接用ADOConnection+ADOQUERY控件不就行了吗?
      

  19.   

    不是主从表,我只是想练习下它们的用法,个人比较习惯用adodataset控件