/// <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(ExMessageBox 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; } }
/// <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> private static void SetDialogSizes(ExMessageBox flexibleMessageBoxForm, string text) { // Set maximum dialog size var maxFormSize = new Size( Convert.ToInt32(SystemInformation.WorkingArea.Width * GetCorrectedWorkingAreaFactor(MaxWidthRatio)), Convert.ToInt32(SystemInformation.WorkingArea.Height * GetCorrectedWorkingAreaFactor(MaxHeightRatio))); var borderSize = SystemInformation.BorderSize; var borderWidth = 2 * borderSize.Width; var borderHeight = 2 * borderSize.Height; var contentPadding = flexibleMessageBoxForm.contentPanel.Padding; var contentPaddingX = contentPadding.Left + contentPadding.Right; var contentPaddingY = contentPadding.Top + contentPadding.Bottom; var maxTxtSize = new Size(maxFormSize.Width - borderWidth - contentPaddingX, maxFormSize.Height - borderHeight - contentPaddingY); // Calculate dialog start size: Try to auto-size width to show longest text row var stringSize = TextRenderer.MeasureText( text, flexibleMessageBoxForm.richTextBoxMessage.Font, maxTxtSize, TextFormatFlags.WordBreak | TextFormatFlags.TextBoxControl); // Set dialog start size var mainContentHeight = stringSize.Height + contentPaddingY; var mainContentWidth = stringSize.Width + contentPaddingX; var formWidth = mainContentWidth + borderWidth; var formHeight = mainContentHeight + flexibleMessageBoxForm.buttonPanel.Height + borderHeight; var icon = flexibleMessageBoxForm.pictureBoxForIcon; if (icon.Image == null) { icon.Padding = Padding.Empty; } else { icon.Padding = new Padding(0, 0, 10, 0); formWidth += icon.Width; } flexibleMessageBoxForm.ClientSize = new Size(formWidth, formHeight); if (flexibleMessageBoxForm.Width > maxFormSize.Width) { flexibleMessageBoxForm.Width = maxFormSize.Width; } if (flexibleMessageBoxForm.Height > maxFormSize.Height) { flexibleMessageBoxForm.Height = maxFormSize.Height; } flexibleMessageBoxForm.MaximumSize = flexibleMessageBoxForm.Size; }
/// <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(ExMessageBox 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(ButtonType.Abort); flexibleMessageBoxForm.button1.DialogResult = DialogResult.Abort; flexibleMessageBoxForm.button2.Visible = true; flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonType.Retry); flexibleMessageBoxForm.button2.DialogResult = DialogResult.Retry; flexibleMessageBoxForm.button3.Visible = true; flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonType.Ignore); flexibleMessageBoxForm.button3.DialogResult = DialogResult.Ignore; break; case MessageBoxButtons.OKCancel: flexibleMessageBoxForm._visibleButtonsCount = 2; flexibleMessageBoxForm.button2.Visible = true; flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonType.OK); flexibleMessageBoxForm.button2.DialogResult = DialogResult.OK; flexibleMessageBoxForm.button3.Visible = true; flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonType.Cancel); flexibleMessageBoxForm.button3.DialogResult = DialogResult.Cancel; break; case MessageBoxButtons.RetryCancel: flexibleMessageBoxForm._visibleButtonsCount = 2; flexibleMessageBoxForm.button2.Visible = true; flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonType.Retry); flexibleMessageBoxForm.button2.DialogResult = DialogResult.Retry; flexibleMessageBoxForm.button3.Visible = true; flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonType.Cancel); flexibleMessageBoxForm.button3.DialogResult = DialogResult.Cancel; break; case MessageBoxButtons.YesNo: flexibleMessageBoxForm._visibleButtonsCount = 2; flexibleMessageBoxForm.button2.Visible = true; flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonType.Yes); flexibleMessageBoxForm.button2.DialogResult = DialogResult.Yes; flexibleMessageBoxForm.button3.Visible = true; flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonType.No); flexibleMessageBoxForm.button3.DialogResult = DialogResult.No; break; case MessageBoxButtons.YesNoCancel: flexibleMessageBoxForm._visibleButtonsCount = 3; flexibleMessageBoxForm.button1.Visible = true; flexibleMessageBoxForm.button1.Text = flexibleMessageBoxForm.GetButtonText(ButtonType.Yes); flexibleMessageBoxForm.button1.DialogResult = DialogResult.Yes; flexibleMessageBoxForm.button2.Visible = true; flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonType.No); flexibleMessageBoxForm.button2.DialogResult = DialogResult.No; flexibleMessageBoxForm.button3.Visible = true; flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonType.Cancel); flexibleMessageBoxForm.button3.DialogResult = DialogResult.Cancel; break; case MessageBoxButtons.OK: default: flexibleMessageBoxForm._visibleButtonsCount = 1; flexibleMessageBoxForm.button3.Visible = true; flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonType.OK); flexibleMessageBoxForm.button3.DialogResult = DialogResult.OK; break; } // Set default button (used in FlexibleMessageBoxForm_Shown) flexibleMessageBoxForm._defaultButton = defaultButton; }
/// <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(ExMessageBox flexibleMessageBoxForm, MessageBoxIcon icon) { Icon targetIcon = null; switch (icon) { case MessageBoxIcon.Information: targetIcon = SystemIcons.Information; break; case MessageBoxIcon.Warning: targetIcon = SystemIcons.Warning; break; case MessageBoxIcon.Error: targetIcon = SystemIcons.Error; break; case MessageBoxIcon.Question: targetIcon = SystemIcons.Question; 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; } flexibleMessageBoxForm.pictureBoxForIcon.Image = targetIcon.ToBitmap(); }
/// <summary> /// The show. /// </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> /// <param name="translation"> /// The translation. /// </param> /// <returns> /// The <see cref="DialogResult"/>. /// </returns> public static DialogResult Show( IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, Dictionary<ButtonType, string> translation) { // Create a new instance of the FlexibleMessageBox form using (var flexibleMessageBoxForm = new ExMessageBox()) { // Set the font for all controls flexibleMessageBoxForm.Font = DialogFont; // Bind the caption and the message text flexibleMessageBoxForm.CaptionText = caption; flexibleMessageBoxForm.MessageText = text; flexibleMessageBoxForm.FlexibleMessageBoxFormBindingSource.DataSource = flexibleMessageBoxForm; if (translation != null && translation.Count > 0) { flexibleMessageBoxForm.SetTranslation(translation); } // 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); flexibleMessageBoxForm.richTextBoxMessage.Font = DialogFont; // Calculate the dialogs start size (Try to auto-size width to show longest text row). Also set the maximum dialog size. SetDialogSizes(flexibleMessageBoxForm, text); // 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); } }