簡體   English   中英

私有靜態方法中不可訪問字段名稱

[英]field names are not accessible in private static method

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

靜態方法不能直接訪問在同一類中聲明為實例變量的字段或控件。
靜態方法需要使用該類的實際實例,因為這些變量僅在聲明和初始化表單實例時才存在。

您需要做的是將實例傳遞給static方法

    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關鍵字)

“ txt字段”是表單的實例變量,因此將永遠無法通過靜態方法訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM