VB中messagebox的问题

VB中messagebox的问题,第1张

如果是你自己用窗体做的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用法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10141164.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存