修改另一个类中的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方法。
如果这是一个愚蠢的问题,我很抱歉,但我在谷歌上搜索了一下,找不到任何可以帮助我的东西。
您可以将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...
}
}
第三步:从其他类(或窗体(调用Form1
的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...
}
}
}
[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...
}
}
第二步:从其他类(或窗体(调用Form1
的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]的评论:我注意到许多问题根本无法通过通常的建议来解决:">相反,在表单上创建公共属性,以获取/设置您感兴趣的值"。有时会有几个属性/方法需要实现。。。但是,话说回来,我知道。。。应以最佳实践为准:(