C#,在静态方法中访问(获取或读取)文本框值?

C#,在静态方法中访问(获取或读取)文本框值?,c#,methods,textbox,static-methods,C#,Methods,Textbox,Static Methods,我有一个表单(form1),它有一个文本字段(textBox1) 我有一个类的方法是“publicstaticstringgetvalue()” 如何在getValue()方法中读取textBox1的值 这是我的密码 namespace MyProgram { public partial class Form1: Form { --------------------------------- ------------------------------

我有一个表单(form1),它有一个文本字段(textBox1) 我有一个类的方法是“publicstaticstringgetvalue()”

如何在getValue()方法中读取textBox1的值

这是我的密码

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()方法中的这些值。

您不能。属性位于类的实例中,静态方法没有指向它的指针。被设计破坏。

你不能。属性位于类的实例中,静态方法没有指向它的指针。被设计破坏了

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

}
但是为什么不直接从表单中读取值呢

Textbox1.Text
考虑一下接吻原则

但是为什么不直接从表单中读取值呢

Textbox1.Text

考虑一下接吻原则

您必须实例化Form1的新对象并获取值。或者在form1中添加一个委托并从getValue调用它,这样委托的返回值应该是文本框值。

您必须实例化form1的新对象并获取该值。或者在form1中添加一个委托并从getValue调用它,这样委托的返回值应该是文本框值。

您可以在静态方法中实例化、显示和处理表单。例如:

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所写,重新考虑您的设计。

您可以在静态方法中实例化、显示和处理表单。例如:

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所写,重新考虑您的设计。

那么它应该如何设计?除非他在静态方法中实例化、显示和处理表单。那么它应该如何设计?除非他在静态方法中实例化、显示和处理表单。但是请注意,他不能从getvalues方法中这样做。它在不同的班级里。还有另一个类中的文本框obj。但请注意,他不能从getvalues方法中执行此操作。它在不同的班级里。和其他类中的文本框obj。有例子吗?它将帮助我更好地学习和理解它!这个结构是我的错吗?如果你在getValue方法中实例化Form1,那么就会创建一个新的Form对象,并在memeory中创建新的TextBox obj。所以这并不能为你解决整个问题。所以另一种方法是在form1中定义委托,它显然是form1中的静态对象。然后在该委托中,当从getValues调用以获取TextBox值时,使其从form1返回一个值。寻找代表,你会得到答案。谢谢分配,我会试试看,我想我以前从来没有这样做过:-)有什么例子吗?它将帮助我更好地学习和理解它!这个结构是我的错吗?如果你在getValue方法中实例化Form1,那么就会创建一个新的Form对象,并在memeory中创建新的TextBox obj。所以这并不能为你解决整个问题。所以另一种方法是在form1中定义委托,它显然是form1中的静态对象。然后在该委托中,当从getValues调用以获取TextBox值时,使其从form1返回一个值。寻找代表,你会得到答案。谢谢分配,我会试试,我想我以前从来没有这样做过:-)