C#如何从表单中的文本框中获取文本,从不同的类调用

Posted

技术标签:

【中文标题】C#如何从表单中的文本框中获取文本,从不同的类调用【英文标题】:C# How to get text from a textbox in a Form, called from a different class 【发布时间】:2021-10-08 06:16:32 【问题描述】:

对不起,如果这是一个简单的问题,我对 c# 很陌生。为了简化这一点,我有一个表单(这是在 WinForms 中),假设 Form1 有一个文本框(允许多行的富文本框)。在运行时,我需要能够访问该文本框并获取用户编写的所有内容并将其放入字符串中。我可以做到这一点(在表格内),我遇到的问题是从另一个类中获取该文本。现在我已经设置好了,所以我有这个方法,在表单中:

public int getWords()
        
            int goals = 15;
            string words = mainTextbox.Text;
            int count = words.Split(' ').Length;
            MessageBox.Show(count.ToString());
            return count;
        

我尝试从我的班级调用该方法,我们称之为 Words,但文本框文本总是显示为空。我花了(有点太久了)才意识到,通过创建一个新的表单实例,我基本上是在重置文本框,这就是为什么它出现为空的原因,即使它不是。

我在 *** 上查看了许多其他问题,例如我自己的问题,但没有一个对我真正有用,也没有解释它们是如何工作的。所以我的问题是:如何在运行时从 Form1 的文本框中获取文本到 Class Words。最简单的方法,最愚蠢的解释,谢谢!

【问题讨论】:

我认为你需要反过来做。类不应调用表单,但表单应使用类对象并将所需的数据传递给它。 这能回答你的问题吗? Interaction between forms - How to change a control of a form from another form? • Passing data between forms • Passing variable between winforms • Passing data between C# forms • Communicate between two windows forms in C# 类的getwords方法应该有字符串作为参数,你应该通过将mainTextbox.Text作为参数传递给该方法来从表单调用这个方法。 Chetan,它比我描述的要复杂,因为它需要太长时间,但我不能反过来做。 Olivier Rogier,我会研究这些,但它们是否有助于在表单和类之间从文本框中传递数据? @RAZ 你的设计不正确。您可以选择稍后更正它,但以后可能永远不会出现,或者它可能会为时已晚/混乱而无法更正。您可以使用以下答案中建议的解决方案来继续您当前的设计。 【参考方案1】:

好的,假设您的 mainform 类称为 MainForm,而您的其他类称为 OtherClass。

从主窗体:

OtherClass otherClass = new OtherClass(this); // the keyword this is MainForm

现在在其他类中:

MainForm m_MainForm; //class level variable
public OtherClass(MainForm mainForm) //constructor

    m_MainForm = mainForm; //Now m_MainForm is accessible from OtherClass

现在在 MainForm 中,将文本框设为公共,以便可以从 OtherClass 访问它。

您可以从 OtherClass 中调用它的属性,例如:

string sTextBoxText = m_MainForm.MyTextBox.Text;

【讨论】:

以上是关于C#如何从表单中的文本框中获取文本,从不同的类调用的主要内容,如果未能解决你的问题,请参考以下文章

C#中的变量无法从html文本框中获取值

C#中怎样从一个form的文本框获取另一个form中Comobox控件的值

从表单中的文本框中捕获文本时,如何修复运行时错误?

如何通过 C# ASP.net 从 SQL Server 中的文本框中存储日期

c# 将从单个文本框中获取的多个值分配给标签

如何从 .NET 框架 C# 中的文本框中删除双逗号?