![](/img/trans.png)
[英]Why is a private field accessible and a private setter not accessible from a static method?
[英]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.