为什么我的输入框没有按顺序显示?

时间:2016-07-26 15:45:23

标签: delphi

我需要制作一个程序,输入并显示产品的信息(品牌名称,内容,质量以及库存量)。

问题:即使编写代码以按顺序显示代码,此代码中的输入框也不会按顺序完全显示。输入框按以下顺序排列:"内容"," Mass"," Stock","品牌名称"它应该实际上是"品牌名称","内容"," Mass"," Stock&#34 ;.(这些是输入的标题框)。

- 我认为这可能是源(向下滚动程序的其余部分):

 StrObj := TProducts.Create(Inputbox('Brand name', 'Input the brand name', ''),Inputbox('Contents', 'Input the contents', ''), StrToInt(Inputbox('Mass', 'Input the mass', '')), StrToInt(Inputbox('Stock', 'Input the number in stock', '')));

注意:

- 所有数据都会转到预定的位置,因此输入框的顺序根本不会影响程序。我想知道是否有办法让输入框按顺序显示。

- 这是一项作业,但输入框的顺序不会计算标记。

整个代码:

申请:

unit TProducts_U;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, TProducts_class;

type
  TForm1 = class(TForm)
    btnResult: TButton;
    redOut: TRichEdit;
    procedure btnResultClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnResultClick(Sender: TObject);
var StrObj : TProducts;
begin
  StrObj := TProducts.Create(Inputbox('Brand name', 'Input the brand name', ''),Inputbox('Contents', 'Input the contents', ''), StrToInt(Inputbox('Mass', 'Input the mass', '')), StrToInt(Inputbox('Stock', 'Input the number in stock', '')));
  redOut.Lines.Add(StrObj.toString);
end;

end.

我的课程:

unit TProducts_class;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Math;

type
  TProducts = class
  private
    fBname, fContents : string;
    fMass, fNum : integer;
  public
    Constructor Create; overload;
    Constructor Create(Bname, contents : string; mass, num : integer); overload;
    Function toString : string;
  end;

implementation

{ TProducts }

constructor TProducts.Create;
begin
   fBname := '';
   fContents := '';
   fMass := 0;
   fNum := 0;
end;

constructor TProducts.Create(Bname, contents: string; mass, num: integer);
begin
   fBname := Bname;
   fContents := contents;
   fMass := mass;
   fNum := num;
end;

function TProducts.toString: string;
begin

  result := 'Brand Name is : ' + fBname + #13 +
            'Contents is : ' +  fContents + #13 +
            'Mass is : ' +  IntToStr(fMass) + #13 +
            'We have ' + IntToStr(fNum) + ' in stock';

end;

end.

1 个答案:

答案 0 :(得分:5)

参数评估顺序未在Delphi中定义。

您需要为每个InputBox()调用编写单独的指令,然后再将它们连接起来。

例如:

procedure TForm1.btnResultClick(Sender: TObject);
var
  StrObj: TProducts;
  sBrandName, sContents, sMass, sStock: string;
begin
  sBrandName := Inputbox('Brand name', 'Input the brand name', '');
  sContents := Inputbox('Contents', 'Input the contents', '');
  sMass := StrToInt(Inputbox('Mass', 'Input the mass', ''));
  sStock := StrToInt(Inputbox('Stock', 'Input the number in stock', ''))
  StrObj := TProducts.Create(sBrandName, sContents, sMass, sStock);
  // Added try .. finally, otherwise you will leak StrObj
  try
    redOut.Lines.Add(StrObj.toString);
  finally
    StrObj.Free;
  end;
end;