#region Imports using DPumpHydr.WinFrmUI.RLT.Controls; using DPumpHydr.WinFrmUI.RLT.Enum.Crown; using DPumpHydr.WinFrmUI.RLT.Forms; using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; #endregion namespace DPumpHydr.WinFrmUI.RLT.Child.Crown { #region CrownDialogChild public partial class CrownDialog : CrownForm { #region Field Region private DialogButton _dialogButtons = DialogButton.Ok; private readonly List _buttons; #endregion #region Button Region protected CrownButton btnOk; protected CrownButton btnCancel; protected CrownButton btnClose; protected CrownButton btnYes; protected CrownButton btnNo; protected CrownButton btnAbort; protected CrownButton btnRetry; protected CrownButton btnIgnore; #endregion #region Property Region [Description("Determines the type of the dialog window.")] [DefaultValue(DialogButton.Ok)] public DialogButton DialogButtons { get => _dialogButtons; set { if (_dialogButtons == value) { return; } _dialogButtons = value; SetButtons(); } } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int TotalButtonSize { get; private set; } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public new IButtonControl AcceptButton { get => base.AcceptButton; private set => base.AcceptButton = value; } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public new IButtonControl CancelButton { get => base.CancelButton; private set => base.CancelButton = value; } #endregion #region Constructor Region public CrownDialog() { InitializeComponent(); _buttons = new List { btnAbort, btnRetry, btnIgnore, btnOk, btnCancel, btnClose, btnYes, btnNo }; } #endregion #region Event Handler Region protected override void OnLoad(EventArgs e) { base.OnLoad(e); SetButtons(); } #endregion #region Method Region private void SetButtons() { foreach (CrownButton btn in _buttons) { btn.Visible = false; } switch (_dialogButtons) { case DialogButton.Ok: ShowButton(btnOk, true); AcceptButton = btnOk; break; case DialogButton.Close: ShowButton(btnClose, true); AcceptButton = btnClose; CancelButton = btnClose; break; case DialogButton.OkCancel: ShowButton(btnOk); ShowButton(btnCancel, true); AcceptButton = btnOk; CancelButton = btnCancel; break; case DialogButton.AbortRetryIgnore: ShowButton(btnAbort); ShowButton(btnRetry); ShowButton(btnIgnore, true); AcceptButton = btnAbort; CancelButton = btnIgnore; break; case DialogButton.RetryCancel: ShowButton(btnRetry); ShowButton(btnCancel, true); AcceptButton = btnRetry; CancelButton = btnCancel; break; case DialogButton.YesNo: ShowButton(btnYes); ShowButton(btnNo, true); AcceptButton = btnYes; CancelButton = btnNo; break; case DialogButton.YesNoCancel: ShowButton(btnYes); ShowButton(btnNo); ShowButton(btnCancel, true); AcceptButton = btnYes; CancelButton = btnCancel; break; } SetFlowSize(); } private static void ShowButton(CrownButton button, bool isLast = false) { button.SendToBack(); if (!isLast) { button.Margin = new Padding(0, 0, 10, 0); } button.Visible = true; } private void SetFlowSize() { int width = flowInner.Padding.Horizontal; foreach (CrownButton btn in _buttons) { if (btn.Visible) { width += btn.Width + btn.Margin.Right; } } flowInner.Width = width; TotalButtonSize = width; } #endregion } #endregion }