5

現在、私がしていることはこれです:

  1. 組み込みの.NETPrintPreviewDialogを使用する
  2. 独自のクリックハンドラーを[印刷]ボタンにアタッチします。これにより、ユーザーは最終的に印刷する前にプリンターを選択できます。

これはすべて機能しますが、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();
   }
}
4

2 に答える 2

6

ツールストリップのボタンにアクセスできるので、古い印刷ボタンを削除して、独自のボタンを追加します。デフォルトの印刷ボタンから画像を割り当てると、すべて設定されます。コードwoudlは次のようになります。

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.SelectPrinterAfterPreview);
于 2010-05-12T19:38:06.130 に答える
1

ボタンを置き換えるか、PrintPreviewDialogのコントロール名を使用するのは良いオプションではないと思います。

Net1からNet2に、ツールバーの名前を変更します。次のバージョンでは、それまたは他のコントロールの名前を変更することもできます。

PrintPreviewDialogは、PrintPreviewControlをカプセル化するための非常に単純なフォームです。

新しいフォームを作成し、独自のボタンを配置して、機能を実装できます。

PrintPreviewのいくつかのダイアログは、Code-Project(CoolPrintPreviewDialog)EnhacedPrintPreviewDialogにあります。

私のPrvDialogでは、ユーザーが印刷ボタンを押すと、PageSelDialogが表示され、ユーザーが印刷範囲(現在のページ、一部のページ、すべてのページ、キャンセル)を選択できるようになります。

他の解決策は、PrintDocumentからOnBeginPrint/suscribeイベントBeginPrintをオーバーライドすることです。ここでは、PageSelDialogを表示し、印刷をキャンセルして、DefaultPageSettings PrintRange、FromPage、ToPageを変更できます。

このオプションでは、PrintToPrinter、Preview、またはPrintFromPrintButonがいつであるかを知る必要があります。PrintController.IsPreview、プレビューオプションを解決します。

于 2010-06-28T19:07:18.720 に答える