请教下OnShow事件和OnCreate事件有啥区别吗??
procedure Tlogin.Formshow(Sender: TObject);
begin
with dm.aq_login do
  begin
    Close;
    sql.Clear;
    SQL.Add('select * from users');
    Open;
    ComboBox1.Items.Clear;
    while not eof do
      begin
      ComboBox1.Items.Add(fieldbyname('users').AsString);
      next;
      end;
  end;
end;
这段代码我用Create写就弹错误。。用Show写就没事。。但是用Show写。。下拉框不显示数据这是为什么?~dm是数据模块  aq_login是adoquery组件。。ADO是adoconnection组件dm的代码是
procedure TDM.DataModuleCreate(Sender: TObject);
begin
  ado.ConnectionString:='field name = GL.udl';
end;end.
在文件夹里已经建了GL.udl文件并且连接好数据库。测试成功了。~~aq_login的connection的值也设置成ADO了

解决方案 »

  1.   

    OnShow是调用Show触发的事件
    OnCreate是调用Create触发的事件
      

  2.   

    估计login窗体create的时候,DataModule窗体还没有创建
    可以去看看工程文件,把DataModule的create放到前面。
      

  3.   

    = =!!这个知道啊= =!!show事件是出现么?create是创建??那如果我刚打开程序。。那个窗口算出现呢还是算创建呢?
      

  4.   


    可能吧?但是我创建应用程序的时候。。他总是选创建form1的。。怎么才能放前面?
      

  5.   


    哦。。先被creat?再show?那这两个事件有什么不同吗?比如我写弹出form2子窗口的时候用form2.show和form2.create。。有啥区别没??~~如果差不多的话。。哪个事件好用点?~
      

  6.   

    Create就是先构建这个对象,onShow是对象的属性,所以说当然是先Create后才能OnShow
      

  7.   

    不是差不多,必须是先Create,然后Show
      

  8.   

    第一步:Create
    第二步:Show
      

  9.   

    我吧数据模块create放在了login的create之前然后运行的时候。。他显示[Microsoft][ODBC 驱动程序管理器]未发现数据源名称并且未指认默认驱动程序
    是啥意思??
      

  10.   

    楼主懂基本的对象知识么,应该不会不知道create和show的区别吧 
      

  11.   


    我在外面文件夹中建立了一个GL.udl文件。。连接上数据库。测试也成功了。然后在数据模块上创建的时候。。ado.ConnectionString:='field name = GL.udl'这样为什么错呀?
      

  12.   

    估计还是跟你窗体的创建顺序有关系吧,可能你还没给connectionstring赋值,其它的窗体就调用了吧你可以单步运行看看在哪出的错吗
      

  13.   

    oncreate 是窗体在创建时候触发事件
    onshow是窗体显示时候触发事件
      

  14.   

    create用来创建对象,show用来显示窗体
    create后触发oncreate,show后触发onshow如果你懂,为什么会不知道用法上的区别呢?例如说create是一次性的,show是可以多次触发的。
      

  15.   

    窗体,最小化,恢复(触发一次OnShow)
    窗体,创建,OnCreate
      

  16.   

    oncreate 是窗体在创建时候触发事件
    onshow是窗体显示时候触发事件
    说的更清楚点 就是 窗体可以马上创建 但不是显示
    这时候就只触发了oncreate 事件
      

  17.   


    是这样子的。。比如我程序开始。。主窗体Form1是不是被create,也就是创建。。这时候子窗体Form2是不是被创建呢?~如果没被创建。那么如果我在Form2中使用onshow事件就是没反应的是吗?如果被创建了。。我在Form2中使用create也是不行的?因为它已经被创建了?再者就是。。如果我关了Form2子窗口。。用Form2.Close这时候Form2是被关闭了还是被隐藏了?
    隐藏应该是Hide吧?~如果再次开启的时候。。是要用create呢。还是用show呢?~~。。当然,平时我都是用show的。。既然今天讨论到这问题。。就问的详细点。。我的delphi的基础不是很好。。请多指教~谢谢~~
      

  18.   

    是这样子的。。比如我程序开始。。主窗体Form1是不是被create,也就是创建。。这时候子窗体Form2是不是被创建呢?~如果没被创建。那么如果我在Form2中使用onshow事件就是没反应的是吗?如果被创建了。。我在Form2中使用create也是不行的?因为它已经被创建了?你要打开工程文件来查看,那个窗体时启动就被application给创建的,如果它创建后,你只需show就好了,不然它创建了,你再用同一变量创建,内存泄露
    再者就是。。如果我关了Form2子窗口。。用Form2.Close这时候Form2是被关闭了还是被隐藏了?
    隐藏应该是Hide吧?~如果再次开启的时候。。是要用create呢。还是用show呢?~~。。当然,平时我都是用show的。。既然今天讨论到这问题。。就问的详细点。。系统默认窗口close是隐藏了,你下次使用直接show就可
      

  19.   


    Create是创建
    Show是显示两者的关系是:
    要Show的窗体必须先经过Create
    但是Create过的窗体并不一定会Show程序开始的时候窗体创建与否是由你自己决定的。如果窗体没有被创建,那么窗体自身的OnShow事件永远不会触发,外部调用的Form.Show会产生Access Violation错误。Close是关闭窗体,这时窗体本身并没有销毁,再次打开用Show。销毁窗体用Free。
      

  20.   

    非常感谢上面两位。。这么说。close和hide是不是一样的?
      

  21.   

    我倒了。
    英文翻译一下也能知道不是一样的啊。
    Close是关闭。
    hide是隐藏。
    就好比,你登陆QQ以后,再分别进行一下隐身和关闭QQ,现在你觉得是一样的吗?
      

  22.   

    lz  可以去project options  里边去设置一下窗体是否是自动创建的。还有就是设置 project - view source 里自动创建窗体时,创建的顺序。 在做这些之前,建立Lz先理清自己调用form 的过程,顺序搞清楚了之后再进行设置。估计就没有问题了
      

  23.   

    creat是窗体的创建,你的主窗体刚创建的时候会触发oncreat事件,但此时你放在主窗体上的控件还没有被创建,所以你在主窗体的oncreat时用主窗体上的控件会出错,主窗体上的其他控件会在主窗体创建完之后创建,也就是在主窗体oncreat和onshow之间创建完成,所以在主窗体的onshow中使用主窗体上的控件就没问题了
      

  24.   

    create 是对象生成的时候调用的。
    show是显示的时候调用的。
      

  25.   

    Create 是构造涵数:其是就是创建这个对象的实例.show你只把它当成普通涵数就是了!他的作用其实就是绘制.如果是form就是绘制form了.