如何访问打开表单的按钮?

时间:2013-06-03 08:29:28

标签: c# .net winforms

    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 个答案:

答案 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()。然后,无论何时想要打印或预览某些内容,只需调用适当的方法即可。