如何将打印对话框添加到printpreviewdialog
本文关键字:添加 printpreviewdialog 对话框 打印 | 更新日期: 2023-09-27 18:14:52
我的老板想让我创建具有打印功能的窗口表单,但他想在预览后打印datagridview
。
所以现在我鼓励这个问题,当我点击printpreviewdialog
上的打印按钮时,我不能打印多组纸张或选择打印机或进行任何更改。当我点击按钮时,它会直接打印纸张。所以我希望加入printpreviewdialog
和printdialog
。
为什么printpreviewdialog
和printdialog
只能在不同的按钮中使用?当需要点击一个按钮预览,点击另一个按钮打印多集和更改打印机时,缺乏可用性。
printdialog
DialogResult result = printDialog1.ShowDialog();
// If the result is OK then print the document.
if (result == DialogResult.OK)
{
position = 0;
pageno = 1;
printDocument2.DefaultPageSettings.Margins = new Margins(20, 20, 20, 20);
printDocument2.OriginAtMargins = true;
printPreviewDialog1.Document = printDocument2;
printPreviewDialog1.ShowDialog();
}
printpreviewdialog
printDocument3.DefaultPageSettings.Margins = new Margins(20, 20, 20, 20);
printDocument3.OriginAtMargins = true;
//((ToolStripButton)((ToolStrip)printPreviewDialog1.Controls[1]).Items[0]).Enabled = false;
printPreviewDialog1.Document = printDocument3;
printPreviewDialog1.ShowDialog();
我知道很晚了,但我想还是有人需要的。正如汉斯·帕桑特所说,"打印预览在很大程度上取决于打印机和页面设置。"但是在printpreviewdialog中有一个打印按钮,这在大多数情况下仍然是合理的。但该按钮直接打印到您的默认打印机,并且从不显示对话框。如果你想从printpreview对话框中打印对话框,你可以操作PrintPreviewDialog的ToolStrip。
它开始了(假设你初始化了printPreviewDialog1, printDialog1和printDocument1对象)
printPreviewDialog1.Document = printDocument1;
ToolStripButton b = new ToolStripButton();
b.Image = Properties.Resources.PrintIcon;
b.DisplayStyle = ToolStripItemDisplayStyle.Image;
b.Click += printPreview_PrintClick;
((ToolStrip)(printPreviewDialog1.Controls[1])).Items.RemoveAt(0);
((ToolStrip)(printPreviewDialog1.Controls[1])).Items.Insert(0, b);
printPreviewDialog1.ShowDialog();
使用上面的代码,您可以删除PrintPreview的ToolStrip上的默认打印按钮,并将其替换为新创建的"打印按钮"。这个按钮现在有一个Click事件处理程序,通过使用它,您可以显示PrintDialog。
private void printPreview_PrintClick(object sender, EventArgs e)
{
try
{
printDialog1.Document = printDocument1;
if (printDialog1.ShowDialog() == DialogResult.OK)
{
printDocument1.Print();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, ToString());
}
}
效果良好…给你一个建议……你可以重复使用当前图标:
this.ToolStripButton.Image = ((System.Windows.Forms.ToolStrip)(printPreviewDialog.Controls[1])).ImageList.Images[0];
代码片段的其余部分:
{
this.ToolStripButton = new System.Windows.Forms.ToolStripButton();
this.ToolStripButton.Image = ((System.Windows.Forms.ToolStrip)(printPreviewDialog.Controls[1])).ImageList.Images[0];
this.ToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.ToolStripButton.Click += new System.EventHandler(this.printPreview_PrintClick);
((System.Windows.Forms.ToolStrip)(printPreviewDialog.Controls[1])).Items.RemoveAt(0);
((System.Windows.Forms.ToolStrip)(printPreviewDialog.Controls[1])).Items.Insert(0, ToolStripButton);
}
private void printPreview_PrintClick(object sender, System.EventArgs ee)
{
try
{
this.printDialog.Document = printDocument;
if (printDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
printDocument.Print();
}
}
catch (System.Exception ex)
{
System.Windows.MessageBox.Show(ex.Message, ToString());
}
}
private System.Windows.Forms.ToolStripButton ToolStripButton;
上面@AceIndy提供的代码片段没有考虑用户是否更改了默认打印机或其设置。下面是我解决这个问题的方法:
private void printPreview_PrintClick(object sender, EventArgs e)
{
try
{
printDialog.Document = printDocument;
if (printDialog.ShowDialog() == DialogResult.OK)
{
printDocument.PrinterSettings = printDialog.PrinterSettings;
printDocument.Print();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, ToString());
}
}