当子表单处于活动状态时,如何锁定(并使其看起来褪色)父表单?我试图让孩子形成最顶层,但只是让它始终可见,我仍然可以编辑父窗体。我想在子窗体运行VS2012,C#时无法在主窗体上操作。这是我用来调用第二种形式的代码......
private void checkButton_Click(object sender, EventArgs e)
{
Form2 newForm = new Form2(this);
newForm.Show();
}
答案 0 :(得分:1)
一种非常简单的方法是在子表单上使用ShowDialog()
而不是Show()
。这将阻止与主表单的任何交互。这也是传递结果的巧妙方式。当然还有很多其他方法。
示例:
private void checkButton_Click(object sender, EventArgs e)
{
Form2 newForm = new Form2(this);
newForm.ShowDialog();
}
有关详细信息,请参阅MSDN:https://msdn.microsoft.com/en-us/library/c7ykbedk(v=vs.110).aspx
答案 1 :(得分:0)
只需为当前正在运行的表单添加隐藏()
private void checkButton_Click(object sender, EventArgs e)
{
Form2 newForm = new Form2(this);
this.Hide();//hide old form
newForm.Show();
}
答案 2 :(得分:0)
您可以使用Form.ShowDialog创建将在父窗体顶部打开的对话框,并且在关闭子窗口之前不允许编辑父窗口
private void checkButton_Click(object sender, EventArgs e)
{
Form2 newForm = new Form2(this);
newForm.ShowDialog(this);
}
答案 3 :(得分:0)
你可能想在单独的线程中运行form2并设置topmost = true,form1将解除阻塞,但是form2也会运行你想要解锁的任何东西。这是你想要的吗?
namespace TestModal
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Thread thrd = new Thread(newwindow);
thrd.IsBackground = true;
thrd.Start();
}
private void newwindow()
{
Form2 frm2 = new Form2();
frm2.TopMost = true;
frm2.ShowDialog();
}
}
}