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;
}
答案 0 :(得分: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();
这必须起作用,否则你的代码中会发生一些非常奇怪的事情。
答案 1 :(得分:1)
保留对您的打印表单的引用,并为其提供公开方法Print()
和公共方法ShowPrintPreview()
。然后,无论何时想要打印或预览某些内容,只需调用适当的方法即可。