解决这个旧问题的另一种方法:我发现旧方法是一种从项目中的任何类中创建可访问控件(包括它们的所有属性和方法)以及可能还有其他变量的简单方法。这种旧方法包括从头开始创建一个临时类。
注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]的评论:我注意到许多问题根本无法通过通常的建议来解决:“相反,在表单上创建公共属性以获取/设置您感兴趣的值”。有时会有几个属性/方法要实现......但是,我知道......最好的做法应该占上风:)