【问题标题】:Delphi, TEdit text as action triggerDelphi,TEdit 文本作为动作触发器
【发布时间】:2018-05-25 09:54:51
【问题描述】:

我使用TEdit 允许用户输入数字,例如10.

我将TEdit.Text 转换为整数并调用计算过程。

在此计算过程中,内置检查以确保不处理低于 10 的数字。

目前我使用OnChange 事件。假设用户想要将“10”更改为“50”。但是,一旦删除了“10”或键入了“5”(后面跟着 0),我就会触发我的警告,即最小数字为 10。即程序不会等到我完全输入 5 和 0。

我试过OnEnterOnClickOnExit,但我似乎没有克服这个问题。唯一的解决方案是添加一个单独的按钮,该按钮将使用新数字触发计算。它可以工作,但我可以不用按钮吗?

【问题讨论】:

  • 这是一个经典问题。最好不要太具有侵略性。尽可能避免显示对话框。他们只是伤害了用户。在编辑控件中使用红色背景表示它是无效的。或者也许将输出更改为描述输入无效的文本。
  • 好的,谢谢。我知道没有真正的解决方案。我考虑过延迟建造。我可以使用此 TEdit 的提示选项来告诉用户他能/不能做什么,并忽略消息框(这确实会导致痛苦)。
  • 我会使用TSpinEdit 而不是TEditTSpinEdit 专为数字输入而设计,而 TEdit 则用于任意文本。
  • 在移动设备上旋转可能很好,但在有键盘的桌面上却很糟糕
  • 限制输入总是会让用户感到沮丧。为什么我的键盘不再工作了??!!!!

标签: delphi delphi-10.1-berlin


【解决方案1】:

使用计时器进行延迟检查,例如:

procedure TForm1.Edit1Change(Sender: TObject);
begin
  // reset the timer
  Timer1.Enabled := false;
  Timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := false;
  // do your check here
end;

对于大多数用户来说,将计时器设置为 500 毫秒应该没问题。

正如大卫在 cmets 中对问题所建议的那样:显示错误对话框,改用不那么侵入性的东西,例如编辑或更改背景颜色附近的标签中的错误消息。还有:不要阻止焦点从那个控件上移开,不要不要播放声音,这也很烦人。

对于我们的内部软件,如果出现错误,我们会将控件的背景设置为黄色,并在状态栏中显示第一个此类错误的错误消息,并作为控件提示。如果你这样做,你可能甚至不需要延迟。

【讨论】:

  • 您的代码存在一个问题。那就是计时器将一直检查编辑文本的有效性。为避免这种情况,还应在每次有效性检查后禁用计时器。您可以轻松做到这一点,因为在下一次文本更改后将再次启用计时器。
【解决方案2】:

感谢您的帮助。我尝试了计时器选项,但无法让它工作。我现在有了这段代码,它可以工作(几乎 - 见下文),但需要用于始终键入 CR:

procedure Calculate;
begin
  // this is my calculation procedure
  ShowMessage('calculation running correctly'); 
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
N   : integer;
begin
  if Key = #13 then
  begin
    N := StrtoInt(Edit1.Text);
    if N<10 then ShowMessage('<10!') else
      if N>100 then ShowMessage('>100!') else Calculate;
  end;
end;

我在这里使用 ShowMessage() 只是为了查看示例代码是否有效。正如你们所建议的那样,在实际程序中,我忽略了这一点。 我还包括了“输入错误时变黄”(感谢大卫)。唯一的问题是,如果用户运行它,我的电脑会发出哔哔声。我看不出出了什么问题。但是是什么导致了哔声?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多