问题:异常类和自定义异常类构造函数的实现代码写在程序的什么部位?

解决方案 »

  1.   

    unit test;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Label1: TLabel;
        Edit1: TEdit;
        Label2: TLabel;
        Edit2: TEdit;  //  einvalidation =class(exception)
      //  einvalidpassword =class(einvalidation)
      // einvalidinput =class(einvalidation)
        procedure passwordkeypress(sender:tobject;var key:char);
        procedure inputeditkeypress(sender:tobject;var key:char);
     private
        { Private declarations }
     public
     // errorcode:integer;
      //constructor create(const msg:string;errornum:integer);
    //  constructor create;
    //  constructor create(errornum:intger);
        { Public declarations }
      end;var
      Form1: TForm1;
    implementation{$R *.dfm}type
    einvalidation =class(exception)
    public
    errorcode:integer;
    constructor create(const msg:string;errornum:integer);
    end;einvalidpassword =class(einvalidation)
    public
       constructor create;
       end;einvalidinput =class(einvalidation)
    public
      constructor create(errornum:integer);
    end;constructor einvalidation.create(const msg:string;errornum:integer);
    begin
    inherited create(msg);
    errorcode:=errornum;
    end;constructor einvalidpassword.create;
    begin
    inherited create('invalid password enter',0);
    end;constructor einvalidinput.create(errornum:integer);
    var
    msg:string;
    begin
    case errornum of
    1:
    msg:='11111111';
    2:
    msg:='22222222';
    else
    msg:='33333';
    end;
    inherited create(msg,errornum);
    end;
    procedure tform1.passwordkeypress(sender:tobject;var key:char);
      const
        currentpassword='delphi';
        begin
        if key=#13 then
        begin
         try
           if password.text<>currentpassword then
           raise einvalidpassword.create;
           label2.visibel:=true;
           inputedit.visible:=true;
           inputedit.setfocus;
           password.visible:=false;
           label1.visible:=false;
           except
            on einvalidpassword do
            begin
            password.text:='';
            raise;
            end;
            end;
            key:=#0;
            end;
            end; 
     procedure tform1.inputeditkeypress(sender:tobject;var key:char);
     var
     res:real;
     code:integer;
     begin
     if key=#13 then
     begin
     try
     val(inputedit.text,res,code);
     if code<>0 then
     raise einvalidinput.create(1); if (res>1) or (res<0) then
     raise einvalidinput.create(2);
     messagedlg('correct input',mtinformation,[mbok],0);
     key:=#0;
     except
     on e:envalidinput do
     begin
     inputedit.text:='';
     messagedlg(e.message,mtwarning,[mbok],0);
     end;
     end;
     end;
    end;
    end.
    这段程序错哪了?
      

  2.   

    已经调试可以运行了,但是不论在password里面输入什么,回车都没反映。怎么回事呢?
    unit test;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Label1: TLabel;
        password: TEdit;
        Label2: TLabel;
        inputedit: TEdit;
        Button1: TButton;  procedure passwordkeypress(sender:tobject;var key:char);
      procedure inputeditkeypress(sender:tobject;var key:char);
      procedure Button1Click(Sender: TObject);
     private
        { Private declarations }
     public
        { Public declarations }
      end;var
      Form1: TForm1;
    implementation{$R *.dfm}type
        einvalidation =class(exception)
    public
    errorcode:integer;
    constructor create(const msg:string;errornum:integer);
    end;einvalidpassword =class(einvalidation)
    public
       constructor create;
       end;einvalidinput =class(einvalidation)
    public
      constructor create(errornum:integer);
    end;constructor einvalidation.create(const msg:string;errornum:integer);
    begin
    inherited create(msg);
    errorcode:=errornum;
    end;constructor einvalidpassword.create;
    begin
    inherited create('invalid password enter',0);
    end;constructor einvalidinput.create(errornum:integer);
    var
    msg:string;
    begin
    case errornum of
    1:
    msg:='11111111';
    2:
    msg:='22222222';
    else
    msg:='33333';
    end;
    inherited create(msg,errornum);
    end;
    procedure tform1.passwordkeypress(sender:tobject;var key:char);
      const
        currentpassword='delphi';
        begin
        if key=#13 then
        begin
         try
           if password.text<>currentpassword then
           raise einvalidpassword.create;
           label2.visible:=true;
           inputedit.visible:=true;
           inputedit.setfocus;
           password.visible:=false;
           label1.visible:=false;
           except
            on einvalidpassword do
            begin
            password.text:='';
            raise;
            end;
            end;
            key:=#0;
            end;
            end; 
     procedure tform1.inputeditkeypress(sender:tobject;var key:char);
     var
     res:real;
     code:integer;
     begin
     if key=#13 then
     begin
     try
     val(inputedit.text,res,code);
     if code<>0 then
     raise einvalidinput.create(1); if (res>1) or (res<0) then
     raise einvalidinput.create(2);
     messagedlg('correct input',mtinformation,[mbok],0);
     key:=#0;
     except
     on e:einvalidinput do
     begin
     inputedit.text:='';
     messagedlg(e.message,mtwarning,[mbok],0);
     end;
     end;
     end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    close
    end;end.