如何访问打开表单的按钮

本文关键字:表单 按钮 何访问 访问 | 更新日期: 2023-09-27 18:16:27

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

如何访问打开表单的按钮

不需要在另一个表单上点击按钮,只需将'PreviewClick'逻辑移动到单独的方法中,将其设置为public并触发它。

在预览表单中,创建新方法:

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

这必须工作,否则你的代码中会发生一些非常奇怪的事情。

保持对打印表单的引用,并给它一个公共方法Print()和一个公共方法ShowPrintPreview()。然后,当你想打印或预览某些内容时,只需调用相应的方法。