C# MessageBox 中的粗体文本
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2259027/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Bold text in MessageBox
提问by Karthick
How can I show the text in bold in the dialog displayed by MessageBox.Show
, using C#?
如何MessageBox.Show
使用 C#在 显示的对话框中以粗体显示文本?
回答by bmargulies
No can do. You'll have to build your own box. I'm assuming that this is WinForms, if it's ASP.NET I'm not qualified to answer.
没有办法。你必须建立自己的盒子。我假设这是 WinForms,如果是 ASP.NET,我没有资格回答。
回答by Amirshk
You can't. This is a wrapper for the API MessageBoxEx.
你不能。这是 API MessageBoxEx的包装器。
Create your own custom messagebox to do it.
创建您自己的自定义消息框来做到这一点。
You can follow thistutorial, as an example of how to implement one.
您可以按照本教程作为如何实施的示例。
The basics steps of creating such a form:
创建此类表单的基本步骤:
- Create a new form
- Add a label and two buttons
- Set the label font to Bold
- add handler to both buttons, closing the form and setting some property for which button was pressed.
- 创建一个新表单
- 添加一个标签和两个按钮
- 将标签字体设置为粗体
- 为两个按钮添加处理程序,关闭表单并设置按下按钮的一些属性。
回答by Hans Passant
It is possible, a message box is a regular window that can be messed with like any other. The code to do so is however a bit gritty. Add a new class to your project and paste this code:
有可能,消息框是一个常规窗口,可以像其他任何窗口一样被弄乱。然而,这样做的代码有点粗糙。向您的项目添加一个新类并粘贴以下代码:
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 <hWnd> 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);
}
And use it like this:
并像这样使用它:
private void button1_Click(object sender, EventArgs e) {
using (new BoldMessageBox(this)) {
MessageBox.Show("Nobugz waz here");
}
}
There is one flaw in this approach. After making the font bold, the text must still fit in the static control that the message box reserved for the text. That required me to make the font smaller. You may have to tweak this value.
这种方法有一个缺陷。将字体加粗后,文本必须仍然适合消息框为文本保留的静态控件。这需要我把字体变小。您可能需要调整此值。
回答by Anatoliy Mogylevets
Extended MessageBox .NET AssemblyXMSG .NET web page: more info, download
扩展 MessageBox .NET 程序集XMSG .NET 网页:更多信息,下载
Adjusts on the fly wide variety of MessageBox visual settings.
即时调整各种 MessageBox 视觉设置。
Adjustable features include message font and color, button captions, fonts and tooltips, dialog background, dialog position, dialog icon, timeout and more. Depending on message font selected, the dialog window automatically resizes itself to accommodate the message.
可调整的功能包括消息字体和颜色、按钮标题、字体和工具提示、对话背景、对话位置、对话图标、超时等。根据选择的消息字体,对话窗口会自动调整大小以适应消息。
Additional controls that can be optionally displayed: check box, text input, web link, up to 3 extra buttons.
可以选择显示的附加控件:复选框、文本输入、Web 链接、最多 3 个额外按钮。
In your .NET code you still call regular MessageBox.Show. Extended MessageBox is not a custom-made dialog. This is still regular MessageBox with extended features added.
在您的 .NET 代码中,您仍然调用常规 MessageBox.Show。扩展 MessageBox 不是定制的对话框。这仍然是添加了扩展功能的常规 MessageBox。
OS supported: XP, 2000, 2003, 2008 Vista, Win7 -- 32 or 64-bit.
支持的操作系统:XP、2000、2003、2008 Vista、Win7 -- 32 或 64 位。
Downloads include fully-functional trial version, and regular version with complete C# source code.
下载包括全功能试用版和带有完整 C# 源代码的普通版。