【问题标题】:Clicking cancel when entering values in inputbox not exiting procedure在输入框中输入值时单击取消不退出程序
【发布时间】:2021-08-13 17:31:37
【问题描述】:

我在我的项目中使用输入框来获取要输入到数据库的数据。问题是,如果用户在输入框中单击取消,它会采用输入框中的默认值。如果单击取消,我如何退出程序?这是我的输入框的样子:

sTeamName := inputbox('Team Name','Enter a team name','Phillies');

如果用户点击取消,sTeamName 将 = 'Phillies'。我无法验证默认值是否存储在变量中,因为默认值可能是用户想要输入的值。有没有类似 if inputbox.cancel.click exit 之类的?

【问题讨论】:

    标签: delphi


    【解决方案1】:

    您需要改用InputQuery 函数。这将返回一个布尔值,即 False iff 对话框已取消,并将输入字符串保存在 var 参数中:

    var
      S: string;
    begin
      S := 'My New Team';
      if InputQuery('Team Name', 'Enter a team name:', S) then
        ShowMessageFmt('You entered "%s".', [S]);
    

    【讨论】:

    • 有没有办法用输入框来做,或者输入查询是唯一的方法?
    • @OdinMostert:你为什么不想使用InputQuery 函数?恕我直言,InputBox 函数只是一个非常糟糕的设计示例——您必须能够确定对话框是否被取消,而InputBox 不会告诉您这一点。
    • 我想要使用输入框的解决方案的原因是因为我的程序有 20 多次我已经使用输入框编写了解决方案。但是如果你说无法确定是否点击了取消,我将切换到 InputQuery。
    • @Odin:是的,切换到InputQuery 绝对是正确的做法。
    • @OdinMostert "如果 ... 无法确定是否使用 [InputBox] 单击取消,我将切换到 InputQuery" - 有办法,你是只是拒绝使用它——使用更明智的ADefault 参数值。但我同意 Andreas 的观点,InputQuery()InputBox() 更能满足您的需求。
    【解决方案2】:

    如果用户在输入框上点击取消,它会采用输入框中的默认值

    这是设计使然,是documented behavior:

    如果用户选择取消按钮,InputBox返回默认值。如果用户选择确定按钮,InputBox返回编辑框中的值。


    我无法验证默认值是否存储在变量中,因为默认值可能是用户想要输入的。

    使用空白字符串作为默认值,例如:

    sTeamName := InputBox('Team Name', 'Enter a team name', '');
    if sTeamName <> '' then begin
      // use sTeamName as needed...
    end else
    begin
      // cancelled, do something else
    end;
    

    否则,请改用InputQuery(),如@AndreasRejbrand's answer 所示。文档指出:

    当用户选择取消按钮(或按 Esc)退出对话框时应使用默认值时,请使用 InputBox 函数。 如果应用程序需要知道用户选择了确定还是取消,请改用InputQuery 函数

    【讨论】:

    • 是的,我知道将空白字符串作为默认值很容易,但我在程序中使用默认值来指导最终用户输入的内容。它主要用作示例数据。
    • InputBox() 无法区分进入时提供的初始值与退出时返回的默认值,因此您可以将初始值移动到 Prompt 参数中,例如:sTeamName := InputBox('Team Name', 'Enter a team name, ie Phillies', '');否则,使用InputQuery()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2020-08-12
    相关资源
    最近更新 更多