诸位,在我的一个程序中,其他form都没问题,唯独一个form1中,TEdit控件编写OnKeyDown事件代码后,需要按ctrl+enter才相应回车,而不是按enter就相应,这是为啥啊,也就是说,我希望在用户按回车后做些操作,但是只按enter键不触发kendown事件,必须按ctrl+enter才可以,这是哪里设置不对吗?注:有人说和窗体的keypreview属性有关,但我 true和false都试过了,问题如故,请大家帮忙啊。

解决方案 »

  1.   

    unit agreementsales;interfaceuses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, jpeg, StdCtrls, Buttons,SaleLibrary_Intf,ServiceOperator,ErrLogs,ClientInfo,
      Grids, DBGrids,math;type
      TfrmAgreementSales = class(TForm)
        img1: TImage;
        shp1: TShape;
        Shape1: TShape;
        btnSubMit: TBitBtn;
        btn2: TBitBtn;
        grp1: TGroupBox;
        lbl1: TLabel;
        lbl2: TLabel;
        lblcustomer: TLabel;
        Label1: TLabel;
        lbladdress: TLabel;
        Label3: TLabel;
        lblphone: TLabel;
        Label5: TLabel;
        lblfax: TLabel;
        Label7: TLabel;
        lblcontact: TLabel;
        Label9: TLabel;
        lblmobile: TLabel;
        Label11: TLabel;
        lblrebate: TLabel;
        Label13: TLabel;
        lblbalance: TLabel;
        Label15: TLabel;
        lbljoindate: TLabel;
        Label17: TLabel;
        lblvaliddate: TLabel;
        Label19: TLabel;
        lbldescribe: TLabel;
        GroupBox1: TGroupBox;
        Label20: TLabel;
        Label21: TLabel;
        lblTName: TLabel;
        Label23: TLabel;
        lblCTName: TLabel;
        lbl6: TLabel;
        lblPrice: TLabel;
        Label24: TLabel;
        lblPricePractice: TLabel;
        cbbTicketType: TComboBox;
        grp2: TGroupBox;
        grp3: TGroupBox;
        lbl8: TLabel;
        lblPriceCount: TLabel;
        chk1: TCheckBox;
        Label27: TLabel;
        lblVP: TLabel;
        GroupBox2: TGroupBox;
        Label29: TLabel;
        edtTicketNum: TEdit;
        StringGrid1: TStringGrid;
        btnClrae: TBitBtn;
        EdtAgreeNum: TEdit;
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure btn2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure cbbTicketTypeSelect(Sender: TObject);
        procedure edtAgreeNumExit(Sender: TObject);
        procedure edtTicketNumKeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure EdtAgreeNumKeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure btnSubMitClick(Sender: TObject);  private
        { Private declarations }
        TicketTypeList:TTicketTypeList;
        //当前被选择的票种
        TicketType:TTicketType;
        //协议信息
        Agreement:TAgreement;
        GroupSaleStateList:TGroupSaleStateList;
        GroupSaleState:TGroupSaleState;
      public
        { Public declarations }
      end;var
      frmAgreementSales: TfrmAgreementSales;implementation{$R *.dfm}procedure TfrmAgreementSales.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      Action := caFree;
      frmAgreementSales := nil;
    end;procedure TfrmAgreementSales.btn2Click(Sender: TObject);
    begin
      Close;
    end;procedure TfrmAgreementSales.FormCreate(Sender: TObject);
    begin
      TicketTypeList:=TTicketTypeList.Create;
      TicketType:=TTicketType.Create;
      Agreement:=TAgreement.Create;
    end;procedure TfrmAgreementSales.FormShow(Sender: TObject);
    var
      RInfo:String;{访问服务接口返回消息}
      i:integer;
      IsSuccess:boolean;
    begin
      try
        IsSuccess:=formso.ListTicketTypes();
        if not IsSuccess then
        begin
          //messagebox(handle,Pchar(RInfo),'提示',MB_ICONWARNING);
          close;
        end
        else
        begin
          for i:=0 to (TicketTypeList.Count-1) do
          begin
            cbbTicketType.Items.Add(TicketTypeList.Items[i].name);
          end;
          StringGrid1.Cells[0,0]:='序号';
          StringGrid1.Cells[1,0]:='票号';
          StringGrid1.Cells[2,0]:='状态';
          StringGrid1.Cells[3,0]:='状态标志';
          StringGrid1.ColWidths[1]:=200;
          StringGrid1.ColWidths[2]:=250;
        end;
      except
        on E:Exception do
        begin
          
        end;
      end;
    end;procedure TfrmAgreementSales.cbbTicketTypeSelect(Sender: TObject);
    var
    i:integer;
    begin
      //TicketType:=TicketTypeList.Search('name',cbb1.Text);
      lblTName.Caption := '';
      lblCTName.Caption := '';
      lblVP.Caption := '';
      lblPrice.Caption := '';
      lblPriceCount.Caption:='';
      lblPricePractice.Caption:='';
      for i:=0 to TicketTypeList.Count-1 do
      begin
        if (TicketTypeList.Items[i].name= cbbTicketType.Text)then
        begin
           lblTName.Caption :=TicketTypeList.Items[i].name;
           lblCTName.Caption := TicketTypeList.Items[i].chargetypeName;
           lblVP.Caption := inttostr(TicketTypeList.Items[i].validperiod)+'天';
           lblPrice.Caption := floattostr(TicketTypeList.Items[i].price);
           //lblTID.Caption:=IntToStr(TicketTypeList.Items[i].id);
           TicketType:=TicketTypeList.Items[i];
           GetPricePractice;
           exit;
        end;
      end;
    end;procedure TfrmAgreementSales.edtAgreeNumExit(Sender: TObject);
    begin
      GetAgreeMent;
    end;procedure TfrmAgreementSales.edtTicketNumKeyDown(Sender: TObject;
      var Key: Word; Shift: TShiftState);
    begin
      if key<>13 then
        exit;
      SaleTicket;
    end;procedure TfrmAgreementSales.SaleTicket;
    begin
    end;procedure TfrmAgreementSales.EdtAgreeNumKeyDown(Sender: TObject;
      var Key: Word; Shift: TShiftState);
    begin
      if key=13 then
        GetAgreeMent;
    end;procedure TfrmAgreementSales.btnSubMitClick(Sender: TObject);
    var
    i:integer;
    Btn:integer;
    IsSuccess:boolean;
    //是否有提交失败的
    HasFaild:boolean;
    //是否全部提交完成了
    SubMIted:boolean;
    Rinfo:string;
    begin
      try
        
        IsSuccess:=formso.Sales();    for i:=0 to GroupSaleStateList.Count -1 do
        begin
          StringGrid1.Cells[1,i+1]:= GroupSaleStateList.Items[i].TicketNum;
          StringGrid1.Cells[2,i+1]:= GroupSaleStateList.Items[i].StateInfo;
          StringGrid1.Cells[3,i+1]:= GroupSaleStateList.Items[i].State;
        end;
      except
        on E:Exception do
        begin
           TErrLog.WriteLogWithMsg('TfrmGroupSales.btnSubMitClick',E.Message,'提交时发生异常错误。',handle);
        end;
      end;
    end;end.
      

  2.   

    edtTicketNumKeyDown,EdtAgreeNumKeyDown两个事件按其他按键都可以触发事件,进入代码去判断key值,唯独按回车时不触发。其他代码没有对form或Edit控件的属性的操作,最多改改text
      

  3.   

    if key<>VK_RETURN then
      

  4.   

    我的KeyDown事件响应的很好啊!
    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if Key = VK_RETURN then
        ShowMessage('Ok');
    end;
      

  5.   

    你这个控件的onKeyPress 和onKeyup等事件,在key=13时正常吗?
      

  6.   

    看来大家还是没搞清楚我什么意思,我的意思是在按回车的时候根本就不触发KeyDown事件,根本就没进入过程 EdtAgreeNumKeyDown,而除了回车键之外,其他按键的相应都是正常的。另外按下ctrl+enter时EdtAgreeNumKeyDown时间也相应,且判断key=13。
    这几天试了试,发现把btnClrae和btnSubMit两个按钮删掉就回复正常了,谁知道什么原因?
      

  7.   

    你肯定在Form上放了button,并且他的default属性为真了,这样回车就等于在点那个按钮,你删除掉按扭当然就正常了,把button的default搞成false,结贴吧.