Próbuję zrozumieć, jaka jest różnica pomię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, było napisane "null".C# winform: uzyskiwanie dostępu do właściwości publicznych z innych formularzy i różnica między właściwościami statycznymi i publicznymi
Herezje 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 Form2:
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ć punkt przerwania na tej linii:
label1.Text = frm1.Test;
Ale wartość jest "zerowa".
Proszę mi pomóc, jak mogę uzyskać dostęp do właściwości publicznych do innych formularzy.
I BTW Próbowałem uczynić tę publiczną własność "publicznym statycznym". można uzyskać dostęp za pomocą tego:
Form1.Test
Ale zauważyłem, że mogę zmienić wartość „test” z Form2 których nie ma się wydarzyć. Dlatego próbuję korzystać z własności publicznej, ale bez powodzenia. Czy ktoś może mi wyjaśnić te rzeczy. Dzięki za twoją pomoc faceci!
EDIT: (For follow up question)
Odpowiedź Sir Johna Koernera jest najlepszą odpowiedzią na moje pytanie. Ale mam pytanie uzupełniające, starałem się, aby te właściwości "testu" były "statyczne", i zauważyłem, że nawet jeśli uczynię tę właściwość statyczną lub publiczną, nadal można ją edytować w Form2. Aby się jasno oto próbka:
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 Form2 zamknięte, próbowałem ponownie włamać Form1_Load sprawdzić wartość „test”, i to zmieniło! Jak utworzyć właściwość publiczną w formularzu Form1, aby odczytać tylko w formularzu 2 i nie można jej edytować? Proszę, wyjaśnij mi. Wielkie dzięki!
Dzięki za tego człowieka, zobacz moją poprawkę na moje następne pytanie, mam nadzieję, że zadałem mi jednoznaczne pytanie. – jomsk1e
@JRC zobacz moją edycję. –
to wszystko! dzięki za twoją pomoc John! Dobra lekcja od ciebie! Przepraszamy za bycie nowicjuszem :( – jomsk1e