Прокручиваемый MessageBox в C # - PullRequest
4 голосов
/ 13 января 2011

Я использую Addin в VS2008, C #, и мне нужно показывать сообщения (сообщения об ошибках и другие).

Я не знаю длины сообщений, и поэтому я хочу использовать Scrollable MessageBox.

Я нашел эту статью с 2007 года: Майк Голд 30 июля 2007 года

http://www.c -sharpcorner.com / UploadFile / mgold / ScrollableMessageBox07292007223713PM / ScrollableMessageBox.aspx

сейчас, в 2011 году какие-то еще хорошие компоненты ??Я хочу оценить несколько компонентов.

Обновление:

другой компонент, но более старый: MessageBoxExLib http://www.codeproject.com/KB/dialog/MessageBoxEx.aspx

Настраиваемое окно сообщения .NET Winforms.http://www.codeproject.com/KB/dialog/Custom_MessageBox.aspx

Ответы [ 3 ]

8 голосов
/ 25 февраля 2015

Возьмем это: FlexibleMessageBox - гибкая замена .NET MessageBox

Это проверенный класс, который полностью заменяет все ваши использования MessageBox.Show и позволяет вам получить больше возможностейв одном файле класса вы можете легко добавить в свой проект.

2 голосов
/ 13 января 2011

Я только что реализовал простую форму с прокручиваемым многострочным TextBox, когда мне нужно что-то похожее для отображения длинных отчетов о состоянии или исключений, обнаруженных приложением. При желании вы можете изменить границы и т. Д., Чтобы они больше походили на ярлык. Затем просто создайте новый и вызовите его метод ShowDialog или оберните его экземпляр в некоторый статический член, подобный MessageBox. Насколько я знаю, команда .NET не создала ничего более гибкого, чем MessageBox.

ИЗМЕНИТЬ ИЗ КОММЕНТАРИИ:

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

public class SimpleReportViewer : Form
{
    /// <summary>
    /// Initializes a new instance of the <see cref="SimpleReportViewer"/> class.
    /// </summary>
    //You can remove this constructor if you don't want to use the IDE forms designer to tweak its layout.
    public SimpleReportViewer()
    {
        InitializeComponent();
        if(!DesignMode) throw new InvalidOperationException("Default constructor is for designer use only. Use static methods instead.");
    }

    private SimpleReportViewer(string reportText)
    {
        InitializeComponent();
        txtReportContents.Text = reportText;
    }

    private SimpleReportViewer(string reportText, string reportTitle)
    {
        InitializeComponent();
        txtReportContents.Text = reportText;
        Text = "Report Viewer: {0}".FormatWith(reportTitle);
    }

    /// <summary>
    /// Shows a SimpleReportViewer with the specified text and title.
    /// </summary>
    /// <param name="reportText">The report text.</param>
    /// <param name="reportTitle">The report title.</param>
    public static void Show(string reportText, string reportTitle)
    {
        new SimpleReportViewer(reportText, reportTitle).Show();
    }

    /// <summary>
    /// Shows a SimpleReportViewer with the specified text, title, and parent form.
    /// </summary>
    /// <param name="reportText">The report text.</param>
    /// <param name="reportTitle">The report title.</param>
    /// <param name="owner">The owner.</param>
    public static void Show(string reportText, string reportTitle, Form owner)
    {
        new SimpleReportViewer(reportText, reportTitle).Show(owner);
    }

    /// <summary>
    /// Shows a SimpleReportViewer with the specified text, title, and parent form as a modal dialog that prevents focus transfer.
    /// </summary>
    /// <param name="reportText">The report text.</param>
    /// <param name="reportTitle">The report title.</param>
    /// <param name="owner">The owner.</param>
    public static void ShowDialog(string reportText, string reportTitle, Form owner)
    {
        new SimpleReportViewer(reportText, reportTitle).ShowDialog(owner);
    }

    /// <summary>
    /// Shows a SimpleReportViewer with the specified text and the default window title.
    /// </summary>
    /// <param name="reportText">The report text.</param>
    public static void Show(string reportText)
    {
        new SimpleReportViewer(reportText).Show();
    }

    /// <summary>
    /// Shows a SimpleReportViewer with the specified text, the default window title, and the specified parent form.
    /// </summary>
    /// <param name="reportText">The report text.</param>
    /// <param name="owner">The owner.</param>
    public static void Show(string reportText, Form owner)
    {
        new SimpleReportViewer(reportText).Show(owner);
    }

    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SimpleReportViewer));
        this.txtReportContents = new System.Windows.Forms.TextBox();
        this.SuspendLayout();
        // 
        // txtReportContents
        // 
        this.txtReportContents.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                                                                               | System.Windows.Forms.AnchorStyles.Left)
                                                                              | System.Windows.Forms.AnchorStyles.Right)));
        this.txtReportContents.Location = new System.Drawing.Point(13, 13);
        this.txtReportContents.Multiline = true;
        this.txtReportContents.Name = "txtReportContents";
        this.txtReportContents.ReadOnly = true;
        this.txtReportContents.ScrollBars = System.Windows.Forms.ScrollBars.Both;
        this.txtReportContents.Size = new System.Drawing.Size(383, 227);
        this.txtReportContents.TabIndex = 0;
        // 
        // SimpleReportViewer
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(408, 252);
        this.Controls.Add(this.txtReportContents);
        this.Icon = Properties.Resources.some_icon;
        this.Name = "SimpleReportViewer";
        this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
        this.Text = "Report Viewer";
        this.ResumeLayout(false);
        this.PerformLayout();

    }

    #endregion

    private TextBox txtReportContents;
}

Использование:

var message = GetSomeRidiculouslyLongMessage();
//assumes it's called from inside another Form
SimpleReportViewer.ShowDialog(message, "My Message", this);

Эта конкретная реализация также поддерживает отображение в виде обычного диалогового окна с использованием перегрузок метода Show ().

0 голосов
/ 08 октября 2017

Я искал прокручиваемое окно сообщения для WPF - и затем я обнаружил MaterialMessageBox, который является (на мой взгляд) приятной на вид альтернативой FlexibleMessageBox для WPF.Вы можете скачать его с GitHub здесь: https://github.com/denpalrius/Material-Message-Box или установить его как пакет nuget в Visual Studio (https://www.nuget.org/packages/MaterialMessageBox/).

. Единственная проблема, которую я обнаружил, заключалась в том, что вы не можете использовать ее извнеосновной поток, поэтому я решил вызвать основной поток и показать оттуда сообщение: mainWindow.Dispatcher.Invoke(() => MaterialMessageBox.Show("message text"));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...