如何多次调、用Edit1KeyPress,
我想做了个进制转换的小工具,在ToolButton1 2  3 里分别设置的是十进制转十六进制,十六进制转十进制,二转十.
我在Edit1KeyPress里判断输入的数是否正确。问题是
1.如何在ToolButton1Click里调用Edit1KeyPress?
2.如何在ToolButton2Click 3Click 4Click调用Edit1KeyPress.且能进行不同的判断Key in ['0'..'9'] Key in ['0'..'1']  Key in ['0'..'9','a'..'f','A'..'F']里呢?

解决方案 »

  1.   

    我感觉不需要调用Edit1KeyPress
    楼主只需要添加一个变量就可以了
    var
      flag: integer;procedure TForm1.Button1Click(Sender: TObject);
    begin
      flag:=1;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      flag:=2;end;procedure TForm1.Button3Click(Sender: TObject);
    begin
      flag:=3;
    end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      case flag of
      1: if not (Key in ['0'..'9']) then
           key:=#0;  2:if not (Key in ['0'..'1']) then
           key:=#0;
     
      3:if not (Key in ['0'..'9','a'..'f','A'..'F']) then
           key:=#0;
      end;
    end;
      

  2.   

    begin
    if Edit1.Text = '' then
        begin
          Application.MessageBox('请输入要转换的二进制数!','');
          Edit1.SetFocus;
          Exit;
        end;
        flag:=3;
        Edit1KeyPress(Sender: TObject; var Key: Char);   //在这里如何调用啊??????????
        Edit2.Text:=Inttostr(bin(Edit1.Text));
        Label2.Caption:='该数的十进制是:';
    end;
      

  3.   

    如何判断Edit1里输入的字符里不包含想要的字符呢?
      

  4.   

    1、建议把Edit1KeyPress里的检查输入代码拿出来独立为一个函数,然后在OnKeyPress事件中调用,这样更清晰一些2、Edit1KeyPress是OnKeyPress的事件处理方法,其中的Key参数是变量参数,代表触发此事件的按键。
    可以测试一下
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      ShowMessage(Key);
    end;
    按其形式,调用需要写成这样
    procedure TForm1.Button1Click(Sender: TObject);
    var
      MyKey: Char;
    begin
      MyKey := Char('A');
      Edit1KeyPress(Sender, MyKey);
    end;
    但在这里显然是不行的,因为Key值是要根据键盘输入获取的。
    (即使要模拟键盘输入,应当考虑SendMessage等消息方式)3、尽量避免显式调用事件处理方法,虽然有时可以达到同样效果但代码的耦合性会加大,易出错,不利于代码的后续维护。