C#从另一个类获取文本框值

C#从另一个类获取文本框值,c#,textbox,C#,Textbox,假设我有一个名为Form1的表单,其中包含文本框和按钮 我想在单击按钮时从另一个类获取textBox值。 我试着这样做,但不起作用: class Main { public void someMethod() { Form1 f1 = new Form1(); string desiredValue = f1.textBox.Text; } } 请原谅我这个愚蠢的问题,但我对C#很陌生,不能让它工作。我想这是因为你正在创建form1的新实

假设我有一个名为Form1的表单,其中包含文本框和按钮

我想在单击按钮时从另一个类获取textBox值。 我试着这样做,但不起作用:

class Main
{
    public void someMethod()
    {
        Form1 f1 = new Form1();
        string desiredValue = f1.textBox.Text;
    }
}

请原谅我这个愚蠢的问题,但我对C#很陌生,不能让它工作。

我想这是因为你正在创建form1的新实例,所以你实际上只从f1获取文本框文本。

你的文本框可能是私有的,尽管这是应该的。 如果需要文本框中的文本,可以使用属性公开它

public string TextBoxText{ get { return textBox.Text; } }
当你说

Form1 f1 = new Form1();
您正在使用自己的文本框创建一个全新的对象


如果您想要该表单的文本框中的值,则需要引用用户键入值的Form1的同一实例。

这是伪代码还是您实际尝试使用的代码


如果您试图使用此代码,您所做的就是创建一个全新的Form1。除非Form1的构造函数将某些内容放入文本框,否则此时文本框将为空

您需要找到打开的Form1,而不是创建另一个Form1,创建以下类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    class Class1
    {
        public void someMethod()
        {
            TextBox t = Application.OpenForms["Form1"].Controls["textBox1"] as TextBox;
            Debug.WriteLine(t.Text + "what?");
        }
    }
}
然后在你的按钮点击方法

private void button1_Click(object sender, EventArgs e)
{
    Class1 c = new Class1();
    c.someMethod();
}
表格一

表格二

class Main
{
    public void someMethod()
    {
        Form1 f1 = new Form1();
        string desiredValue = f1.pathret();
    }
}

请详细说明“不起作用”。除非您在构造函数中为
Form1
初始化了文本框的值,否则默认值为
string.Empty
(即“”)。是。它返回空字符串。只是举个例子,但我很抱歉,这是我的想法,是的。我尝试过使用public和public statis,但仍然无法访问原始文本框。然后,您应该访问先前为您创建的表单。在program.cs中,您将看到创建和显示的主窗体。(我强烈猜测)您需要访问
表单
someMethod
应该有一些引用,您应该确保将
Form1
传递到
someMethod()
。因此,我将像示例中一样执行此操作(Form1 f1=new Form1();)。在Program.cs中,我有:Application.Run(newform1());然后f1.textBox.Text或Form1.textBox.Text没有成功。很抱歉,我又犯了一次愚蠢的错误,但我想知道:\someMethod是如何创建的?我假设您创建了一个类,其中someMethod存在于
Form1
的某个地方?如果是这种情况,您可以将表单作为参数传递给该类(通过
this
)。正确方向的第一步可能是在someMethod中添加一个
System.Windows.Form myForm
作为参数,并从那里开始。它很有效!谢谢这将是我公认的答案。我只是想知道这是从另一个类获取文本框值的最简单(最快)的方法吗?不确定这是不是最快的方法,它非常简单。如果需要从另一个类中修改TyBox值,则考虑将其定义为公共的。您需要找到表单1的实例,如果它是公共的,我如何访问它?举个例子,我就不再问了,因为我感觉很糟糕。没什么不同,如果是公开的,我们可以这样写代码-Form1 Form1=Application.OpenForms[“Form1”]作为Form1;Debug.WriteLine(form1.textBox1.Text+什么?);提供的答案可能是正确的,但可以从解释中获益。仅代码答案不被视为“好”答案。以下是一些指导原则。从…起
class Main
{
    public void someMethod()
    {
        Form1 f1 = new Form1();
        string desiredValue = f1.pathret();
    }
}