消息框(处理, '吗?你真的要退出', '你确定吗?',1);

在这个按钮有两件事情,什么用户可以做的。确定和取消。 什么代码我一定写,该按钮关闭该程序在“OK”,并结束对话,当按下取消?

有帮助吗?

解决方案

Delphi提供用于示出一个消息更好的解决方案。 我应该使用的MessageDlg功能。在的MessageDlg(和MessageBox中)函数的返回值指示用户选择。所以,当你放在一个的MessageDlg是按钮,返回值将是mrYes当用户按下是按钮。 所以,你的代码会是这样的:

var
  ShouldClose: Boolean;
begin
  if MessageDlg('Do you really want to quit?', mtConfirmation, 
      [mbYes, mbNo], 0) = mrYes then
    ShouldClose := True
  else
    ShouldClose := False;
end;

您也想关闭您的应用程序,如果用户选择是。 当你有,你可以实现CloseQuery事件正常德尔福VCL应用你的MainForm,当您尝试关闭您的MainForm(如点击closebutton)执行CloseQuery事件,具有可变CanClose。设置CanClose为True意味着MainForm的是确定关闭,将其设置为false将阻止关闭您的MainForm:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := MessageDlg('Do you really want to quit?', mtConfirmation, 
    [mbYes, mbNo], 0) = mrYes;
end;

其他提示

首先,确保在消息框中的按钮上的文本相匹配。所以,如果文字是:“你真的要退出?”然后按钮应该是“是”和“否”。

二,使用适当的常量,使你的代码更易于阅读以后。这将是:

var
  Res: integer;

Res := Application.MessageBox('Do you really want to exit?', 'Are you sure?',
  MB_ICONQUESTION or MB_YESNO);

结果于是将要么IDYES或IDNO。因此,假设呼叫是主窗体的方法中,你会使用它,如:

if Res = IDYES then
  Close;

如果你从别的地方调用这个,你也可以叫

if Res = IDYES then
  Application.Terminate;

编辑:请不要也检查出 Vista用户在对话框Inteface准则其状态:

  

不必要的确认信息是恼人的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top