示例#1
0
        /// <summary>
        /// Shows the specified message box.
        /// </summary>
        /// <param name="owner">The owner.</param>
        /// <param name="text">The text.</param>
        /// <param name="caption">The caption.</param>
        /// <param name="buttons">The buttons.</param>
        /// <param name="icon">The icon.</param>
        /// <param name="defaultButton">The default button.</param>
        /// <returns>The dialog result.</returns>
        public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton)
        {
            //Create a new instance of the FlexibleMessageBox form
            var flexibleMessageBoxForm = new FlexibleMessageBoxForm();

            flexibleMessageBoxForm.ShowInTaskbar = false;

            //Bind the caption and the message text
            flexibleMessageBoxForm.CaptionText = caption;
            flexibleMessageBoxForm.MessageText = text;
            flexibleMessageBoxForm.FlexibleMessageBoxFormBindingSource.DataSource = flexibleMessageBoxForm;

            //Set the buttons visibilities and texts. Also set a default button.
            SetDialogButtons(flexibleMessageBoxForm, buttons, defaultButton);

            //Set the dialogs icon. When no icon is used: Correct placement and width of rich text box.
            SetDialogIcon(flexibleMessageBoxForm, icon);

            //Set the font for all controls
            flexibleMessageBoxForm.Font = FONT;
            flexibleMessageBoxForm.richTextBoxMessage.Font = FONT;

            //Calculate the dialogs start size (Try to auto-size width to show longest text row). Also set the maximum dialog size.
            SetDialogSizes(flexibleMessageBoxForm, text, caption);

            //Set the dialogs start position when given. Otherwise center the dialog on the current screen.
            SetDialogStartPosition(flexibleMessageBoxForm, owner);

            //Show the dialog
            return(flexibleMessageBoxForm.ShowDialog(owner));
        }
示例#2
0
        /// <summary>
        /// Calculate the dialogs start size (Try to auto-size width to show longest text row).
        /// Also set the maximum dialog size.
        /// </summary>
        /// <param name="flexibleMessageBoxForm">The FlexibleMessageBox dialog.</param>
        /// <param name="text">The text (the longest text row is used to calculate the dialog width).</param>
        /// <param name="text">The caption (this can also affect the dialog width).</param>
        private static void SetDialogSizes(FlexibleMessageBoxForm flexibleMessageBoxForm, string text, string caption)
        {
            //First set the bounds for the maximum dialog size
            flexibleMessageBoxForm.MaximumSize = new Size(Convert.ToInt32(SystemInformation.WorkingArea.Width * GetCorrectedWorkingAreaFactor(MAX_WIDTH_FACTOR)),
                                                          Convert.ToInt32(SystemInformation.WorkingArea.Height * GetCorrectedWorkingAreaFactor(MAX_HEIGHT_FACTOR)));

            //Get rows. Exit if there are no rows to render...
            var stringRows = GetStringRows(text);

            if (stringRows == null)
            {
                return;
            }

            //Calculate whole text height
            var textHeight = TextRenderer.MeasureText(text, FONT).Height;

            //Calculate width for longest text line
            const int SCROLLBAR_WIDTH_OFFSET = 15;
            var       longestTextRowWidth    = stringRows.Max(textForRow => TextRenderer.MeasureText(textForRow, FONT).Width);
            var       captionWidth           = TextRenderer.MeasureText(caption, SystemFonts.CaptionFont).Width;
            var       textWidth = Math.Max(longestTextRowWidth + SCROLLBAR_WIDTH_OFFSET, captionWidth);

            //Calculate margins
            var marginWidth  = flexibleMessageBoxForm.Width - flexibleMessageBoxForm.richTextBoxMessage.Width;
            var marginHeight = flexibleMessageBoxForm.Height - flexibleMessageBoxForm.richTextBoxMessage.Height;

            //Set calculated dialog size (if the calculated values exceed the maximums, they were cut by windows forms automatically)
            flexibleMessageBoxForm.Size = new Size(textWidth + marginWidth,
                                                   textHeight + marginHeight);
        }
示例#3
0
        /// <summary>
        /// Set the dialogs icon.
        /// When no icon is used: Correct placement and width of rich text box.
        /// </summary>
        /// <param name="flexibleMessageBoxForm">The FlexibleMessageBox dialog.</param>
        /// <param name="icon">The MessageBoxIcon.</param>
        private static void SetDialogIcon(FlexibleMessageBoxForm flexibleMessageBoxForm, MessageBoxIcon icon)
        {
            switch (icon)
            {
            case MessageBoxIcon.Information:
                flexibleMessageBoxForm.pictureBoxForIcon.Image = SystemIcons.Information.ToBitmap();
                break;

            case MessageBoxIcon.Warning:
                flexibleMessageBoxForm.pictureBoxForIcon.Image = SystemIcons.Warning.ToBitmap();
                break;

            case MessageBoxIcon.Error:
                flexibleMessageBoxForm.pictureBoxForIcon.Image = SystemIcons.Error.ToBitmap();
                break;

            case MessageBoxIcon.Question:
                flexibleMessageBoxForm.pictureBoxForIcon.Image = SystemIcons.Question.ToBitmap();
                break;

            default:
                //When no icon is used: Correct placement and width of rich text box.
                flexibleMessageBoxForm.pictureBoxForIcon.Visible = false;
                flexibleMessageBoxForm.richTextBoxMessage.Left  -= flexibleMessageBoxForm.pictureBoxForIcon.Width;
                flexibleMessageBoxForm.richTextBoxMessage.Width += flexibleMessageBoxForm.pictureBoxForIcon.Width;
                break;
            }
        }
示例#4
0
 /// <summary>
 /// Set the dialogs start position when given.
 /// Otherwise center the dialog on the current screen.
 /// </summary>
 /// <param name="flexibleMessageBoxForm">The FlexibleMessageBox dialog.</param>
 /// <param name="owner">The owner.</param>
 private static void SetDialogStartPosition(FlexibleMessageBoxForm flexibleMessageBoxForm, IWin32Window owner)
 {
     //If no owner given: Center on current screen
     if (owner == null)
     {
         var screen = Screen.FromPoint(Cursor.Position);
         flexibleMessageBoxForm.StartPosition = FormStartPosition.Manual;
         flexibleMessageBoxForm.Left          = screen.Bounds.Left + screen.Bounds.Width / 2 - flexibleMessageBoxForm.Width / 2;
         flexibleMessageBoxForm.Top           = screen.Bounds.Top + screen.Bounds.Height / 2 - flexibleMessageBoxForm.Height / 2;
     }
 }
示例#5
0
        /// <summary>
        /// Set dialog buttons visibilities and texts.
        /// Also set a default button.
        /// </summary>
        /// <param name="flexibleMessageBoxForm">The FlexibleMessageBox dialog.</param>
        /// <param name="buttons">The buttons.</param>
        /// <param name="defaultButton">The default button.</param>
        private static void SetDialogButtons(FlexibleMessageBoxForm flexibleMessageBoxForm, MessageBoxButtons buttons, MessageBoxDefaultButton defaultButton)
        {
            //Set the buttons visibilities and texts
            switch (buttons)
            {
            case MessageBoxButtons.AbortRetryIgnore:
                flexibleMessageBoxForm.visibleButtonsCount = 3;

                flexibleMessageBoxForm.button1.Visible      = true;
                flexibleMessageBoxForm.button1.Text         = flexibleMessageBoxForm.GetButtonText(ButtonID.ABORT);
                flexibleMessageBoxForm.button1.DialogResult = DialogResult.Abort;

                flexibleMessageBoxForm.button2.Visible      = true;
                flexibleMessageBoxForm.button2.Text         = flexibleMessageBoxForm.GetButtonText(ButtonID.RETRY);
                flexibleMessageBoxForm.button2.DialogResult = DialogResult.Retry;

                flexibleMessageBoxForm.button3.Visible      = true;
                flexibleMessageBoxForm.button3.Text         = flexibleMessageBoxForm.GetButtonText(ButtonID.IGNORE);
                flexibleMessageBoxForm.button3.DialogResult = DialogResult.Ignore;

                flexibleMessageBoxForm.ControlBox = false;
                break;

            case MessageBoxButtons.OKCancel:
                flexibleMessageBoxForm.visibleButtonsCount = 2;

                flexibleMessageBoxForm.button2.Visible      = true;
                flexibleMessageBoxForm.button2.Text         = flexibleMessageBoxForm.GetButtonText(ButtonID.OK);
                flexibleMessageBoxForm.button2.DialogResult = DialogResult.OK;

                flexibleMessageBoxForm.button3.Visible      = true;
                flexibleMessageBoxForm.button3.Text         = flexibleMessageBoxForm.GetButtonText(ButtonID.CANCEL);
                flexibleMessageBoxForm.button3.DialogResult = DialogResult.Cancel;

                flexibleMessageBoxForm.CancelButton = flexibleMessageBoxForm.button3;
                break;

            case MessageBoxButtons.RetryCancel:
                flexibleMessageBoxForm.visibleButtonsCount = 2;

                flexibleMessageBoxForm.button2.Visible      = true;
                flexibleMessageBoxForm.button2.Text         = flexibleMessageBoxForm.GetButtonText(ButtonID.RETRY);
                flexibleMessageBoxForm.button2.DialogResult = DialogResult.Retry;

                flexibleMessageBoxForm.button3.Visible      = true;
                flexibleMessageBoxForm.button3.Text         = flexibleMessageBoxForm.GetButtonText(ButtonID.CANCEL);
                flexibleMessageBoxForm.button3.DialogResult = DialogResult.Cancel;

                flexibleMessageBoxForm.CancelButton = flexibleMessageBoxForm.button3;
                break;

            case MessageBoxButtons.YesNo:
                flexibleMessageBoxForm.visibleButtonsCount = 2;

                flexibleMessageBoxForm.button2.Visible      = true;
                flexibleMessageBoxForm.button2.Text         = flexibleMessageBoxForm.GetButtonText(ButtonID.YES);
                flexibleMessageBoxForm.button2.DialogResult = DialogResult.Yes;

                flexibleMessageBoxForm.button3.Visible      = true;
                flexibleMessageBoxForm.button3.Text         = flexibleMessageBoxForm.GetButtonText(ButtonID.NO);
                flexibleMessageBoxForm.button3.DialogResult = DialogResult.No;

                flexibleMessageBoxForm.ControlBox = false;
                break;

            case MessageBoxButtons.YesNoCancel:
                flexibleMessageBoxForm.visibleButtonsCount = 3;

                flexibleMessageBoxForm.button1.Visible      = true;
                flexibleMessageBoxForm.button1.Text         = flexibleMessageBoxForm.GetButtonText(ButtonID.YES);
                flexibleMessageBoxForm.button1.DialogResult = DialogResult.Yes;

                flexibleMessageBoxForm.button2.Visible      = true;
                flexibleMessageBoxForm.button2.Text         = flexibleMessageBoxForm.GetButtonText(ButtonID.NO);
                flexibleMessageBoxForm.button2.DialogResult = DialogResult.No;

                flexibleMessageBoxForm.button3.Visible      = true;
                flexibleMessageBoxForm.button3.Text         = flexibleMessageBoxForm.GetButtonText(ButtonID.CANCEL);
                flexibleMessageBoxForm.button3.DialogResult = DialogResult.Cancel;

                flexibleMessageBoxForm.CancelButton = flexibleMessageBoxForm.button3;
                break;

            case MessageBoxButtons.OK:
            default:
                flexibleMessageBoxForm.visibleButtonsCount  = 1;
                flexibleMessageBoxForm.button3.Visible      = true;
                flexibleMessageBoxForm.button3.Text         = flexibleMessageBoxForm.GetButtonText(ButtonID.OK);
                flexibleMessageBoxForm.button3.DialogResult = DialogResult.OK;

                flexibleMessageBoxForm.CancelButton = flexibleMessageBoxForm.button3;
                break;
            }

            //Set default button (used in FlexibleMessageBoxForm_Shown)
            flexibleMessageBoxForm.defaultButton = defaultButton;
        }