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

时间:2013-05-16 08:54:14

标签: c# winforms

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

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

   screentextBox.Visible = true;

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

类似的东西:

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

然后在我的Form1.cs中只需调用我的新ShowTextBox方法。

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

8 个答案:

答案 0 :(得分:1)

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

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

但是,我建议保留与表单内部处理GUI及其事件有关的所有方法和代码。如果你有大量的计算方法等,那么可以将它们移到其他类中。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分: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 } );

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

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

class OtherClass

{

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

}

答案 7 :(得分:-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字段,以便初始化-once在整个应用程序中始终相同。

第二步:然后您就可以在主表单中对其进行初始化:

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的{​​{1}}的任何属性/方法:

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的任何属性/方法:

textBox1

[编辑] 的评论:我注意到许多问题根本无法通过常规建议解决:“而是在表单上创建公共属性以获取/设置值你有兴趣“。有时会有几个属性/方法要实现......但是,我知道......最好的做法应该占上风:)