Доступ к данным текстового поля MainForm в Visual C # - PullRequest
1 голос
/ 25 августа 2011

У меня есть форма с несколькими текстовыми полями.Я хочу создать класс (InputData) для сбора и хранения этих данных, но у меня нет доступа к txtBox.Text.Я вижу некоторые точки, в которых меня блокируют.то есть объявления частного текстового поля в классе MainForm и т. д. MainForm.Designer содержит предупреждение:

Required method for Designer support - do not modify
the contents of this method with the code editor.

Так что я не могу изменить уровни доступа к текстовым полям здесь.Другой блок может заключаться в том, что для создания Mainform должен использоваться метод InitializeComponent() в MainForm, и поэтому текстовые поля еще не существуют.

Решение, которое я имел в виду, включает в себя конструктор InputData, извлекающий значения из текстовых полей.и внутреннее хранение.

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

Спасибо за любые предложенные решения!

Ответы [ 4 ]

3 голосов
/ 25 августа 2011

Стандартный шаблон, который я использую для приложений WinForm, заключается в создании модели данных диалога (так я ее называю - я не , предполагая, что я ее изобрел или что-то в этом роде). Этот класс содержит все данные, которые будут установлены или извлечены из формы. Каждая форма предоставляет метод с последовательным именем SetXXXData и GetXXXData , который заполняет модель или форму:

struct InputData
{
  string Text;
}

и затем в вашей форме:

void MyForm::SetInputData(InputData data)
{
   myControl.Text = data.Text;
}

void MyForm::GetInputData(InputData data)
{
   data.Text = myControl.Text;
}

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

2 голосов
/ 25 августа 2011

К вашему сведению, вы можете изменить уровень доступа элемента, изменив свойство "Модификаторы" в конструкторе.У него есть опции для публичных, защищенных, приватных и т. Д ...

Хостинг imgur.com

2 голосов
/ 25 августа 2011

Как насчет предоставления значений текстового поля в качестве свойств MainForm?Таким образом, вы можете получить к ним доступ из любого другого класса, который имеет доступ к MainForm.Как это:

public string TextBoxText
{
    get
    {
        return textBox.Text;
    }
}
0 голосов
/ 25 августа 2011

Вы можете сделать TextBox общедоступным. Просто выберите в окне свойств текстового поля в разделе «Дизайн / Модификаторы» и выберите public.

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