2013-06-02 37 views
0

我有5個窗體(c#winforms),我的應用程序只使用一種窗體作爲父窗體,所有子窗體通過按需調用ShowDialog方法顯示。我希望將子窗體聚焦,並且在爲任何子窗體調用ShowDialog方法之前將Opacity設置爲0.83,然後將其重置爲1.但是我需要在所有位置執行此操作。有什麼常見的方法來實現這一點?當執行ShowDialog方法時,爲父窗體設置不透明度

回答

3

Encapsulatesingle method始終使用該方法調用你的孩子的邏輯形成類似 -

public void ShowChildForm() 
{ 
    this.Opacity = 0.83; 
    // show dialog logic here 
    this.Opacity = 1.0; 
} 
+0

我不認爲這是非常有用的,因爲ShowDialog的邏輯5種不同的形式必須是不同的,所以它不是一個方法封裝已經 – VahiD

+2

我可以寫的方法, 公衆的DialogResult ShowChildForm(表格childForm) { 這一點。不透明度= 0.83; DialogResult dr = childForm.ShowDialog(); this.Opacity = 1.0; return dr; } – Albert

+0

@VahiD - 'ShowDialog'如何可以不同?它只是'form.ShowDialog()'。 –

0

這是我一直在尋找答案,

public DialogResult ShowChildForm(Form childForm) 
{ 
     this.Opacity = 0.83; 
     DialogResult dr = childForm.ShowDialog(); 
     this.Opacity = 1.0; 
     return dr; 
} 
+0

-1這就是Rohit Vats的一個小修改。 – jgauffin

0

您可以訂閱ChildForm的父窗體中的加載和關閉事件,如下所示:

public partial class Parent : Form 
{ 
    public Parent() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     var form = new ChildForm(); 
     form.Load += form_Load; 
     form.Closed += form_Closed; 
     base.OnLoad(e); 
    } 

    void form_Closed(object sender, EventArgs e) 
    { 
     this.Opacity = 1; 
    } 

    void form_Load(object sender, EventArgs e) 
    { 
     this.Opacity = 0.85; 
    } 


} 
+0

您正在創建的每個子表單都必須訂閱此事件,因此它們控制父窗體的不透明度 – VahiD

+1

會發生什麼,如果我調用form.Show()。調用show方法時,我不希望父窗體不透明。 – Albert