
如果是你自己用窗体做的messagebox,
Yes按钮的Click事件里将messagebox关闭,继续执行程序
No按钮的Click事件里用End结束程序
如果是用Msgbox函数生成的消息框,可以用
answer = MsgBox("选择Yes或No", vbYesNo)
If answer = vbYes Then
'继续运行
ElseIf answer = vbNo Then
End '结束运行
End If
function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer;
hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。
Text:欲显示的信息字符串。
Caption:对话框标题字符串。
Type:对话框类型常量。
该函数的返回值为整数,用于对话框按钮的识别。
参考用法如下:
1 MessageBox("这是一个最简单的消息框!");
2 MessageBox("这是一个有标题的消息框!","标题");
3 MessageBox("这是一个确定 取消的消息框!","标题", MB_OKCANCEL );
4 MessageBox("这是一个警告的消息框!","标题", MB_ICONEXCLAMATION );
5 MessageBox("这是一个两种属性的消息框!","标题",
MB_ICONEXCLAMATION|MB_OKCANCEL );
6 if(MessageBox("一种常用的应用","标题
" ,MB_ICONEXCLAMATION|MB_OKCANCEL)==IDCANCEL)
return;
注意:
以上消息框的用法是在CWnd的子类中的应用,如果不是,则要MessageBox(NULL,"ddd","ddd",MB_OK); 或MessageBox(hWnd,"ddd","ddd",MB_OK); hWnd为某窗口的句柄,或者直接用AfxMessageBox。
窗体上放置三个TextBox,分别输入a,b,c的值,控件命名:tbA,tbB,tbC
再放一个Button,设置Text为:求解,其单击后台代码如下:
private void button1_Click(object sender, EventArgs e)
{
double a = 0;
double b = 0;
double c = 0;
try
{
if (tbATextLength == 0)
{
MessageBoxShow("请输入a的值", "提示", MessageBoxButtonsOK, MessageBoxIconInformation);
return;
}
a = ConvertToDouble(tbAText);
}
catch
{
MessageBoxShow("您输入的a的值不是一个数字,请重新输入", "提示", MessageBoxButtonsOK, MessageBoxIconInformation);
tbAFocus();
return;
}
try
{
if (tbBTextLength == 0)
{
MessageBoxShow("请输入b的值", "提示", MessageBoxButtonsOK, MessageBoxIconInformation);
return;
}
b = ConvertToDouble(tbBText);
}
catch
{
MessageBoxShow("您输入的b的值不是一个数字,请重新输入", "提示", MessageBoxButtonsOK, MessageBoxIconInformation);
tbBFocus();
return;
}
try
{
if (tbCTextLength == 0)
{
MessageBoxShow("请输入c的值", "提示", MessageBoxButtonsOK, MessageBoxIconInformation);
return;
}
c = ConvertToDouble(tbCText);
}
catch
{
MessageBoxShow("您输入的c的值不是一个数字,请重新输入", "提示", MessageBoxButtonsOK, MessageBoxIconInformation);
tbCFocus();
return;
}
if (a == 0)
{
if (b == 0)
{
if (c == 0)
{
MessageBoxShow(stringFormat("方程{0}x^2+{1}x+{2}=0的解为 x={3}", a, b, c, "任意实数"), "提示", MessageBoxButtonsOK, MessageBoxIconInformation);
}
else
{
MessageBoxShow(stringFormat("方程{0}x^2+{1}x+{2}=0无实数解", a, b, c), "提示", MessageBoxButtonsOK, MessageBoxIconInformation);
}
}
else
{
MessageBoxShow(stringFormat("方程{0}x^2+{1}x+{2}=0的解为 x={3}", a, b, c, -c / b), "提示", MessageBoxButtonsOK, MessageBoxIconInformation);
}
}
else
{
double delta = b b - 4 a c;
if (delta < 0)
{
MessageBoxShow(stringFormat("方程{0}x^2+{1}x+{2}=0无实数解", a, b, c), "提示", MessageBoxButtonsOK, MessageBoxIconInformation);
}
else
{
MessageBoxShow(stringFormat("方程{0}x^2+{1}x+{2}=0的解为 x1={3} , x2={4}", a, b, c, (-b + SystemMathSqrt(delta)) / 2 / a, (-b - SystemMathSqrt(delta)) / 2 / a), "提示", MessageBoxButtonsOK, MessageBoxIconInformation);
}
}
}
MessageBox提供Show方法,并且返回DialogResult。
如果用户点击MessageBox的OK按钮,则会返回DialogResultOK。
如果用户点击MessageBox的Cancel按钮,则会返回DialogResultCancel。
由此做条件判断,添加业务逻辑。
示例代码如下:
if (MessageBoxShow("是否继续") == SystemWindowsFormsDialogResultOK){
//执行确认后的 *** 作
}
else
{
//执行取消 *** 作
}
Application是Form单元的一个全局对象
具体实现是
----------------------
function TApplicationMessageBox(const Text, Caption: PChar; Flags: Longint): Integer;
var
ActiveWindow: HWnd;
WindowList: Pointer;
MBMonitor, AppMonitor: HMonitor;
MonInfo: TMonitorInfo;
Rect: TRect;
FocusState: TFocusState;
begin
ActiveWindow := GetActiveWindow;
MBMonitor := MonitorFromWindow(ActiveWindow, MONITOR_DEFAULTTONEAREST);
AppMonitor := MonitorFromWindow(Handle, MONITOR_DEFAULTTONEAREST);
if MBMonitor <> AppMonitor then
begin
MonInfocbSize := Sizeof(TMonitorInfo);
GetMonitorInfo(MBMonitor, @MonInfo);
GetWindowRect(Handle, Rect);
SetWindowPos(Handle, 0,
MonInforcMonitorLeft + ((MonInforcMonitorRight - MonInforcMonitorLeft) div 2),
MonInforcMonitorTop + ((MonInforcMonitorBottom - MonInforcMonitorTop) div 2),
0, 0, SWP_NOACTIVATE or SWP_NOREDRAW or SWP_NOSIZE or SWP_NOZORDER);
end;
WindowList := DisableTaskWindows(0);
FocusState := SaveFocusState;
if UseRightToLeftReading then Flags := Flags or MB_RTLREADING;
try
Result := WindowsMessageBox(Handle, Text, Caption, Flags);
finally
if MBMonitor <> AppMonitor then
SetWindowPos(Handle, 0,
RectLeft + ((RectRight - RectLeft) div 2),
RectTop + ((RectBottom - RectTop) div 2),
0, 0, SWP_NOACTIVATE or SWP_NOREDRAW or SWP_NOSIZE or SWP_NOZORDER);
EnableTaskWindows(WindowList);
SetActiveWindow(ActiveWindow);
RestoreFocusState(FocusState);
end;
end;
---------------------------------
MessageBox是Windows单元的函数
可以看到ApplicationMessageBox调用了WindowsMessageBox
编译时要包含相应的单元
比如用到ApplicationMessagebox就包含Form
用到MessageBox要包含WIndows
有什么问题可以研究一下
borland\\delphi\\source\\vcl中的源码
会学到不少东西
以上就是关于VB中messagebox的问题全部的内容,包括:VB中messagebox的问题、VS2010 的问题 MFC 中 MessageBox()用法、C语言。。messagebox用法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)