c# - 如何关闭打印预览对话框?
问题描述
我有文件打印功能。我试图在用户按下打印按钮后关闭打印预览对话框表单。一旦按下打印预览对话框中的打印按钮,事件就会启动下面的函数来打印文档。我希望当我打电话时表格会关闭,printPreviewDialog1.Close()
但它只是越界了,什么也没有发生。
但它不会在打印作业完成后关闭打印预览对话框。
public void _start_Print(object sender, EventArgs e)
{
printDocument1.Print();
}
根据评论中的要求添加。初始化打印预览对话框
private void btnPrint_Click(object sender, EventArgs e)
{
PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog();
printPreviewDialog1.Document = printDocument1;
ToolStrip ts = new ToolStrip();
ts.Name = "wrongToolStrip";
foreach (Control ctl in printPreviewDialog1.Controls)
{
if (ctl.Name.Equals("toolStrip1"))
{
ts = ctl as ToolStrip;
break;
}
}
ToolStripButton printButton = new ToolStripButton();
ToolStripButton closeButton = new ToolStripButton();
foreach (ToolStripItem tsi in ts.Items)
{
if (tsi.Name.Equals("printToolStripButton"))
{
printButton = tsi as ToolStripButton;
}
else if (tsi.Name.Equals("closeToolStripButton")) // idk if this is the name of the close button im trying to programmatically close it after printing
{
closeButton = tsi as ToolStripButton;
}
}
ts.Items.Remove(printButton);
ToolStripButton b = new ToolStripButton();
b.ImageIndex = printButton.ImageIndex;
b.Visible = true;
ts.Items.Insert(0, b);
b.Click += new EventHandler(this._start_Print);
printPreviewDialog1.WindowState = FormWindowState.Maximized;
printPreviewDialog1.ShowDialog();
printPreviewDialog1.Dispose(); //< doesnt do anything
closeButton.PerformClick(); // < doesn't do anything, possibly using wrong name for toolstripbutton
}
按照评论中的要求初始化打印文档
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawRectange(Pens.Black, 60, 60, 60,60);
}
解决方案
解决了。
我创建了一个全局ToolStripButton
并closeToolStripButton
使用printPreviewDialog
.
然后我在打印作业完成后以编程方式单击此按钮。
private ToolStripButton closeButton = new ToolStripButton(); <-- global variable
private void btnPrint_Click(object sender, EventArgs e)
{
foreach (ToolStripItem tsi in ts.Items)
{
if (tsi.Name.Equals("closeToolStripButton"))
{
closeButton = tsi as ToolStripButton;
}
else if (tsi.Name.Equals("printToolStripButton"))
{
printButton = tsi as ToolStripButton;
}
}
ts.Items.Remove(printButton);
ToolStripButton b = new ToolStripButton();
b.ImageIndex = printButton.ImageIndex;
b.Visible = true;
ts.Items.Insert(0, b);
b.Click += new EventHandler(this._start_Printer); //<-- this starts the printer event where i "PerformClick() on the initialized closeButton"
printprevDialog.WindowState = FormWindowState.Maximized;
printprevDialog.ShowDialog();
}
public void _start_Printer(object sender, EventArgs e) // <--- then i just performed the close click here right after i hit the print button
{
printDocument1.Print();
closeButton.PerformClick(); // <-- this way im not violating cross thread operations
}
推荐阅读
- google-cloud-data-fusion - 谷歌云数据融合校验和文件 csv
- python - 从三个数据帧动态创建字符串
- apache-nifi - NiFi (1.12.1) 带有 ParquetReader 的 ConvertRecord 处理器抛出 NullPointerException
- javascript - 如何让打字稿根据参数返回正确的类型
- python - 导入 statsmodel 没有属性 score_test_proportions_2indep
- javascript - 如何增加textares的限制?
- docker - 错误:WARN 为进程配置的低打开文件描述符限制。当前值:4096,推荐值:10000
- python - AttributeError:“元组”对象在使用 LGBMClassifier 包装器时没有属性“编码”
- android-studio - 在 .gitignore 文件中添加像 *folder 这样的文件夹是错误的吗?
- ios - gestureRecognizerShouldBegin on Subview Blocking Gestures on Parent CollectionView