Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 编辑和编辑事件_Delphi_Delphi 7 - Fatal编程技术网

Delphi 编辑和编辑事件

Delphi 编辑和编辑事件,delphi,delphi-7,Delphi,Delphi 7,我有几个问题: 如何使edit1.text在我按enter键时为空我认为应该是在OneNet事件上,但不太确定 有没有办法将Edit1.text中的字符串分配给数组? 说到这里,我想做的就是: 在“编辑”中输入名称,单击“输入”,然后在同一个“编辑”中输入另一个名称,以及要保存在某个变量或数组中的上一个名称。这可能吗 我尝试了程序TForm1.Edit3EnterSender:TObject;但当我单击enter时,什么也不会发生。当编辑控件接收到键盘输入时,而不是当用户按下enter键时,会触

我有几个问题:

如何使edit1.text在我按enter键时为空我认为应该是在OneNet事件上,但不太确定 有没有办法将Edit1.text中的字符串分配给数组? 说到这里,我想做的就是:

在“编辑”中输入名称,单击“输入”,然后在同一个“编辑”中输入另一个名称,以及要保存在某个变量或数组中的上一个名称。这可能吗

我尝试了程序TForm1.Edit3EnterSender:TObject;但当我单击enter时,什么也不会发生。

当编辑控件接收到键盘输入时,而不是当用户按下enter键时,会触发OnNet事件。您应该使用OnKeyPress事件来进行此操作,例如:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  S: String;
begin
  if Key = #13 then
  begin
    Key := #0;  
    S := Edit1.Text;
    Edit1.Clear;
    // do something with S...
  end;
end;

让我们构建一个简单的项目。将TEdit和TListbox添加到表单中

 unit Unit1;

    interface

    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        ListBox1: TListBox;
        procedure Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
        procedure Edit1Enter(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}
    procedure TForm1.Edit1Enter(Sender: TObject);
    begin
     ShowMessage('On enter');
    end;

    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if Key = 13 then
      begin
        ListBox1.Items.Add(Edit1.Text);
        Edit1.Text := '';
      end;

    end;

    end.
要检测按键事件,请使用任何按键向下/按键向上事件,我使用了按键向下。每次我点击“输入”时,编辑字符串就会进入列表框

这是在DelphiXe7上


也供您参考。OneNet事件在编辑字段上设置焦点时触发。例如,在同一个项目上,分配OneNet事件。现在单击列表框,然后单击Edit1,您将触发oneter事件。

Er、OnKeyDown和onkeydup是完全不同的。自己试试典型的Windows应用程序。该控件是在按键向下还是向上时显示字符?它是双向工作的,我在按键向上添加了相同的代码,它做了相同的事情。这可能是不同的,但对他的目的来说,它是有效的。不,它不是。阅读文档,但作为一个简短的总结,OnKeyDown在按键按下时启动,onkeydup在按键上升时启动。很明显,一个按键按下,一个按键上升,但我认为他永远不会遇到onkeydup在他的情况下不会启动的情况,因为他按enter键,所以会执行按键下降和按键上升事件。我遗漏了什么?关键是当按键时程序应该响应,因为这是平台标准。无论如何,在这种情况下使用OnKeyPress。