C# 从另一个类修改winform textbox值

C# 从另一个类修改winform textbox值,c#,winforms,C#,Winforms,我想知道是否可以从C#winform中的另一个类访问textbox值 例如,目前我在Form1.cs类中打开和关闭了一系列不同的文本框,如下所示: screentextBox.Visible = true; 然而,为了减少我的C#类中的代码行数,我想知道是否可以从另一个类中进行此调用,然后在我的Form1.cs中调用我的其他类方法 比如: class Otherclass { public void ShowTextBox() { screentextBox.V

我想知道是否可以从C#winform中的另一个类访问textbox值

例如,目前我在Form1.cs类中打开和关闭了一系列不同的文本框,如下所示:

   screentextBox.Visible = true;
然而,为了减少我的C#类中的代码行数,我想知道是否可以从另一个类中进行此调用,然后在我的Form1.cs中调用我的其他类方法

比如:

class Otherclass
{
   public void ShowTextBox()
   {
       screentextBox.Visible = true;
    }
}
然后在我的Form1.cs中,只需调用我的新ShowTextBox方法


如果这是一个愚蠢的问题,我很抱歉,但我已经在谷歌搜索过了,我找不到任何可以帮助我的东西。

你可以在声明类中将ScreentextBox设置为公共,并在另一个类中访问它,如

class Otherclass
{   
  public void ShowTextBox()
  {
      Class1.ScreenTextBox.Visible =true;
  }
}

您可以在中定义
ShowTextBox
方法,这样您仍然可以访问控件并整理代码。

您可以将文本框作为参数传递给另一个类中的函数:

class OtherClass
{
    public void ShowTextBox(TextBox target)
    {
        target.Visible = true;
    }
}

但是,我建议将与处理GUI及其事件相关的所有方法和代码都保存在表单本身中。如果您有大型计算方法等,则可以将这些方法移动到其他类。

添加用于在表单中显示
文本框的方法:

public partial class Form1 : Form
{
   public void ShowTextBox()
   {
       screentextBox.Visible = true;
    }
}
然后将From1传递给其他表单,并从那里调用此方法

Class OtherClass
{
   public static void method(TextBox[] items)
   {
      foreach(item in items)
      {
         (item as TextBox).Visible = true;
      }  
   }
}
要从ur
Form1.cs
class调用此方法-->


如果要从其他类访问Form1.cs的控件,请尝试以下方法

class Otherclass
{
  Form1 f1 = new Form1();
  f1.Controls["screentextBox"].Visible = true;
}
我会这样做(来自John Willemse的示例):

另一类

{


}解决这个老问题的另一种方法是:我发现旧方法是一种简单的方法,可以从项目中的任何类中访问控件(包括其所有属性和方法)以及其他变量。这种老方法包括从头创建一个临时类

注意A:关于旧方法:我知道,我知道,全局变量是邪恶的。但是,对于来这里寻找快速/灵活/套件的许多人来说,在大多数情况下解决方案可能是一个有效的答案,我还没有看到它发布。另一件事:这个解决方案是我实际使用的,作为我来到这个页面寻找的答案

第一步:下面是从头开始的新类文件

名称空间项目名称空间
{
公共类dataGlobal
{
public System.Windows.Forms.TextBox txtConsole=null;
//在此放置一些您可能希望在全球范围内使用的其他内容,例如:
公共生长素泰格;
公共字符串auxMessage;
公立学校;
//等等。
}
}
注意B:该类不是静态的,也没有静态成员,这允许在需要时创建多个实例。就我而言,我确实利用了这个特性。但是,事实上,您可以考虑将该类“TexBox A <代码>公共静态字段,以便-一旦初始化-在应用程序中始终是相同的。< /P> 第二步:然后您可以在主窗体中初始化它:

名称空间项目名称空间
{
公共部分类Form1:Form
{
//申报
public static dataGlobal dataMain=new dataGlobal();
公共表格1()
{
初始化组件();
//初始化
dataMain.txtConsole=textBox1;
}
//你自己的Form1代码还在继续。。。
}
}
3rd step:从其他类(或表单)调用
Form1
textBox1
的任何属性/方法:

名称空间项目名称空间
{
给别人上课
{
//申报和转让
dataGlobal dataLocal=Form1.dataMain;
公共无效的某物待办事项()
{
dataLocal.txtConsole.Visible=true;
dataLocal.txtConsole.Text=“在Form1的TextBox1“+”\r\n”中键入一些文本;
dataLocal.txtConsole.AppendText(“将文本添加到Form1的TextBox1”+“\r\n”);
string retrieveTextBoxValue=dataLocal.txtConsole.Text;
//你自己的代码继续。。。
}
}
}

[编辑]

一种更简单的方法,特别是对于
TextBox
在整个课程中的可见性,我在其他答案中没有看到:

第一步:在
主窗体中声明并初始化辅助
文本框
对象

名称空间项目名称空间
{
公共部分类Form1:Form
{
//申报
公共静态文本框TXT控制台;
公共表格1()
{
初始化组件();
//初始化
txtConsole=textBox1;
}
//你自己的Form1代码还在继续。。。
}
}
2nd step:从其他类(或表单)调用
Form1
textBox1
的任何属性/方法:

名称空间项目名称空间
{
给别人上课
{
公共无效的某物待办事项()
{
Form1.txtConsole.Visible=true;
Form1.txtConsole.Text=“在Form1的TextBox1“+”\r\n”中键入一些文本;
Form1.txtConsole.AppendText(“将文本添加到Form1的TextBox1”+“\r\n”);
string retrieveTextBoxValue=Form1.txtConsole.Text;
//你自己的代码继续。。。
}
}
}
[编辑]的评论:我注意到许多问题根本无法用通常的建议来解决:“相反,在表单上公开属性以获取/设置您感兴趣的值”。有时需要实现几个属性/方法。。。但是,话说回来,我知道。。。最佳实践应占上风:)

查看屏幕右侧的“相关”:我看到的第一个帖子是:我有什么答案
class Otherclass
{
  Form1 f1 = new Form1();
  f1.Controls["screentextBox"].Visible = true;
}
    public TextBox ShowTextBox(TextBox target)
    {
       target.Visible = true;
       return target;
    }