現在、私がしていることはこれです:
- 組み込みの.NETPrintPreviewDialogを使用する
- 独自のクリックハンドラーを[印刷]ボタンにアタッチします。これにより、ユーザーは最終的に印刷する前にプリンターを選択できます。
これはすべて機能しますが、OnprintToolStripButtonClickイベントは、ユーザーが実際のプリンターを選択して[印刷]をクリックする前に、ドキュメントをデフォルトプリンターに送信します(これは機能しますが、最初に古いプリンターから追加のコピーを取得します)ハンドラ)。
この組み込みのクリックハンドラーを削除できますか?EventHandlerListを使用してハンドラーを削除することに関して、ここで説明した他のメソッドを試しましたが、組み込みの印刷イベントでは機能しません。明確にするのに役立つ場合に備えて、現在のコードのコピーを次に示します。
// ... Irrelevant code before this
private PrintPreviewDialog ppdlg;
ToolStrip ts = new ToolStrip();
ts.Name = "wrongToolStrip";
foreach (Control ctl in ppdlg.Controls)
{
if (ctl.Name.Equals("toolStrip1"))
{
ts = ctl as ToolStrip;
break;
}
}
ToolStripButton printButton = new ToolStripButton();
foreach (ToolStripItem tsi in ts.Items)
{
if (tsi.Name.Equals("printToolStripButton"))
{
printButton = tsi as ToolStripButton;
}
}
printButton.Click += new EventHandler(this.SelectPrinterAfterPreview);
// ... Irrelevant code afterwards omitted
// Here is the Handler for choosing a Printer that gets called after the
// PrintPreviewDialog's "Print" button is clicked.
private void SelectPrinterAfterPreview(object sender, EventArgs e)
{
frmMainPage frmMain = (frmMainPage)this.MdiParent;
if (frmMain.printDialog1.ShowDialog() == DialogResult.OK)
{
pd.PrinterSettings.PrinterName = frmMain.printDialog1.PrinterSettings.PrinterName;
pd.PrinterSettings.Copies = frmMain.printDialog1.PrinterSettings.Copies;
pd.Print();
}
}