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 的方法。

我想在打印表单中打开打印预览按钮。确保我不想打开新的打印表单。我的要求是如果打印表单打开,然后按该表单的打印预览按钮。

我用来检查表格是否打开的方法:

    //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;
    }
4

2 回答 2

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

这必须有效,否则您的代码中会发生一些非常奇怪的事情。

于 2013-06-03T08:39:22.933 回答
1

保留对打印表单的引用,并给它一个 public 方法Print()和一个 public 方法ShowPrintPreview()。然后,每当您想打印或预览某些内容时,只需调用适当的方法即可。

于 2013-06-03T08:38:41.677 回答