С#, получить доступ (получить или прочитать) значения textBox в статическом методе?

У меня есть форма (form1) с текстовым полем (textBox1). У меня есть класс с методом "public static string getValue()"

как я могу прочитать значение textBox1 в методе getValue() ??

вот мой код

namespace MyProgram
{
    public partial class Form1: Form
    {
      ---------------------------------
      ---------------------------------
      ---------------------------------
    }
}

другой класс

namespace MyProgram
{
    class values
    {

        public static string getValues()
        {

            string v;
            v = ------get value from textBox1 in Form1
            return v;
        }

    }
}

все программное обеспечение построено в этой структуре, поэтому я надеюсь, что в C# есть какой-то стандартный способ получить эти значения в методе getValue()


person Data-Base    schedule 12.08.2011    source источник


Ответы (4)


Вы должны создать новый объект Form1 и получить значение. Или добавьте делегата в form1 и вызовите его из getValue, чтобы возвращаемое значение делегата было значением текстового поля.

person Zenwalker    schedule 12.08.2011
comment
любой пример? это поможет мне узнать и понять это лучше! и эта структура у меня неправильная? - person Data-Base; 12.08.2011
comment
Что ж, если вы создаете экземпляр Form1 в методе getValue, то создаются новые объекты Form, а в памяти создается новый объект TextBox. Так что это не решит всю проблему для вас. Таким образом, другой способ - определить делегата в форме1, который, очевидно, является статическим объектом в форме1. Затем в этом делегате при вызове из getValues ​​для получения значения TextBox сделайте так, чтобы он возвращал значение из form1. Ищите делегата, вы получите ответ. - person Zenwalker; 12.08.2011
comment
Спасибо большое, попробую, я никогда не делал этого раньше, я думаю :-) - person Data-Base; 12.08.2011

Вы не можете. Свойство находится в экземпляре класса, статический метод не имеет указателя на него. Сломан по дизайну.

person TomTom    schedule 12.08.2011
comment
тогда как он должен быть разработан? - person Data-Base; 12.08.2011
comment
Если только он не создает, не показывает и не удаляет форму внутри статического метода. - person TrueWill; 12.08.2011

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

public static string GetValues()
{
    string value = null;

    using (var form = new Form1())
    {
        DialogResult result = form.ShowDialog();

        if (result == DialogResult.OK)
        {
            value = form.textBox1.Text;
        }
    }

    return value;
}

Блок using заботится об освобождении ресурсов, выделенных для формы. ShowDialog показывает форму как модальное диалоговое окно.

Хотя это работает для простых диалоговых окон, это, вероятно, не то, что вы хотите делать в каждом случае. Метод заблокирует текущий поток, пока пользователь не закроет форму. Посмотрите на другие приложения и примеры кода. Как написал @Dan Abramov, пересмотрите свой дизайн.

person TrueWill    schedule 12.08.2011

foreach(Control c in Form1.Controls) {
     if(c.getType() == TextBox) {
            TextBox tb = (TextBox)c; 
            string value = tb.Text;
     }

}

Но почему бы вам просто не прочитать значение из формы?

Textbox1.Text

Рассмотрим принцип KISS!

person marko    schedule 12.08.2011
comment
Но учтите, он не может сделать это из метода getvalues. Это в отдельном/другом классе. И текстовое поле obj в другом классе. - person Zenwalker; 12.08.2011