题
消息框(处理, '吗?你真的要退出', '你确定吗?',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准则其状态:
不必要的确认信息是恼人的
不隶属于 StackOverflow