Отключение кнопки печати в диалоговом окне предварительного просмотра печати .net

Я работаю над приложением С#/.net. Я хочу, чтобы пользователь мог предварительно распечатать, но я не хочу, чтобы пользователь мог печатать прямо из диалогового окна предварительного просмотра.

В диалоговом окне предварительного просмотра есть небольшая кнопка принтера, которая отправляет предварительно просмотренные страницы прямо на принтер. Вопрос, есть ли способ избавиться/отключить/перехватить это нажатие кнопки?


person Matthias Wandel    schedule 22.09.2010    source источник


Ответы (5)


Класс PrintPreviewDialog на самом деле представляет собой оболочку класса PrintPreviewControl, и именно он предоставляет кнопки на панели инструментов. В любой форме может размещаться PrintPreviewControl, поэтому вам нужно будет разместить PrintPreviewControl в создаваемой вами диалоговой форме:

public partial class PreviewDialog : Form
{
    public PreviewDialog() {
        this.printPreviewControl1 = new System.Windows.Forms.PrintPreviewControl();
        this.SuspendLayout();
        // 
        // printPreviewControl1
        // 
        this.printPreviewControl1.Dock = System.Windows.Forms.DockStyle.Fill;
        this.printPreviewControl1.Location = new System.Drawing.Point(0, 0);
        this.printPreviewControl1.Name = "printPreviewControl1";
        this.printPreviewControl1.Size = new System.Drawing.Size(292, 273);
        this.printPreviewControl1.TabIndex = 0;
        this.printPreviewControl1.Columns = 1;
        this.printPreviewControl1.Zoom = 1.0;
    }

}

Свойство Columns, для которого в настоящее время установлено значение 1, представляет собой количество страниц, отображаемых элементом управления по горизонтали на экране. Свойство Zoom задает масштаб страниц, 1.0 — полная страница; поэтому ‹ 1,0 будет уменьшенным изображением, а > 1,0 будет увеличенным изображением в элементе управления на странице. Что вы хотели бы сделать с классом PreviewDialog выше, так это добавить к нему System.Windows.Forms.ToolStrip, а затем добавить кнопки для управления масштабированием и страницы в соответствии с упомянутыми свойствами (столбцы и масштабирование).

В форме, которая вызовет предварительный просмотр (не в форме PreviewDialog), у вас будет следующий код:

    private void buttonPrintPreview_Click(object sender, EventArgs e) {
        PreviewDialog dlg = new PreviewDialog();
        dlg.ShowDialog();
        return;
    }

Надеюсь, это поможет

person Steve Ellinger    schedule 22.09.2010
comment
Вроде правильное направление. К сожалению, на данный момент у меня нет опыта, чтобы превратить приведенное выше в рабочий код. - person Matthias Wandel; 23.09.2010

Вы можете получить доступ к кнопке печати и любой другой кнопке из элемента управления предварительным просмотром печати, выполнив поиск в коллекции элементов управления контейнера.

Для кнопки печати:

(ToolStripButton)((ToolStrip)printPreviewDialog1.Controls[1]).Items[0]

поэтому, чтобы отключить его,

((ToolStripButton)((ToolStrip)printPreviewDialog1.Controls[1]).Items[0]).Enabled = false;
person Ion Roata    schedule 18.02.2011

Спасибо всем за эту тему. Я просто хотел поделиться другим методом, основанным на ответе Иона Роаты выше. Замените базовый класс настраиваемым классом PrintPreviewDialog. Делает код более чистым JMHO.

class customPrintPreviewDialog : PrintPreviewDialog
{

   public customPrintPreviewDialog() //default constructor
    {
        // over ride the print button default enabled property
       ((ToolStripButton)((ToolStrip)this.Controls[1]).Items[0]).Enabled = false;
    }

   // Add more of your customization here.

}

И код для создания экземпляра...

 customPrintPreviewDialog objCPPdialog = new customPrintPreviewDialog();
person IdivideBy0    schedule 02.05.2014

В VB я использую это, используйте конвертер кода в С#:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    CType(PrintPreviewDialog1.Controls(1), ToolStrip).Items(0).Enabled = False

    PrintPreviewDialog1.ShowDialog()

End Sub
person mathias.horn    schedule 24.06.2013

this.reportViewer1.ShowPrintButton = False;

person Wirah    schedule 10.11.2010
comment
где он говорит, что использует службы отчетности? - person Antony Delaney; 10.11.2010