MessageBox中的粗体文本

如何使用C#在MessageBox.Show显示的对话框中以粗体显示文本?

有可能,消息框是一个常规窗口,可以像任何其他窗口一样混乱。 但是,这样做的代码有点粗糙。 在项目中添加一个新类并粘贴以下代码:

 using System; using System.Text; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; class BoldMessageBox : IDisposable { private int mTries = 0; private Form mOwner; private Font mFont; public BoldMessageBox(Form owner) { mOwner = owner; owner.BeginInvoke(new MethodInvoker(findDialog)); } private void findDialog() { // Enumerate windows to find the message box if (mTries < 0) return; EnumThreadWndProc callback = new EnumThreadWndProc(checkWindow); if (EnumThreadWindows(GetCurrentThreadId(), callback, IntPtr.Zero)) { if (++mTries < 10) mOwner.BeginInvoke(new MethodInvoker(findDialog)); } } private bool checkWindow(IntPtr hWnd, IntPtr lp) { // Checks if  is a dialog StringBuilder sb = new StringBuilder(260); GetClassName(hWnd, sb, sb.Capacity); if (sb.ToString() != "#32770") return true; // Got it, get the STATIC control that displays the text IntPtr hText = GetDlgItem(hWnd, 0xffff); if (hText != IntPtr.Zero) { // Get the current font IntPtr hFont = SendMessage(hText, WM_GETFONT, IntPtr.Zero, IntPtr.Zero); Font font = Font.FromHfont(hFont); // And make it bold (note the size change to keep enough space!!) mFont = new Font(font.FontFamily, font.SizeInPoints - 1f, FontStyle.Bold); SendMessage(hText, WM_SETFONT, mFont.ToHfont(), (IntPtr)1); } // Done return false; } public void Dispose() { mTries = -1; mOwner = null; if (mFont != null) mFont.Dispose(); } // P/Invoke declarations private const int WM_SETFONT = 0x30; private const int WM_GETFONT = 0x31; private delegate bool EnumThreadWndProc(IntPtr hWnd, IntPtr lp); [DllImport("user32.dll")] private static extern bool EnumThreadWindows(int tid, EnumThreadWndProc callback, IntPtr lp); [DllImport("kernel32.dll")] private static extern int GetCurrentThreadId(); [DllImport("user32.dll")] private static extern int GetClassName(IntPtr hWnd, StringBuilder buffer, int buflen); [DllImport("user32.dll")] private static extern IntPtr GetDlgItem(IntPtr hWnd, int item); [DllImport("user32.dll")] private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); } 

并像这样使用它:

 private void button1_Click(object sender, EventArgs e) { using (new BoldMessageBox(this)) { MessageBox.Show("Nobugz waz here"); } } 

这种方法存在一个缺陷。 使字体变为粗体后,文本仍必须适合为文本保留的消息框的静态控件。 这要求我让字体变小。 您可能需要调整此值。

你不能。 这是API MessageBoxEx的包装器。

创建自己的自定义消息框来执行此操作。


您可以按照本教程,作为如何实现一个示例。

创建此类表单的基本步骤:

  1. 创建一个新表单
  2. 添加标签和两个按钮
  3. 将标签字体设置为粗体
  4. 向两个按钮添加处理程序,关闭表单并设置按下按钮的属性。

没有办法。 你必须建立自己的盒子。 我假设这是WinForms,如果是ASP.NET,我没有资格回答。

扩展的MessageBox .NET程序集 XMSG .NET网页:更多信息,下载

快速调整各种MessageBox视觉设置。

可调节function包括消息字体和颜色,按钮标题,字体和工具提示,对话框背景,对话框位置,对话框图标,超时等。 根据所选的消息字体,对话框窗口会自动调整其大小以适应消息。

可选择显示的附加控件:复选框,文本输入,Web链接,最多3个额外按钮。

在您的.NET代码中,您仍然调用常规的MessageBox.Show。 扩展MessageBox不是自定义对话框。 这仍然是常规MessageBox,添加了扩展function。

操作系统支持:XP,2000,2003,2008 Vista,Win7 – 32或64位。

下载包括全function试用版和带有完整C#源代码的常规版。