Set form as Parent throw exception “Top-level cont

2019-04-21 08:07发布

问题:

I want to access variables of a form from another form. On clicking a button inside my Main form, I want to set my Main form as Parent, then bring up another form (child form) wherein I will access variables of the Main form. My click handler is as follow:

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();
}

It compiles fine without any error. However, when I run the Main form and click on the System button, it throws me an exception. I do something similar in another code (not mine) with the same button click, and encounter no error (just with setting Main form as Parent).

What am I doing wrong? Is there something in my Main code that cause this?

回答1:

Best way would be to use EP.ShowDialog(this) and later use Owner property.



回答2:

You need the EP.TopLevel property to be set to false. It will let you to set a parent to it.

Further reading.

In case you only want to access variables and controls of another form, then maybe you can reach it in other ways, not trough a Parent relationship.



回答3:

OK, apparently the way to do it is to call

Form_Child.ShowDialog(this)

and then I can call

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

or if I define aVariable in the namespace Properties then

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

there are two ways.



回答4:

Form_EnterPassword EP = new Form_EnterPassword();
EP.MdiParent = this;       
EP.Show();

try this way, it helps for me. you need to set principalform as isMdicontainer = true at the form properties



回答5:

Writing this way, made the dialog display on the center of the parent form.

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