Phi*_*lip 37
您是通过父表格打电话ShowDialog()还是仅仅打电话Show()给您的孩子表格?
ShowDialog将"阻止"用户与作为参数传递的表单进行交互ShowDialog.
在父母中你可以称之为:
MyChildForm childForm = new MyChildForm();
childForm.ShowDialog(this);
Run Code Online (Sandbox Code Playgroud)
this父表格在哪里.
Riz*_*ari 15
它简单,用途
Form.ShowDialog();
Run Code Online (Sandbox Code Playgroud)
代替
Form.Show();
Run Code Online (Sandbox Code Playgroud)
使用时Form.ShowDialog(),在关闭之前,您无法与父表单进行交互.
Fre*_*örk 10
您可以做的是确保在显示子表单时将父表单作为所有者传递:
Form newForm = new ChildForm();
newForm.Show(this);
Run Code Online (Sandbox Code Playgroud)
然后,在子窗体中,为Activated和Deactivate事件设置事件处理程序:
private void Form_Activated(object sender, System.EventArgs e)
{
if (this.Owner != null)
{
this.Owner.Enabled = false;
}
}
private void Form_Deactivate(object sender, System.EventArgs e)
{
if (this.Owner != null)
{
this.Owner.Enabled = true;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这将导致一种真正奇怪的行为; 虽然您将无法立即返回并与父表单进行交互,但激活任何其他应用程序将启用它,然后用户可以与其进行交互.
如果要使子表单模态,请ShowDialog改为使用:
Form newForm = new ChildForm();
newForm.ShowDialog(this);
Run Code Online (Sandbox Code Playgroud)
虽然使用前面提到的childForm.ShowDialog(this)将禁用您的主窗体,它仍然看起来非常禁用.但是,如果在调用ShowDialog()之后在ShowDialog()和Enable = true之前调用Enabled = false,则主窗体看起来甚至会被禁用.
var childForm = new Form();
Enabled = false;
childForm .ShowDialog(this);
Enabled = true;
Run Code Online (Sandbox Code Playgroud)
小智 6
ChildForm child = new ChildForm();
child.Owner = this;
child.Show();
Run Code Online (Sandbox Code Playgroud)
//在ChildForm_Load中:
private void ChildForm_Load(object sender, EventArgs e)
{
this.Owner.Enabled = false;
}
private void ChildForm_Closed(object sender, EventArgs e)
{
this.Owner.Enabled = true;
}
Run Code Online (Sandbox Code Playgroud)
来源:http://social.msdn.microsoft.com/Forums/vstudio/en-US/ae8ef4ef-3ac9-43d2-b883-20abd34f0e55/how-can-i-open-a-child-window-and-block-在父窗口只
| 归档时间: |
|
| 查看次数: |
115496 次 |
| 最近记录: |