2013-06-03 17 views
0
private void rbnbtnPageSetup_Click(object sender, EventArgs e) 
    { 
     if (IsFormOpen(typeof(GUI.Printing))) 
     { 

     } 
     else 
     { 
      MessageBox.Show("Please Open Printing Form"); 
     } 
    } 

IsFormOpen(Type t)是,返回true,如果印版爲開放的方法。如何訪問打開的表單的按鈕?

我想開在打印格式的打印預覽按鈕。確保我不想打開新的打印表單。我的要求是如果打印表單打開,然後按打印prieview按鈕的形式。

方法我已經使用檢查形式是開放與否:

//Checking Form is open or not 
    public bool IsFormOpen(Type formType) 
    { 
     foreach (Form form in Application.OpenForms) 
     { 
      if (form.GetType() == formType) 
       return true; 
     } 
     return false; 
    } 

回答

2

而不是點擊另一個窗體上按鈕,只要將「PreviewClick」邏輯分離的方法,使公衆和火吧。

因此,在您預覽的形式,創造新的方法:

private void PrintButtonClick(object sender, EventArgs e) 
{ 
    Preview(); 
} 

public void Preview() 
{ 
    //... preview logic here 
} 

,然後你可以這樣做:

private void rbnbtnPageSetup_Click(object sender, EventArgs e) 
{ 
    if (IsFormOpen(typeof(GUI.Printing))) 
    { 
     var frm = Application.OpenForms.OfType<Form>().FirstOrDefault(x => x.GetType() == typeof(GUI.Printing)); //this retrieves the preview form 
     frm.Show(); 
     frm.Preview(); 
    } 
    else 
    { 
     MessageBox.Show("Please Open Printing Form"); 
    } 
} 

我沒有看到我的LINQ方式任何問題,但只是要確定使用相同的方法來獲取表單以檢查它是否被打開。因此,改變這一行

var frm = Application.OpenForms.OfType<Form>().FirstOrDefault(x => x.GetType() == typeof(GUI.Printing)); //this retrieves the preview form 

這樣的:最後的編輯

GUI.Printing preview = null; 
foreach (Form form in Application.OpenForms) 
{ 
    if (form.GetType() == typeof(GUI.Printing)) 
    { 
     preview = (GUI.Printing)form; 
     break; 
    } 
} 

if (preview == null) 
{ 
    return; 
} 

preview.Show(); 
preview.Preview(); 

這有工作或以其他方式很奇怪的東西在你的代碼是怎麼回事。

+0

VAR FRM返回空值。爲什麼?:( –

+0

是'Gui.Printing'形式還是其他類型? – gzaxx

+0

明顯形式。 –

1

保持您的打印窗體的引用,並給它一個公共方法Print()和公共方法ShowPrintPreview()。然後,只要您想打印或預覽某些內容,就只需調用適當的方法即可。