私有静态方法无法访问字段名称

use*_*193 0 .net c# winforms

在我的winform中,我有十几个txt字段,如txtName,txtTitle等.这些字段可以在构造函数或btnOk操作中访问,但我想在某些命令上调用私有静态方法,该方法将使用加载的对象数据填充所有txt字段.所以我有

public AddEditForm()
{
    InitializeComponent();
}
Run Code Online (Sandbox Code Playgroud)

我试过了

 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!");
      }
 }
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 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!");
        }
    }
Run Code Online (Sandbox Code Playgroud)

在当前AddEditForm实例中调用静态私有方法

    AddEditForm.PopulateFormFields(this, book);
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了说你也可以从方法中删除静态关键字.在这种情况下,可以在不使用类名称标识符的情况下访问该方法,并且可以访问当前实例的变量(字段,控件).(上面的优点Kris Vandermotten和上面的注释也注意到缺少的void关键字)