遇到的问难是:
    窗体中有两个TMaskEdit派生组件(该组件增加了一个key属性)。分别为MEdit1,MEdit2,其中MEdit1的Text属性值表示员工名称,MEdit1.key值表示员工编号;MEdit1的Text值表示部门名称,MEdit2.key表示部门编号。 MEdit2是ReadOnly的。在MEdit1的ONExit事件中自动更新MEdit2的key值和Text值。本人想当MEdit1.Text属性值为空时,自动清除Medit1.key、MEdit2.text、Medit2.Key值。在MEdit1.keyup事件中写了如下代码:
procedure form1.Medit1keyup()
begin
  if Medit1.text='' then
   begin
     Medit1.key='';
     Medit2.text:='';
     Medit2.key:='';
   end
end;程序运行时,如果按删除键删除Medit1的所有内容时,达到了预期目的,但是:如果先选中MEdit1的所有内容,再按其它键修改内容时,Medit1.key、MEdit2.text、Medit2.Key值没有被清除,因为KeyUP事件中Medit1.text<>'' 请问如果能做到:不管是按删除键还是按其它字符,只要MEdit1原有的所有字符被替换掉以后,就清除其key值和MEdit2的属性值。

解决方案 »

  1.   

    同意楼上,你又没有监控每个按键,不必放到onkeyup事件中
      

  2.   

    何时用keyup较好?能举个例吗?
      

  3.   

    判断输入的输入的是否是非法字符 可以用keyup
      

  4.   

    想当MEdit1.Text属性值为空时,自动清除Medit1.key、MEdit2.text、Medit2.Key值。在MEdit1.keyup事件中写了如下代码:应该是keydown吧,要不也是onchange,怎么会是keyup呢
      

  5.   

    onchange是可以判断,不过如果键入的是同样的字符串,还是认为被修改了.
    所以,要比较准确的判断是否修改,可以给这个控件增加一个属性OldText,用来记录原来的字符串.
    在onExit事件中,可以根据OldText 是否等于Text来判断是否进行了修改.不过要记得处理后,给OldText赋值.