0

在我的 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!");
      }
 }
4

2 回答 2

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 关键字)

于 2013-10-16T12:44:11.147 回答
-1

“txt 字段”是表单的实例变量,因此永远无法通过静态方法访问。

于 2013-10-16T12:44:30.943 回答