Можно ли добавить элементы управления в C# MessageBox?


Можно ли добавить некоторые пользовательские элементы управления в стандартное окно сообщения для чтения входного значения, например текстовые поля для имени пользователя и пароля,или мне следует создать пользовательскую winform с кнопками "Ok, Отмена" и текстовыми полями?

Related: какой элемент управления использовать для быстрого ввода текста (inputbox)?

4 4

4 ответа:

Создайте свой собственный.

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

public class ValueHolder {
    public string SomeInput { get; set; }
    public DialogResult Result { get; set; }
}

public class GimmeValues : Form {
    //... HAS A TEXTBOX and Okay Buttons...

    private GimmeValues() {        
        okButton.DialogResult = DialogResult.OK;
        cancelButton.DialogResult = DialogResult.Cancel;
        // ... other stuff
    }

    public static ValueHolder GetInput(IWin32Window owner) {
        using (GimmeValues values = new GimmeValues()) {
            DialogResult result = values.ShowDialog(owner);
            return new ValueHolder { 
                SomeInput = values.Textbox1.Text,
                Result = result
            };
        }
    }
}

Ладно я только что написал, что все в этом редакторе так что простите любые синтаксические ошибки.
Вы можете сделать что-то вроде вышеприведенного, но немного очистить его, добавить необходимую вам расширяемость (с точки зрения кнопок и входов, показывающих, что вам нужно и т. д.)... тогда просто назовите его ValueHolder value = GimmeValues.GetInput(this);, где this будет представлять собой IWin32Window...

Результирующее значение value будет выбранным нонсенсом, и вы сможете выполнить свою логику..

if(value.Result == DialogResult.OK && !string.IsNullOrEmpty(value.SomeInput)){
    //TODO: Place logic....
}

Вы можете использовать Interaction.InputBox метод, который находится в Microsoft.VisualBasic пространство имен

Попробуйте это

 Microsoft.VisualBasic.Interaction.InputBox("Enter a Value Here", "Title", "Your Default Text",200,100);

Для этого вам потребуется создать пользовательскую WinForm. Вы можете заставить его работать так же, как MessageBox, возвращая DialogResult в методе Show.

Вам придется создать пользовательскую форму, чтобы справиться с этим.

Если вы хотите, чтобы форма вела себя как MessageBox, просто создайте статический метод Show() в форме, который создает экземпляр и показывает поле пользователю. Этот статический метод также может обрабатывать возврат интересующих вас значений из пользовательской формы (например, DialogResult).