как получить доступ к объекту, созданному с помощью функции в С#

Я делаю приложение для Windows на С# и пытаюсь программно создавать объекты в форме (например, TextBox и Label). И я могу сделать это легко, но я не могу определить их как общедоступные объекты. У меня есть функция с именем «makeTextBox(...)» в классе с именем «varstats», и это функция:

public static void makeTextBox(Panel pnlMain, int offsetTop, int offsetRight, string strName = "")
    {
        TextBox txt = new TextBox();
        txt.Name = strName;
        txt.Parent = pnlMain;
        txt.AutoSize = true;
        txt.Width = (pnlMain.Width - 9 * defdis) / 3; //defdis is a public int and means default distance
        txt.Location = new Point(pnlMain.Width - txt.Width - defdis - offsetRight - 3, offsetTop + defdis);
    }

И это мой основной код формы при загрузке формы:

 varstats.makeTextBox(pnlMain, 0, 0, "txtCustName");

Эта функция работает очень правильно (:D), и я вижу текстовое поле в своей панели, но как я могу получить доступ к текстовому полю? например, в другой форме мне нужно прочитать текстовое свойство TextBox и сохранить его в моей базе данных? как это сделать?

Обратите внимание, что я не могу определить их в заголовке своего класса, потому что я хочу создать слишком много объектов, используя for или while, а также я хочу удалить их и в некоторых случаях создать другие объекты.


person Kamyar Mirzavaziri    schedule 18.09.2016    source источник


Ответы (1)


Самый простой подход - вернуть текстовое поле из вашего метода, а затем использовать его:

// return is changed from void to TextBox:
public static TextBox makeTextBox(Panel pnlMain, int offsetTop, int offsetRight, string strName = "")
{
    TextBox txt = new TextBox();
    txt.Name = strName;
    txt.Parent = pnlMain;
    txt.AutoSize = true;
    txt.Width = (pnlMain.Width - 9 * defdis) / 3; //defdis is a public int and means default distance
    txt.Location = new Point(pnlMain.Width - txt.Width - defdis - offsetRight - 3, offsetTop + defdis);

    // return the textbox you created:
    return txt;
}

И теперь вы можете присвоить возвращаемое значение метода переменной и использовать его как хотите:

TextBox myTextBox = varstats.makeTextBox(pnlMain, 0, 0, "txtCustName");

// for example, change the text:
myTextBox.Text = "Changed Text";
person dotnetom    schedule 18.09.2016
comment
Это хорошая идея, но у меня есть другая функция с именем preparePanel, и эта функция создает слишком много элементов управления с разными типами (TextBox, Label, DataGridView,...), и эта функция использует функции makeLabel и.... и я должен вернуть массив из различные элементы управления в моей функции preparePanel. возможно ли иметь такой массив? - person Kamyar Mirzavaziri; 18.09.2016
comment
Я нашел ответ (здесь). Спасибо за ваш ответ. :) - person Kamyar Mirzavaziri; 19.09.2016