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