首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

,每次RUN后点关闭会卡住

2012-10-19 
求救,每次RUN后点关闭会卡住以下是代码unit Unit1interfaceusesWindows, Messages, SysUtils, Variants,

求救,每次RUN后点关闭会卡住
以下是代码


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB;

type
  TForm1 = class(TForm)
  Label1: TLabel;
  Label2: TLabel;
  Label3: TLabel;
  Edit1: TEdit;
  Edit2: TEdit;
  Button1: TButton;
  ADOConnection1: TADOConnection;
  ADOQuery1: TADOQuery;
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
  procedure Button1Click(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
with adoquery1 do
begin
close;
SQL.Clear;
Sql.Add('select * from test where (id=:a) and (code=:b) ');
parameters.ParamByName('a').Value:=Trim(edit1.Text);
parameters.ParamByName('b').Value:=Trim(edit2.Text);
open;
end;
if adoquery1.RecordCount>0 then
 application.MessageBox('登录成功!','提示',0+64)
 else
 application.MessageBox('用户名或密码不正确,请重新输入!','提示',0+64);  
end;

end.







unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls;

type
  TForm2 = class(TForm)
  MainMenu1: TMainMenu;
  N1: TMenuItem;
  N2: TMenuItem;
  N3: TMenuItem;
  N4: TMenuItem;
  N5: TMenuItem;
  N6: TMenuItem;
  N7: TMenuItem;
  Edit1: TEdit;
  Button1: TButton;
  RadioButton1: TRadioButton;
  RadioButton2: TRadioButton;
  ComboBox1: TComboBox;
  Button2: TButton;
  Button3: TButton;
  procedure N1DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect;
  Selected: Boolean);
  procedure BANGZHU1DrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; Selected: Boolean);
  procedure FormPaint(Sender: TObject);
  procedure Button2Click(Sender: TObject);
  procedure N2Click(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.N1DrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; Selected: Boolean);
begin
  ACanvas.FillRect(ARect);
  ACanvas.Font.Size:=10; //设置为足够大的字号
  ACanvas.Font.Name:= '新宋体 '; //设置为你喜欢的字体
  //输出菜单项
  ACanvas.TextOut(ARect.Left,ARect.Top,(Sender as TMenuItem).Caption);  

end;

procedure TForm2.BANGZHU1DrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; Selected: Boolean);
begin
ACanvas.FillRect(ARect);
  ACanvas.Font.Size:=10; //设置为足够大的字号
  ACanvas.Font.Name:= '新宋体 '; //设置为你喜欢的字体
  //输出菜单项
  ACanvas.TextOut(ARect.Left,ARect.Top,(Sender as TMenuItem).Caption);  
end;



procedure TForm2.FormPaint(Sender: TObject);
var
pic:TBitmap;
pic2:TBitmap;

begin
pic:=TBitmap.Create;


pic.LoadFromFile('b.bmp');
Canvas.Draw(0,450,pic);
pic.Free ;


pic2:=TBitmap.Create;
pic2.LoadFromFile('2.bmp');
Canvas.Draw(270,80,pic2);
pic2.Free ;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
Form1.Show;
end;

procedure TForm2.N2Click(Sender: TObject);
begin
Form1.Show ;
end;

end.


[解决办法]
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Free;
end;
应该是这句的问题,应改成
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
Form1:=nil;
end;
[解决办法]
普通窗体onClose事件不用写代码,或者写上一些释放资源的代码,但你这里的Free明显是错的

如果是MDI,在onClose就用Action:=caFree;
再在onDestroy加上Form1:=nil;

热点排行