我想知道是否可以从C#winform中的另一个类访问文本框值。
例如,目前我有一堆不同的文本框,我正在我的Form1.cs类中打开和关闭,如下所示:
screentextBox.Visible = true;
但是,为了减少我的C#类中的代码行数量,我想知道是否可以从另一个类调用此函数,然后在我的Form1.cs中调用我的其他类方法?
类似的东西:
class Otherclass
{
public void ShowTextBox()
{
screentextBox.Visible = true;
}
}
然后在我的Form1.cs中只需调用我的新ShowTextBox方法。
我很抱歉,如果这是一个愚蠢的问题,但我环顾谷歌,我找不到任何可以帮助我的东西。
答案 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
对 [编辑] 的评论:我注意到许多问题根本无法通过常规建议解决:“而是在表单上创建公共属性以获取/设置值你有兴趣“。有时会有几个属性/方法要实现......但是,我知道......最好的做法应该占上风:)