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!

questionAnswers(5)

yourAnswerToTheQuestion