2016-02-06 182 views
-2

如何在兒童窗體處於活動狀態時鎖定(並使其看起來褪色)父窗體?我試圖讓子窗體成爲最頂層,但是它只是讓它始終可見,我仍然可以編輯父窗體。我希望無法在子窗體在VS2012,C#中運行時在主窗體上操作。這是我用來調用第二種形式的代碼...在主窗體和彈出窗體之間切換

private void checkButton_Click(object sender, EventArgs e) 
{ 
    Form2 newForm = new Form2(this); 
    newForm.Show(); 
} 
+0

這個問題如何與visual studio相關?在另一位編輯中會有所不同嗎?爲什麼不用Windowm,XAML或任何其他相關標籤標記? – TomTom

+0

這只是爲了清楚起見,這就是我正在使用的IDE, – Sensei

+0

如果這是一個麻煩,爲什麼不忽略它呢? – Sensei

回答

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

+0

這就是我想要的方式B.K.我還想知道我使用的數據是否可以保存/傳回原始格式,甚至傳回到文本文件/數據庫? – Sensei

+0

@Sensei是的,但所有這些都是不同的事情,可以通過不同的方式接近。例如,如果您希望返回除ShowDialog()方法返回的'DialogResult'枚舉以外的結果,則可以在彈出窗體中創建一個公共方法,例如使用'ShowDialog()'的'ShowDialogWithResults()'然後將結果返回到主窗體。你可以在這裏看到可能的實現:http://stackoverflow.com/questions/3764736/is-it-possible-to-overload-the-showdialog-method-for-forms-and-return-a-differen –

0

只需添加隱藏()爲當前的跑步方式,

private void checkButton_Click(object sender, EventArgs e) 
      { 
       Form2 newForm = new Form2(this); 
       this.Hide();//hide old form 
       newForm.Show(); 
      } 
+0

我想這會起作用,因爲唯一可能出現的問題是每次我終止子窗體時,都會創建一個父窗體的新實例,所以我最終得到了相同窗體的重複實例。 – Sensei

0

您可以使用Form.ShowDialog創建對話框將打開在父窗體的頂部,將不允許修改父,直到你接近孩子

private void checkButton_Click(object sender, EventArgs e) 
     { 
      Form2 newForm = new Form2(this); 
      newForm.ShowDialog(this); 
     } 
0

你可能想運行在單獨的線程的窗口2並設置最上面=真,在Form1將起作用暢通,但窗口2將運行無論你想不想阻止。這是你想要的嗎?

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