0

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

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

   screentextBox.Visible = true;

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

就像是:

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

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

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

4

8 回答 8

1

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

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

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

于 2013-05-16T09:01:13.553 回答
0
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 } );
于 2013-05-16T09:11:14.013 回答
0

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

class Otherclass
{   
  public void ShowTextBox()
  {
      Class1.ScreenTextBox.Visible =true;
  }
}
于 2013-05-16T08:58:20.857 回答
0

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

class Otherclass
{
  Form1 f1 = new Form1();
  f1.Controls["screentextBox"].Visible = true;
}
于 2013-05-16T09:18:57.780 回答
0

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

于 2013-05-16T09:00:39.080 回答
0

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

public partial class Form1 : Form
{
   public void ShowTextBox()
   {
       screentextBox.Visible = true;
    }
}

然后将您的 From1 传递给其他表单并从那里调用此方法。

于 2013-05-16T09:02:20.433 回答
0

我会这样做(来自 John Willemse 的示例):

其他类

{

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

}

于 2013-05-16T10:03:36.073 回答
-1

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

注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...
    }
}

第 3 步:从您的其他类(或表单)调用Form1's 的任何属性/方法textBox1

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

[编辑]

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

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

namespace YourProjectNamespace
{
    public partial class Form1 : Form
    {
        //  Declare
        public static TextBox txtConsole;

        public Form1()
        {
            InitializeComponent();

            // Initialize
            txtConsole = textBox1;
        }
        // Your own Form1 code goes on...
    }
}

第二步:从您的其他类(或表单)调用Form1's 的任何属性/方法textBox1

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]的评论:我注意到许多问题根本无法通过通常的建议来解决:“相反,在表单上创建公共属性以获取/设置您感兴趣的值”。有时会有几个属性/方法要实现......但是,我知道......最好的做法应该占上风:)

于 2014-06-02T14:39:16.987 回答