Полужирный текст в MessageBox

Как я могу показать текст полужирным в диалоговом окне, отображенном MessageBox.Show, использование C#?

26
задан FishBasketGordo 2 April 2012 в 17:31
поделиться

4 ответа

Вы не можете. Это оболочка для API MessageBoxEx .

Создайте для этого свой собственный ящик сообщений.


Вы можете следовать этому учебному пособию в качестве примера того, как его реализовать.

Основные шаги создания такой формы:

  1. Создать новую форму
  2. Добавить метку и две кнопки
  3. Установить шрифт метки полужирным
  4. добавить обработчик для обеих кнопок, закрыть форму и установка некоторого свойства, для которого была нажата кнопка.
5
ответ дан 28 November 2019 в 07:36
поделиться

Возможно, окно сообщения - это обычное окно, с которым можно работать, как с любым другим. Однако код для этого немного грубоват. Добавьте новый класс в свой проект и вставьте этот код:

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");
  }
}

В этом подходе есть один недостаток. После выделения полужирного шрифта текст должен по-прежнему соответствовать статическому элементу управления, зарезервированному в окне сообщения для текста. Это потребовало от меня уменьшить шрифт. Возможно, вам придется изменить это значение.

30
ответ дан 28 November 2019 в 07:36
поделиться

Не получается. Вам придется создать свою собственную коробку. Я предполагаю, что это WinForms, если это ASP.NET, то я не компетентен ответить.

0
ответ дан 28 November 2019 в 07:36
поделиться

Расширенная сборка MessageBox .NET Веб-страница XMSG .NET: дополнительная информация, загрузка

Регулирует "на лету" широкий спектр визуальных параметров MessageBox.

Настраиваемые функции включают шрифт и цвет сообщения, заголовки кнопок, шрифты и всплывающие подсказки, фон диалогового окна, положение диалогового окна, значок диалогового окна, тайм-аут и многое другое. В зависимости от выбранного шрифта сообщения размер диалогового окна автоматически изменяется в соответствии с сообщением.

Дополнительные элементы управления, которые могут быть отображены по желанию: флажок, ввод текста, веб-ссылка, до 3 дополнительных кнопок.

В вашем .NET-коде вы по-прежнему вызываете обычный MessageBox.Show. Extended MessageBox не является настраиваемым диалоговым окном. Это все еще обычный MessageBox с добавленными расширенными функциями.

Поддерживаемые ОС: XP, 2000, 2003, 2008 Vista, Win7 - 32 или 64-битные.

Загрузки включают полнофункциональную пробную версию и обычную версию с полным исходным кодом C #.

0
ответ дан 28 November 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: