Могу ли я добавить элементы управления в C # MessageBox? - PullRequest
4 голосов
/ 08 октября 2010

Могу ли я добавить какой-либо пользовательский элемент управления в стандартное окно сообщений для считывания входного значения, например, текстовые поля для имени пользователя и пароля, или мне следует создать пользовательскую форму win-файла с помощью кнопок «Ok, Cancel» и текстовых полей?

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

Ответы [ 4 ]

9 голосов
/ 08 октября 2010

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

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

 Microsoft.VisualBasic.Interaction.InputBox("Enter a Value Here", "Title", "Your Default Text",200,100);
4 голосов
/ 08 октября 2010

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

2 голосов
/ 08 октября 2010

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

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

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....
}
0 голосов
/ 08 октября 2010

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

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

...