防止插入空备忘录

时间:2014-09-01 22:15:07

标签: delphi

我在插入查询之前检查备忘录的内容。

if memo1.lines.Text = '' then begin
showmessage('Warning:Missing data!');
abort;
end else ....

只要memo1中没有任何内容,它就可以正常工作。 但是,当用户点击进入空备忘录并且光标移动时 到第二行,运行查询,在没有警告消息的情况下触发插入, 虽然备忘录中没有任何内容。 有办法防止这种情况吗?

2 个答案:

答案 0 :(得分:2)

用户点击后输入您的备忘录的文字包含空白(换行),因此它不等于''。

您需要先修剪文字。 http://docwiki.embarcadero.com/Libraries/XE2/en/System.SysUtils.Trim

var
    memoText : String;

...

memoText := Trim(memo1.lines.Text);
if memoText = '' then 
begin
    showmessage('Warning:Missing data!');
    abort;
end else ....

答案 1 :(得分:1)

如果用户按RETURN导致备忘录中有一行,那么您必须将 WantReturns 属性设置为 TRUE ,并且 OnKeyPress < / strong>或 OnKeyDown 事件处理#13密钥或 VK_RETURN 虚拟密钥代码。

如果您将 WantReturns 设置为FALSE,则用户必须使用 CTRL + ENTER 插入新行,并且只需轻触RETURN键即可 插入一个空行。

但是如果您对用户界面当前行为的方式感到满意,并且只想检查备忘录是否只包含空格,那么您必须使用修剪(Memo.Text)或其他一些机制,用于测试备忘录的内容,以满足您的应用程序定义&#34; not empty&#34;。

正如其他人所说,仅仅为了测试非空白字符的存在,在 Memo.Text 上使用修剪()可能是非常低效的,尽管如何在您的情况下,很多问题将取决于您的应用程序中备忘录的预期内容。

测试非空白字符串的更有效方法是:

function ContainsOnlyWhitespace(const aString: String): Boolean;
var
  i: Integer;
begin
  result := FALSE;

  for i := 1 to Length(aString) do
    if (aString[i] > ' ') then
      EXIT;

  result := TRUE;
end;

因此将使用:

if ContainsOnlyWhitespace(Memo.Text) then
begin
  // show warning message etc...
end;

这将比 Trim()更有效,因为它不涉及生成任何新字符串或修改正在测试的字符串。