2012-05-24 10 views
10

Tôi muốn truy cập các biến của biểu mẫu từ biểu mẫu khác. Khi nhấp vào một nút bên trong hình thức chính của tôi, tôi muốn thiết lập hình thức chính của tôi như là cha mẹ, sau đó đưa lên một hình thức (hình thức con) trong đó tôi sẽ truy cập các biến của hình thức chính. Trình xử lý nhấp chuột của tôi như sau:Đặt biểu mẫu dưới dạng ngoại lệ ném phụ huynh "Không thể thêm điều khiển cấp cao nhất vào điều khiển"

private void btnSystem_Click(object sender, EventArgs e) 
{ 
    Form_EnterPassword EP = new Form_EnterPassword(); 
    EP.Parent = this;  //error: Top-level control cannot be added to a control 
    EP.ShowDialog(); 
} 

Nó biên dịch tốt mà không có bất kỳ lỗi nào. Tuy nhiên, khi tôi chạy biểu mẫu Chính và bấm vào nút Hệ thống, nó ném cho tôi một ngoại lệ. Tôi làm một cái gì đó tương tự trong một mã khác (không phải của tôi) với các nút bấm cùng, và không gặp phải lỗi (chỉ với thiết lập hình thức chính là phụ huynh).

Tôi đang làm gì sai? Có cái gì trong mã chính của tôi gây ra điều này?

+0

Tôi đã đọc xung quanh và thấy không có gì hữu ích. có các mã tương tự, có cùng khai báo cài đặt Gốc. – CaTx

+0

ngoại lệ được ném ngay khi tôi đặt Cha mẹ. – CaTx

Trả lời

16

Cách tốt nhất là sử dụng EP.ShowDialog(this) và sau đó sử dụng thuộc tính Owner.

+0

Tôi đổi thành .ParentForm; nó ném cho tôi lỗi này: Thuộc tính hoặc chỉ mục 'System.Windows.Forms.ContainerControl.ParentForm' không thể được gán cho - nó chỉ đọc – CaTx

+3

Đúng vậy. Quên về cha mẹ. Chỉ cần sử dụng 'Chủ sở hữu'. –

+0

Tôi sẽ thử. Cảm ơn bạn. – CaTx

10

Bạn cần thuộc tính EP.TopLevel được đặt thành false. Nó sẽ cho phép bạn thiết lập một phụ huynh cho nó.

Further reading.

Trong trường hợp bạn chỉ muốn truy cập các biến và cách điều khiển một hình thức khác, thì có lẽ bạn có thể đạt được nó bằng nhiều cách khác, không trough một mối quan hệ phụ huynh.

+1

EP.TopLevel = false -> nó không giúp ích gì. – CaTx

+0

cảm ơn nó đã giúp tôi để hiển thị hình thức như kiểm soát ở dạng khác – oleksa

+0

Tôi nghĩ rằng điều này nên đã được chấp nhận là câu trả lời đúng. Nó đã làm công việc cho tôi. Cảm ơn ;) – Javid

1

OK, rõ ràng là cách để làm điều đó là để gọi

Form_Child.ShowDialog(this) 

và sau đó tôi có thể gọi

FromParent_aVariable = ((Form_Parent)this.Owner).aVariable; 

hoặc nếu tôi xác định aVariable trong Properties namespace sau đó

FromParent_aVariable = NameSpace.Properties.Settings.Default.aVariable; 

có hai cách.

-1

Viết theo cách này, làm hiển thị hộp thoại ở giữa biểu mẫu gốc.

Form_Child.StartPosition = FormStartPosition.CenterParent; 
    Form_Child.ShowDialog(this);