有没有办法使用多个值的delphi输入框?

Rap*_*nzo 0 delphi multiple-value inputbox

我想从用户那里获得多种不同类型的值(时间,压力,名称......).我想自定义我的输入框.但它只需要一个值.

有没有办法解决这种情况,或使用任何组件?

Rob*_*edy 7

弗朗索瓦是对的.你已经达到了你给出的工具的极限.InputBox简单地说,它并不是为复杂的输入而设计的,它也不是为了处理多个值而设计的.

在评论中链接到的页面有一个示例,但它显示的相当差,所以我不会因为误解而责怪您.它也花了我一些读数.其核心是MyAsk底部的功能.(忽略TAppendThread顶部的类声明.它没用.)MyAsk接受带有提示和值的记录列表,并且对于每个记录,它调用InputBox以从用户请求值.没有记录可能更容易理解.它可以像这样重写:

procedure MultiInputBox(const Prompts: array of string; var Values: array of string]);
var
  i: Integer;
begin
  Assert(Length(Prompts) = Length(Values));
  for i := 0 to High(Prompts) do begin
    Values[i] := InputBox(Application.Title, Prompts[i], Values[i]);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

像这样称呼它:

TempTime := TimeToStr(DefaultTime);
TempPressure := IntToStr(DefaultPressure);
TempName := DefaultName;
MultiInputBox(['Time', 'Pressure', 'Name'], [TempTime, TempPressure, TempName]);
TimeToUse := StrToTime(TempTime);
PressureToUse := StrToInt(TempPressure);
NameToUse := TempName;
Run Code Online (Sandbox Code Playgroud)

不过,这对用户来说是一个糟糕的界面.没有办法回去,没有办法取消,没有迹象表明审讯将持续多长时间,并且没有办法强制执行某些数据类型的格式.如果您设计一个可以获得所需信息的自定义表单,那么您真的会好得多.您正在使用一种工具来设计一个关于世界上最简单的事物的表格.不要抗拒.

如果您需要获得时间,压力和名称,请创建一个包含三个输入控件的表单.使用a TDateTimePicker时,考虑a TSpinEdit为数字输入,并使用a TEdit作为名称.将TLabel控件放在每个输入旁边,以便用户知道每个输入的用途.在表单上放置确定和取消按钮.设置各种其他表单属性,例如边框样式和标题.这种形式几乎没有代码可写.但是,您可以自由添加代码来验证输入值,以确保它们有意义.

要使用它,只需创建它,填充其初始值,以模态显示它,并在关闭时读取新值.

var
  form: TDatePressureNameDialog;
begin
  form := TDatePressureNameDialog.Create(nil);
  try
    form.TimePicker.Value := DefaultTime;
    form.PressureEdit.Value := DefaultPressure;
    form.NameEdit.Text := DefaultName;
    if form.ShowModal = mrOK then begin
      TimeToUse := Frac(form.TimePicker.Value);
      PressureToUse := form.PressureEdit.Value;
      NameToUse := form.NameEdit.Text;
    end;
  finally
    form.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

另请注意我如何检查ShowModal方法的结果.这可以让您知道用户是按下"确定"还是"取消"以关闭表单.你不能这样做InputBox,它总是返回一个字符串.(InputQuery可以告诉你这些信息,这是这两个函数之间的主要区别,但仅此一点并不能使这两种函数在你的情况下值得使用.)

不要担心这个新的表格类会压低你的项目.对项目大小影响最大的两件事是SysUtilsForms单元.你已经包含了那些,所以最糟糕的已经过去了.将表单添加到已经包含至少一个表单的项目中根本不会影响项目大小,尤其是上面描述的表单,它只有八个控件.