C # winform: Dostęp do właściwości publicznych z innych formularzy i różnicy między właściwościami statycznymi i publicznymi
Próbuję zrozumieć różnicę między właściwościami statycznymi i publicznymi. Ale kiedy próbowałem uzyskać dostęp do mojej publicznej własności „Test” w innej formie, mówi „null”.
Heres Form1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private string _test;
public string Test
{
get { return _test; }
set { _test = value; }
}
private void Form1_Load(object sender, EventArgs e)
{
_test = "This is a test";
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show();
}
}
Oto formularz 2:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
label1.Text = frm1.Test;
}
}
Aby sprawdzić wartość „Test” w Form1, umieściłem punkt przerwania w tym wierszu:
label1.Text = frm1.Test;
Ale wartość jest „null”.
Pomóż mi, jak mogę uzyskać dostęp do właściwości publicznych do innych formularzy.
A przy okazji próbowałem uczynić tę własność publiczną „publicznym statycznym”. Mogę uzyskać do niego dostęp za pomocą tego:
Form1.Test
Ale zauważyłem, że mogę zmienić wartość „Test” z Form2, której nie chcę robić. Dlatego staram się korzystać z własności publicznej, ale bez powodzenia. Czy ktoś może wyjaśnić mi te rzeczy. Dziękuję za pomoc!
EDIT: (For follow up question)
Odpowiedź Sir Johna Koernera jest najlepszą odpowiedzią na moje pytanie. Ale mam pytanie uzupełniające, próbowałem uczynić te właściwości „testowymi” „statycznymi” i zauważyłem, że nawet jeśli ustawię tę właściwość jako statyczną lub publiczną, nadal można ją edytować w Form2. Aby wyjaśnić, oto przykład:
public partial class Form2 : Form
{
private Form1 f1;
public Form2(Form1 ParentForm)
{
InitializeComponent();
f1 = ParentForm;
}
private void Form2_Load(object sender, EventArgs e)
{
label1.Text = f1.Test;
}
private void button1_Click(object sender, EventArgs e)
{
f1.Test = "This test has been changed!";
this.Close();
}
}
Po zamknięciu Form2 próbowałem ponownie złamać formularz Form1_Load, aby sprawdzić wartość „Test” i została zmieniona! Jak mogę uczynić własność publiczną w Form1 do odczytu tylko w Form2 i nie można jej edytować? Proszę, wyjaśnij mi. Wielkie dzięki!