Tôi đang cố gắng hiểu sự khác biệt giữa thuộc tính tĩnh và công khai. Nhưng khi tôi cố gắng truy cập tài sản công cộng của tôi 'Test' ở dạng khác, nó nói 'null'.C# winform: Truy cập các thuộc tính công khai từ các biểu mẫu khác và khác biệt giữa thuộc tính tĩnh và công khai
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();
}
}
Dưới đây là 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;
}
}
Để kiểm tra giá trị của 'thử nghiệm' trong Form1, tôi đặt một breakpoint vào dòng này:
label1.Text = frm1.Test;
Nhưng giá trị là 'null'.
Vui lòng giúp tôi làm cách nào để tôi có thể truy cập các thuộc tính công khai với các biểu mẫu khác.
Và BTW tôi đã cố gắng biến thuộc tính công khai này thành 'tĩnh công khai'. Tôi có thể truy cập thông tin này bằng cách sử dụng:
Form1.Test
Nhưng tôi nhận thấy rằng tôi có thể thay đổi giá trị 'Thử nghiệm' từ Form2 mà tôi không muốn xảy ra. Đó là lý do tại sao tôi đang cố gắng sử dụng tài sản công cộng nhưng không có may mắn. Ai đó có thể làm rõ cho tôi những điều này. Cảm ơn vì tất cả sự giúp đỡ của mọi người!
EDIT: (For follow up question)
Câu trả lời của Sir John Koerner là câu trả lời hay nhất cho câu hỏi của tôi. Nhưng tôi có một câu hỏi tiếp theo, tôi đã cố gắng làm cho các thuộc tính 'thử nghiệm' này thành 'tĩnh' và tôi nhận thấy rằng ngay cả khi tôi làm cho thuộc tính này là thuộc tính tĩnh hoặc công khai, vẫn có thể chỉnh sửa trong Form2. Để làm cho bản thân mình rõ ràng đây là một ví dụ:
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();
}
}
Sau Form2 đóng cửa, tôi đã cố gắng để phá vỡ một lần nữa trong Form1_Load để kiểm tra giá trị của 'Test', và nó đã thay đổi! Làm cách nào để tôi có thể tạo thuộc tính công khai trong Form1 thành readOnly trong Form2 và không thể được chỉnh sửa? Làm ơn cho tôi biết. Cám ơn mấy đứa nhiều!
Cảm ơn người đàn ông này, xin vui lòng xem chỉnh sửa của tôi cho câu hỏi tiếp theo của tôi, tôi hy vọng tôi làm cho câu hỏi của tôi rõ ràng. – jomsk1e
@JRC xem chỉnh sửa của tôi. –
là thế! cảm ơn sự giúp đỡ của bạn John! Bài học hay từ bạn! Xin lỗi vì là một newbie :( – jomsk1e