好了,這裏的問題是什麼,編譯器告訴你。您需要對象引用才能訪問該屬性。
請允許我解釋一下。
在C#中,默認情況下,類成員(字段,方法,屬性等)是實例成員。這意味着它們與他們所屬課程的實例相關聯。這使行爲像下面這樣:
public class Dog
{
public int Age { get; set; }
}
public class Program
{
public static void Main()
{
var dog1 = new Dog { Age: 3 };
var dog2 = new Dog { Age: 5 };
}
}
的Dog
雙方的兩個實例具有這樣的性質Age
,但是價值是聯繫在一起的Dog
該實例,這意味着它們可以爲每一個不同的。
在C#中,和許多其他語言一樣,有些東西叫static類的成員。當一個類成員被聲明爲static
時,那麼該成員不再與它所屬類的一個實例綁定。這意味着,我可以做類似如下:
public class Foo
{
public static string bar = "bar";
}
public class Program
{
public static void Main()
{
Console.WriteLine(Foo.bar);
}
}
的Foo
類的bar
字段聲明static
。這意味着Foo
的所有實例都是相同的。實際上,我們甚至不需要初始化Foo
的新實例來訪問它。
您在這裏面臨的問題是,雖然Form1
不是靜態類,Checked
不是靜態屬性,但您將其視爲同等對待。爲了使您正在嘗試工作,您需要創建一個實例Form1
並訪問該實例的Checked
屬性。
根據您的程序結構的不同,有很多方法可以做到這一點。如果Form1
在您嘗試訪問Checked
的範圍內創建,那麼這將很簡單。如果Form1
是產生新範圍的東西,那麼通常的做法是在構造函數中傳遞對它的引用。
例如,如果Form1
創建一個新的Form2
那麼我們做到以下幾點:
public class Form2 : Form
{
private Form1 parent;
public Form2(Form1 parent)
{
this.parent = parent;
InitializeComponent();
}
}
然後你就可以在整個Form2
訪問parent
。當然,根據程序的結構,確切的實現將有所不同。但是,一般模式是一樣的。將參考Form1
從創建的範圍傳遞到新類,然後從那裏訪問它。
'Form1'是類的名字 - 你需要一個實際的對象(因爲'Checked'不是'static') – UnholySheep