环境:Visual Studio 2008,C#,SQL Server,Windows开发,多用户,新开发人员
我在form A
中有一个方法用于在那里显示文本框信息。
此外,我还有一个按钮,在单击时显示另一个表单(表单B)。
Form B
是使用frm.ShowDialog();
Form B
上面有相同的文本框,名称相同,相同(从表单A 复制和粘贴)
我想使用表单A中的方法在Form B
中显示信息,而不是将方法从form A
复制并粘贴到form B
我在form A
公开了该方法并从from B
调用了该方法,但form B
的文本框中没有显示任何内容。为什么?我没有任何错误。
我应该保持简单,并在表单B中放置form A
方法的副本,而不是从form A
调用form B
中的方法吗?这是我能让它发挥作用的唯一方式。
表格A用于显示客户信息,表格B用于编辑客户信息。
我正在表单之间传递和返回信息,这些都是有效的。
表格不相同,即表格B没有客户笔记的文本框,它们是以单独的形式编辑的。
感谢您的投入。
答案 0 :(得分:2)
您应该使用info类并从表单A和表单B中检索数据 不要使用重复代码,只需使用另一个类进行逻辑\信息。
您可以阅读更多相关信息here
答案 1 :(得分:0)
创建一个模型类,其成员表示要以两种形式显示的数据。在visual studio 2008中,我相信有支持基于对象创建项目数据源。从模型类创建数据源。然后,在两种形式中,添加绑定源。将源的数据类型设置为项目数据源。然后,设计器将允许您从绑定源为每个控件选择绑定。最后,在表单的构造函数中,接受模型类实例,并将绑定源的数据源设置为该实例。
答案 2 :(得分:0)
即使您在调用formA时具有相同名称的相同文本框,您只需更改formA的实例,这意味着只更改formA中的文本框。
你必须明白,每个类都有自己的实例与另一个实例分开。
这并不意味着您无法访问formA中的formB文本框。我可以看到你想巩固;如果我没有弄错你在形式上有什么方法就像:
public void methodA(Customer customer)
{
textboxName = customer.Name;
textboxAddress = customer.Address;
}
如果你不想复制这个,那么我能想到的另一种方法是:
1。)为所有重复属性创建一个接口。
public interface ICustomerForm
{
string Name {get; set;}
string Address {get; set;}
}
2。)让2个表单实现接口。
public class FormA : Form, ICustomerForm
{
public string Name
{
get
{
return _textBoxName.Text;
}
set
{
_textBoxName.Text = value;
}
}
}
对formB执行相同的操作
3。)创建一个静态助手类,您只需传递客户类。 e.g:
public static class FormHelper
{
public static UpdateCustomerInfo(ICustomerForm form, Customer customer)
{
form.Name = customer.Name;
form.Address = customer.Address;
}
}
4。)在您的两种形式中,只需调用辅助类并将其自身作为第一个参数传递,将客户类作为第二个参数传递。 // formA中的方法 public void formA() { FormHelper.UpdateCustomerInfo(this,customer); }
//Method in formB
public void formB()
{
FormHelper.UpdateCustomerInfo(this, customer);
}
这样,您只需在表单中使用一行代码,并且信息的设置位于整合的帮助程序类中。