在我的winform中,我有十几个txt字段 txtName,txtTitle等。这些字段可以在构造函数或btnOk操作中访问,但我想在某些命令上调用私有静态方法,该方法将使用加载的对象数据填充所有txt字段。所以我有
public AddEditForm()
{
InitializeComponent();
}
我尝试了
private static PopulateFormFields(Book book)
{
if(book !=null)
{
// txtName.Text = book.Name;
// txtName var is not accessible here
}
else
{
throw new Exception("You must provide valid book instance!");
}
}
答案 0 :(得分:5)
静态方法不能直接访问在同一个类中声明为实例变量的字段或控件 静态方法需要处理类的实际实例,因为这些变量仅在您声明和初始化表单实例时才存在。
您需要做的是在静态方法
中传递实例 private static void PopulateFormFields(AddEditForm current, Book book)
{
if(book !=null)
{
current.txtName.Text = book.Name;
}
else
{
throw new Exception("You must provide valid book instance!");
}
}
在当前的AddEditForm实例中,使用
调用静态私有方法 AddEditForm.PopulateFormFields(this, book);
编辑:我忘了说你也可以从方法中删除static关键字。在这种情况下,可以在不使用类名称标识符的情况下访问该方法,并且可以访问当前实例的变量(字段,控件)。 (优点转到Kris Vandermotten
及其上面的评论也注意到缺少的void关键字)
答案 1 :(得分:-1)
“txt字段”是表单的实例变量,因此永远不会被静态方法访问。