[英]Accessing properties of Form elements in another class
我有一个带有文本框,复选框,组合框和按钮的窗口窗体 。我还有另一个单独的类 , 该类使用Orignal WinForm元素的值更新数据库中的数据。我想访问某些或全部的属性(文本,选中的等)该类表单元素的数量。问题是-
1.如果我使用参数化函数调用,则参数列表将变得太大 。 eg-function(int a,bool c,string d,int e,int f,bool e,bool h,string g)这是可行的,但看起来很不整洁,我不知道这是否是一种好的编程方法。
2.我可以使用静态变量,但是随后我必须创建一个单独的函数来更新静态变量的值。 例如在组合框中更改索引。(但人们说避免使用静态方法。)
3.我也不想使用主表单类的 实例对象 ,因为那样我就不得不在许多地方重复创建原始表单类的对象。(这显然是非常昂贵的资源)。所以我的问题是,哪种技术出于良好的编程方法而使用?或者有更好的方法来执行此操作...
更好的是,可以使用get; set;
来使用Public属性get; set;
get; set;
对于每个控件,并使用这些属性访问另一个类中的表单数据。
public partial class MainClass : Form
{
public MainClass()
{
InitializeComponent();
}
public string UserName
{
get { return textBox1.Text }
set { textBox1.Text = value; }
}
public bool IsChecked
{
get { return checkBox1.Checked; }
set { checkBox1.Checked = value; }
}
}
public class AnotherClass
{
public void MyFunc()
{
MainClass obj = new MainClass();
obj.UserName = "SomeUser1";
obj.IsChecked = true;
}
}
1)您可以将所有参数分组到一个类或结构中,并将其实例传递给更新GUI控件的函数。
2)请勿为此使用静态变量-您可以将此参数设为全局参数,这不是您想要执行的操作。
3)如果要在数据库客户端类中传递并使用MyForm
类的实例,则不会创建新实例:
// class with all data you want to use to update GUI controls
class MyData
{
public string Text1 { get; set; }
public string Text2 { get; set; }
...
}
// class which obtains data from a DB
class DBClient
{
MyForm myForm;
DBClient(MyForm myForm)
{
this.myForm = myForm; // you're just passing a reference to MyForm here, you're not creating a new object
}
void UpdateFormControls()
{
MyData data = ...; // fill it with data obtained from from DB
myForm.UpdateControls(data);
}
}
// your custom form containing various controls
class MyForm : Form
{
DBClient dbClient;
MyForm()
{
dbClient = new DBClient(this);
}
public void UpdateControls(MyData data)
{
if (InvokeRequired)
{
this.BeginInvoke((MethodInvoker) delegate { UpdateControls(data); });
return;
}
control1.Text = data.Text1;
control2.Text = data.Text2;
...
}
}
如果您通过使MyForm
实现接口,然后在DBClient
类中使用接口引用来DBClient
DBClient
和MyForm
的耦合, DBClient
更好了。
也许使用所需字段创建class
,更新其值,然后在表单和数据管理器之间传递它。 您也可以将控件绑定到object
以便值将在控件中自动更新。
理想情况下,您应该创建一个包含要更新到数据库中的字段的类或结构。 现在,使用适当的值更新此类实例的成员,并将该实例作为参数传递给负责更新数据库的类。 与参数列表较长相比,这是一种更干净的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.