修改另一个类中的winform文本框值

本文关键字:文本 winform 另一个 修改 | 更新日期: 2023-09-27 18:13:56

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

例如,目前我在Form1.cs类中打开和关闭了一堆不同的文本框,比如:

   screentextBox.Visible = true;

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

类似于:

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

然后在我的Form1.cs中,简单地调用我的新ShowTextBox方法。

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

修改另一个类中的winform文本框值

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

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

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

您可以在Declaring类中将ScreentextBox设为Public,并在另一个类(如(中访问它

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

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

添加在表单中显示TextBox的方法:

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;
      }  
   }
}

从您的Form1.cs类--->调用此方法

OtherClass.method( new TextBox[] { TxtBox1, TxtBox2, TxtBox3 } );

如果您想从另一个类访问Form1.cs的控件,请尝试这种方式

class Otherclass
{
  Form1 f1 = new Form1();
  f1.Controls["screentextBox"].Visible = true;
}

我会这样做(John Willemse的例子(:

类别其他类别

    public TextBox ShowTextBox(TextBox target)
    {
       target.Visible = true;
       return target;
    }

}

解决这个老问题的另一种方法:我发现老方法是一种简单的方法,可以从项目中的任何类中创建可访问的控件(包括它们的所有属性和方法(,也许还有其他变量。这种旧方法包括从头开始创建一个特殊类

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

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

namespace YourProjectNamespace
{
    public class dataGlobal
    {
        public System.Windows.Forms.TextBox txtConsole = null;
        // Place here some other things you might want to use globally, e.g.:
        public int auxInteger;
        public string auxMessage;
        public bool auxBinary;
        // etc.
    }
}

注意B:类不是静态的,也没有静态成员,这允许在需要时创建多个实例。就我而言,我确实利用了这一功能。但是,事实上,您可以考虑将此类的TextBox设置为public static字段,以便在初始化后,它在整个应用程序中始终相同。

第二步:然后您可以在主窗体中初始化它:

namespace YourProjectNamespace
{
    public partial class Form1 : Form
    {
        //  Declare
        public static dataGlobal dataMain = new dataGlobal();
        public Form1()
        {
            InitializeComponent();
            // Initialize
            dataMain.txtConsole = textBox1;
        }
        // Your own Form1 code goes on...
    }
}

第三步:从其他类(或窗体(调用Form1textBox1:的任何属性/方法

namespace YourProjectNamespace
{
    class SomeOtherClass
    {
        // Declare and Assign
        dataGlobal dataLocal = Form1.dataMain;
        public void SomethingToDo()
        {
            dataLocal.txtConsole.Visible = true;
            dataLocal.txtConsole.Text = "Typing some text into Form1's TextBox1" + "'r'n";
            dataLocal.txtConsole.AppendText("Adding text to Form1's TextBox1" + "'r'n");
            string retrieveTextBoxValue = dataLocal.txtConsole.Text;
            // Your own code continues...
        }
    }
}

[EDIT]

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

第一步:在Main Form:中声明并初始化辅助TextBox对象

namespace YourProjectNamespace
{
    public partial class Form1 : Form
    {
        //  Declare
        public static TextBox txtConsole;
        public Form1()
        {
            InitializeComponent();
            // Initialize
            txtConsole = textBox1;
        }
        // Your own Form1 code goes on...
    }
}

第二步:从其他类(或窗体(调用Form1textBox1:的任何属性/方法

namespace YourProjectNamespace
{
    class SomeOtherClass
    {
        public void SomethingToDo()
        {
            Form1.txtConsole.Visible = true;
            Form1.txtConsole.Text = "Typing some text into Form1's TextBox1" + "'r'n";
            Form1.txtConsole.AppendText("Adding text to Form1's TextBox1" + "'r'n");
            string retrieveTextBoxValue = Form1.txtConsole.Text;
            // Your own code continues...
        }
    }
}

[Edit]的评论:我注意到许多问题根本无法通过通常的建议来解决:">相反,在表单上创建公共属性,以获取/设置您感兴趣的值"。有时会有几个属性/方法需要实现。。。但是,话说回来,我知道。。。应以最佳实践为准:(