Передать форму другому классу и извлечь элементы управления и свойства - PullRequest
0 голосов
/ 08 декабря 2018

Это более общий вопрос, чем проблема, с которой я столкнулся.У меня есть форма с более чем 30 элементами управления, которые я буду использовать для заполнения модели, которая в итоге окажется в базе данных.

Мне было интересно, однако, мог бы я просто передать весь объект формы другому классу и вытащить содержимое другого класса, не настраивая целую кучу методов получения и установки.

Допустим, у меня есть форма Form1, и я делаю этот вызов:

OtherClass.Validate(this)

Затем в OtherClass (который находится в другом проекте в том же решении) у меня есть:

public static void Validate(Form1 myForm)

Я немного поиграл с этим.В методе Validate (), если я помещаю часы в myForm, я могу видеть все элементы управления и свойства формы, но я не знаю, есть ли способ просто вытащить их.Если я наберу myForm., intellisense покажет мне все стандартные методы и свойства формы, но не элементы управления и свойства, специфичные для формы.Кто-нибудь пробовал это успешно?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Каждый элемент управления в форме имеет свойство, называемое «Модификаторы»:

Modifiers

По умолчанию это «Приватный» (по причине: пользовательский интерфейсявляется наиболее вероятным объектом для изменений, любая логика вне формы не должна зависеть от элементов управления. Один элемент управления может быть заменен другим, группа элементов управления может быть заменена пользовательским элементом управления. Когда элементы управления являются общедоступными, такое изменение не инкапсулируется ивызывает изменения во многих частях системы)

Элементы управления, которые добавляются в форму, сериализуются в код C # в файле form.designer.cs.Код для textBox1, когда он имеет модификатор Private:

private System.Windows.Forms.TextBox textBox1;

Измените его на Public, как показано на скриншоте, и он станет

public System.Windows.Forms.TextBox textBox1;

Публичные элементы управления будут доступны, как и любые другиеоткрытые поля:

public static void Validate(Form1 myForm)
{
    if (String.IsNullOrEmpty(myForm.textBox1.text))
    {
        // do smth about empty field
    }
}
0 голосов
/ 08 декабря 2018

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

myForm.Controls

Это дает вам набор элементов управления в форме.Вы можете перебирать их с помощью цикла foreach.

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

public static void Validate(Form1 myForm)
{
    foreach (Control control in myForm.Controls)
    {
        string text = control.Text;
        Console.WriteLine(text);
    }
}

При запуске вышеуказанной функции на консоль выводится следующее. (Используя эту форму)

button2

button1

Этот метод работает и для TextBox и других элементов управления.Тем не менее, это может быть сложнее, если у вас есть элементы управления внутри элементов управления.Вы можете решить это с помощью рекурсивной функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...