如何在MessageBox中显示TStringList项

时间:2014-04-26 21:22:37

标签: delphi

我无法弄明白......

在InputBox中显示TStringList(A1,A2,A3)项。

另外,我尝试使用

  

函数InputCombo2(const ACaption,APrompt:string; const AList:   TStrings):string;

但此功能不起作用

var
List: TStringList;


 if Not FileExists(CradTypeText)
 then
     Begin
      List := TStringList.Create;
      List.Add('A1');
      List.Add('A2');
      List.Add('A3');
         repeat
              CardTypeStr := InputBox('Card Recharger', 'Please select the card', List);
         until (CardTypeStr = 'A1') or (CardTypeStr = 'A2') or (CardTypeStr = 'A3');
         //ShowMessage(iStr);//Test
         AssignFile(myFile, CradTypeText);
         ReWrite(myFile);
         WriteLn(myFile, CardTypeStr);
         CloseFile(myFile);
         List.Free;
     End
  Else
      Begin
          IDEdt.Enabled := False;
          AssignFile(myFile, IDtext);
          Reset(myFile);
          ReadLn(myFile, CardTypeStr);
          IDEdt.Text := CardTypeStr;//Test
      End;

1 个答案:

答案 0 :(得分:2)

使用MessageBoxInputBox等显示的对话框只是预先制作的形式。

您想要为他们添加额外的项目,您必须设计自己的表单。

以下是如何执行此操作:

在项目中添加额外的表单

在项目中添加额外的表单:文件 - >新... - >表格

将一个ComboBox或ListBox放到表单上(我更喜欢列表框) 并删除两个按钮。

设置以下属性:

Button1.ModalResult:= mrOK;
Button2.ModalResult:= mrCancel;

此表单将是您的对话框。

自定义对话框,使其可以保留显示选项
将公共属性添加到表单中,如下所示:

TForm2 = class(TForm)
private
  FOptions: TStringList;
  FChoosenOption: string;
  ....
public 
 property Options: TStringList read FOptions write FOptions;
 property ChoosenOption: string read FChoosenOption;
 ....
end;

将以下代码分配给表单的OnShow事件:

procedure TForm2.Form2Show(Sender: TObject);
var 
  i: integer;
begin
  if Assigned(FOptions) then begin
    ListBox1.Items.Clear;
    for i:= 0 to FOptions.Count -1 do begin
      ListBox1.Items.Add(FOptions[i]);
    end; {for}
  end; {if}   
end;

存储所选项目时,用户选择它。

procedure TForm2.ListBox1Click(Sender: TObject);
begin
  self.FChoosenOption:= ListBox1.Items[ListBox1.ItemIndex];
end;

显示表单
默认情况下,表单将自动创建,这很好。

以下代码可以解决问题:

procedure TForm1.BtnShowMeOptionsClick(Sender: TObject);
begin
  Form2.Options:= MyListOfOptions;
  case Form2.ShowModal() of
    mrOK: begin
      self.OptionPicked:= Form2.ChoosenOption;
    end;
    mrCancel: begin
      self.OptionPicked:= '';
    end;
  end; {case}
end;

这样的事情应该可以解决问题。

一些信息
见:http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Forms_TCustomForm_ShowModal.html
Delphi TListBox OnClick / OnChange?