我在插入查询之前检查备忘录的内容。
if memo1.lines.Text = '' then begin
showmessage('Warning:Missing data!');
abort;
end else ....
只要memo1中没有任何内容,它就可以正常工作。 但是,当用户点击进入空备忘录并且光标移动时 到第二行,运行查询,在没有警告消息的情况下触发插入, 虽然备忘录中没有任何内容。 有办法防止这种情况吗?
答案 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()更有效,因为它不涉及生成任何新字符串或修改正在测试的字符串。