Как отобразить текст полужирным шрифтом в диалоговом окне, отображаемом MessageBox.Show
, используя С#?
Жирный текст в MessageBox
Ответ 1
Возможно, окно сообщения - это обычное окно, которое можно испортить, как и любое другое. Код для этого, однако, немного грубый. Добавьте новый класс в проект и вставьте этот код:
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);
}
И используйте его следующим образом:
private void button1_Click(object sender, EventArgs e) {
using (new BoldMessageBox(this)) {
MessageBox.Show("Nobugz waz here");
}
}
В этом подходе есть один недостаток. Сделав шрифт полужирным шрифтом, текст должен по-прежнему соответствовать статическому элементу управления, который зарезервировано для текста в текстовом поле. Это потребовало от меня уменьшить шрифт. Возможно, вам придется настроить это значение.
Ответ 2
Вы не можете. Это оболочка для API MessageBoxEx.
Создайте свой собственный почтовый ящик, чтобы сделать это.
Вы можете следовать этому учебнику, как пример того, как его реализовать.
Основные этапы создания такой формы:
- Создать новую форму
- Добавьте метку и две кнопки
- Установите шрифт ярлыка в Жирным шрифтом
- добавить обработчик для обеих кнопок, закрыть форму и установить какое-либо свойство, для которого была нажата кнопка.
Ответ 3
Нет. Вам нужно будет создать свою собственную коробку. Я предполагаю, что это WinForms, если это ASP.NET, я не могу ответить.
Ответ 4
Расширенная сборка MessageBox.NET Веб-страница XMSG.NET: дополнительная информация, загрузка
Настроить на лету широкий спектр визуальных настроек MessageBox.
Регулируемые функции включают шрифт и цвет сообщения, титры кнопок, шрифты и всплывающие подсказки, диалоговый фон, положение диалога, значок диалога, тайм-аут и многое другое. В зависимости от выбранного шрифта сообщения диалоговое окно автоматически изменяет размеры для размещения сообщения.
Дополнительные элементы управления, которые могут быть дополнительно отображены: флажок, ввод текста, веб-ссылка, до 3 дополнительных кнопок.
В вашем коде .NET вы все равно вызываете обычный MessageBox.Show. Расширенный MessageBox не является настраиваемым диалогом. Это еще обычный MessageBox с добавленными расширенными функциями.
Поддерживаемые ОС: XP, 2000, 2003, 2008 Vista, Win7 - 32 или 64-разрядные.
Загрузки включают полнофункциональную пробную версию и обычную версию с полным исходным кодом на С#.