Delphi中 dbedit 怎样实现这样的功能:按backspace可以全部删掉,但不可一个一个逐个字符的修改

时间:2022-06-19 17:36:01
Delphi中 dbedit 怎样实现这样的功能:按backspace可以全部删掉,但不可一个一个逐个字符的修改。如dbedit中有这样的文本(数据库中获取的)user,要么让它为空(删除),要么双击后选择(数据库中的字段值),但就是不能让用户手动修改 

9 个解决方案

#1


实现他的OnKeyPress事件就可以了,判断其参数Key是否等于 #8,如果相等,则将dbedit所关联的数据集中的对应字段设为空

#2


试过了,OnKeyPresss事件不行。DBEdit是数据库感知控件,其readonly必须设为true,如果这样的话,该输入框的OnKeyPresss根本就执行不进去;若将readonly改为false,则又允许了用户可以修改,纠结……

#3


偶一般用edit,数据感知控件用起来不爽~~和数据绑定太死。

#4


引用 2 楼 yangtzeboy 的回复:
试过了,OnKeyPresss事件不行。DBEdit是数据库感知控件,其readonly必须设为true,如果这样的话,该输入框的OnKeyPresss根本就执行不进去;若将readonly改为false,则又允许了用户可以修改,纠结……

就算是然dbedit的readonly设置为true;
它也是接受onkeypress事件的.
我试过了,你用的什么版本?我的是D6

#5


procedure dbedtaaKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #8 then
  begin
    DataSet1.Edit;
    DataSet1.FieldValues['fieldName']:= '';
    DataSet1.Post;
  end;
end;

#6


procedure TForm1.DBEdit1KeyPress(Sender: TObject;
  var Key: Char);
begin
  If key = #8 Then
  begin
    DBEdit1.DataSource.DataSet.Edit;
    DBEdit1.Field.AsString := '';
  End
  else
    key := Chr(0);
end;

#7


呵呵,将这个edit设置为只读,然后在OnKeyDown中处理退格键、删除键,如果用户按下了这两个键,就用代码清空dbedit中的内容,呵呵

#8


引用 4 楼 linghengmao 的回复:
引用 2 楼 yangtzeboy 的回复:

试过了,OnKeyPresss事件不行。DBEdit是数据库感知控件,其readonly必须设为true,如果这样的话,该输入框的OnKeyPresss根本就执行不进去;若将readonly改为false,则又允许了用户可以修改,纠结……

就算是然dbedit的readonly设置为true;
它也是接受onkeypress事件的.
我……


我用的是D7

#9


引用 7 楼 wxieyang 的回复:
呵呵,将这个edit设置为只读,然后在OnKeyDown中处理退格键、删除键,如果用户按下了这两个键,就用代码清空dbedit中的内容,呵呵


7楼正解,我最后是用OnKeyDown事件实现的,dbedit的只读属性保留,如果是退格键、删除键,则将感知控件的文本内容置空,并且将数据集中的字段值清空;如果是用户敲击了其他的键,则提示他应该双击该输入框,在弹出的窗口中进行选择。谢谢所有人的回答 ^_^ 

#1


实现他的OnKeyPress事件就可以了,判断其参数Key是否等于 #8,如果相等,则将dbedit所关联的数据集中的对应字段设为空

#2


试过了,OnKeyPresss事件不行。DBEdit是数据库感知控件,其readonly必须设为true,如果这样的话,该输入框的OnKeyPresss根本就执行不进去;若将readonly改为false,则又允许了用户可以修改,纠结……

#3


偶一般用edit,数据感知控件用起来不爽~~和数据绑定太死。

#4


引用 2 楼 yangtzeboy 的回复:
试过了,OnKeyPresss事件不行。DBEdit是数据库感知控件,其readonly必须设为true,如果这样的话,该输入框的OnKeyPresss根本就执行不进去;若将readonly改为false,则又允许了用户可以修改,纠结……

就算是然dbedit的readonly设置为true;
它也是接受onkeypress事件的.
我试过了,你用的什么版本?我的是D6

#5


procedure dbedtaaKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #8 then
  begin
    DataSet1.Edit;
    DataSet1.FieldValues['fieldName']:= '';
    DataSet1.Post;
  end;
end;

#6


procedure TForm1.DBEdit1KeyPress(Sender: TObject;
  var Key: Char);
begin
  If key = #8 Then
  begin
    DBEdit1.DataSource.DataSet.Edit;
    DBEdit1.Field.AsString := '';
  End
  else
    key := Chr(0);
end;

#7


呵呵,将这个edit设置为只读,然后在OnKeyDown中处理退格键、删除键,如果用户按下了这两个键,就用代码清空dbedit中的内容,呵呵

#8


引用 4 楼 linghengmao 的回复:
引用 2 楼 yangtzeboy 的回复:

试过了,OnKeyPresss事件不行。DBEdit是数据库感知控件,其readonly必须设为true,如果这样的话,该输入框的OnKeyPresss根本就执行不进去;若将readonly改为false,则又允许了用户可以修改,纠结……

就算是然dbedit的readonly设置为true;
它也是接受onkeypress事件的.
我……


我用的是D7

#9


引用 7 楼 wxieyang 的回复:
呵呵,将这个edit设置为只读,然后在OnKeyDown中处理退格键、删除键,如果用户按下了这两个键,就用代码清空dbedit中的内容,呵呵


7楼正解,我最后是用OnKeyDown事件实现的,dbedit的只读属性保留,如果是退格键、删除键,则将感知控件的文本内容置空,并且将数据集中的字段值清空;如果是用户敲击了其他的键,则提示他应该双击该输入框,在弹出的窗口中进行选择。谢谢所有人的回答 ^_^