2015-09-09 33 views
1

在我的应用程序第一次运行时,打开了两个表单。最顶端的表单需要优先考虑,并且不允许与背景中的表单进行任何交互。我试过ShowDialog()作为here,但是这隐藏了我不想做的背景中的表单。有没有完成这个的方法?禁止与背景表单互动

public Form1() 
     { 
      InitializeComponent(); 
      if (!fileexists(@"c:\Management Tools\Absence Tracker\bin\data\tbase.skf")) 
      { firstrunactions(); } 
     } 
void firstrunactions() 
     { 
      //open the get-started form and invite user to populate serialisable objects 
      firstrun frwindow = new firstrun(); 
      frwindow.ShowDialog(); 
     } 
+0

ShowDialog()不会“隐藏”表单。邮政编码。并使用Enabled属性禁用交互。 –

+0

它不会隐藏表格,但是在这里使用它会导致我的主表单不显示。 – Wolfish

回答

1

当您使用.ShowDialog()时,包含方法的执行会暂停,直到您关闭新打开的窗口。所以请确保在之前做其他,你叫.ShowDialog()。否则你的程序会陷入这种方法。如果您在显示背景窗口之前拨打.ShowDialog()会导致问题。
但使用.ShowDialog()这里是完全正确的,并具有正确的功能。

例子,如何做到这一点(导致相同的行为就像在你的问题):

public Form1() 
    { 
     InitializeComponent(); 
     //this is the wrong place for showing a child window because it "hides" its parent 
     Form frwindow = new Form(); 
     frwindow.ShowDialog(this); 
    } 

神奇的地方,它的工作原理:

private void Form1_Shown(object sender, EventArgs e) 
    { 
     Form frwindow = new Form(); 
     frwindow.ShowDialog(this); 
    } 

编辑:在您的如果它足够将if(!fileexistst...)移动到Form1_Shown()-事件中。

+1

有用吗?你还在面对这个问题吗?你还有别的问题吗?随意问! :) – Jibbow

+0

你好,这是完美的!这也是一个非常好的解释,谢谢! – Wolfish

0

尝试使用frwindow.ShowDialog(this); 或者改为“this”将其他形式作为参数传递。 在OnLoad覆盖中也移动此部分if (!fileexists(@"c:\Management Tools\Absence Tracker\bin\data\tbase.skf")) { firstrunactions(); } }