Lupu5R3x Ответов: 1

Пользовательское окно сообщения с флажком, получить состояние флажка


Привет Я создаю пользовательское окно сообщений в winforms с флажком, но я не уверен, как я получаю состояние флажка, когда пользователь закрывает форму.

Я использую это для вызова MsgBox:
public static MsgBoxResult Show(string message, string caption, MsgBoxButtons msgBoxButtons, MsgBoxIcon icon, MsgBoxDefaultButton defaultButton, 
            MsgBoxCheckBox donotshowagain)
        {
            return new MsgBoxForm(message, caption, msgBoxButtons, icon, defaultButton, donotshowagain).Show();
        }


Где donnotshowagain-это параметр checkbox, я создал перечисление MsgBoxCheckBox, которое содержит:
[Flags]
    public enum MsgBoxCheckBox
    {
        /// <summary>
        /// Show the check box.
        /// </summary>
        Show = 1,
        /// <summary>
        /// Hides the check box (default)
        /// </summary>
        Hide = 0,
        /// <summary>
        /// Show as checked.
        /// </summary>
        Checked = 2,
    }


Я надеюсь, что кто-то может указать мне правильное направление с этим.

Я добавил свой код в Git, забыв, что с pastbin перечисления не были включены.
Кроме того, я закончил свой код, так что теперь он должен быть пригоден для использования, также с состоянием флажка.
Код: GitHub - Lupu5R3x/MsgBox: Пользовательское окно сообщений[^]
/LR

Что я уже пробовал:

Искал ответы в интернете, также я посмотрел на код из других пользовательских окон сообщений, которые имеют флажок - но единственный, который я нашел, который использует "show class", который вызывает класс формы, - это InformationBox, и там используется ключевое слово out:
public static InformationBoxResult Show(string text, out CheckState checkBoxState, params object[] parameters)
        {
            return new InformationBoxForm(text, parameters).Show(out checkBoxState);
        }

Но код сам по себе слишком сложен для такого новичка, как я, чтобы разобраться в нем.
Я действительно пытался добавить out в свой собственный код, но получил кучу ошибок.

Richard MacCutchan

То, как вы это называете, весь контекст теряется после возвращения. Вы должны создать экземпляр формы, вызвать Show, или еще лучше, ShowDialog. Когда он возвращается, у вас все еще есть объект экземпляра, поэтому вы можете проверить состояние флажка, который является свойством формы.

Lupu5R3x

В моем коде формы я действительно вызываю ShowDialog (возможно, мне следовало бы добавить эту информацию :()

В моем коде формы у меня есть внутреннее новое шоу MsgBoxResult()
{
Сетиконы();
SetButtons();
Метод setsize();
SetButtonsLayout();
Наборы();
SetOrder();
PlaySound();
SetCheckBox();
Выбирает();
Метод showdialog();
возвращаемый результат;
}

1 Ответов

Рейтинг:
4

Lupu5R3x

Перечитав код informationbox, я понял, как получить состояние моего флажка.

Мне пришлось создать новый MsgBoxResult без ключевого слова new и добавить параметр out к этому шоу.
Так что в итоге я получил вот это:

internal MsgBoxResult Show(out CheckState state)
       {
           Result = Show();
           state = chkDoNotShowAgain.CheckState;
           return Result;
       }

А в звонящем:
public static MsgBoxResult Show(string message, string caption, MsgBoxButtons msgBoxButtons, MsgBoxIcon icon, MsgBoxDefaultButton defaultButton,
           MsgBoxCheckBox doNotShowAgain, out System.Windows.Forms.CheckState checkBoxState)
       {
           return new MsgBoxForm(message, caption, msgBoxButtons, icon, defaultButton, doNotShowAgain).Show(out checkBoxState);
       }


Тогда я могу позвонить в свой MsgBox вот так:
CheckState doNotShowAgain = CheckState.Indeterminate;
            MsgBoxResult result = MsgBox.Show("Message", "Caption", MsgBoxButtons.OK, MsgBoxIcon.None, MsgBoxDefaultButton.Button1, MsgBoxCheckBox.Show, out doNotShowAgain);


Richard MacCutchan

Именно это я и сказал в своем комментарии.