2010-09-22 36 views
5

Tôi đang làm việc trên ứng dụng C#/.net. Tôi muốn người dùng có thể in bản xem trước, nhưng tôi không muốn người dùng có thể in từ bản in ngay từ hộp thoại xem trước.Vô hiệu hóa nút "in" trong hộp thoại xem trước bản in .net

Hộp thoại xem trước bản in có một nút máy in nhỏ trên đó sẽ gửi các trang được xem trước thẳng tới máy in. Câu hỏi là, có cách nào để loại bỏ/vô hiệu/chặn nút này không?

+0

thể trùng lặp của [Làm thế nào tôi có thể thay đổi văn bản trên một cửa sổ win32?] (Http://stackoverflow.com/questions/2668731/how -can-i-change-text-on-a-win32-window) –

+0

Cách tiếp cận tương tự, nhưng thay vào đó hãy kích hoạt EnableWindow. –

Trả lời

3

Lớp PrintPreviewDialog thực sự là một trình bao bọc xung quanh lớp PrintPreviewControl và đó là những gì đang cung cấp các nút trong thanh công cụ. Bất kỳ hình thức có thể lưu trữ các PrintPreviewControl vì vậy những gì bạn sẽ phải làm là đăng cai PrintPreviewControl trong một hình thức thoại bạn tạo:

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; 
    } 

} 

Các Cột tài sản mà hiện đang được thiết lập để 1 là số lượng các trang được hiển thị bởi sự kiểm soát theo chiều ngang trên màn hình. Thuộc tính Zoom đặt tỷ lệ của các trang, 1.0 là trang đầy đủ; do đó < 1.0 sẽ là một hình ảnh bị giảm và> 1.0 sẽ là một hình ảnh mở rộng trong điều khiển trên mỗi trang. Những gì bạn sẽ muốn làm cho lớp PreviewDialog ở trên là thêm một System.Windows.Forms.ToolStrip vào nó và sau đó thêm các nút để xử lý zoom, và các trang cho mỗi thuộc tính được đề cập (Cột và Zoom).

Trong hình thức mà sẽ mang lại preview lên (không phải là hình thức PreviewDialog), bạn sẽ có mã như sau:

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

Hy vọng điều này giúp

+0

Dường như đúng hướng. Thật không may, tôi không vào thời điểm này có nền để chuyển các mã trên vào mã làm việc. –

-3

this.reportViewer1.ShowPrintButton = False;

+0

anh ta nói anh ta đang sử dụng dịch vụ báo cáo ở đâu? –

11

Bạn có thể truy cập nút in và bất kỳ nút nào khác từ điều khiển xem trước bản in bằng cách tìm kiếm trong bộ sưu tập điều khiển của vùng chứa.

Đối với nút in:

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

như vậy, để vô hiệu hóa nó,

((ToolStripButton)((ToolStrip)printPreviewDialog1.Controls[1]).Items[0]).Enabled = false; 
1

Trong VB Tôi sử dụng này, sử dụng một bộ chuyển đổi mã để C#:

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 
3

Thank tất cả các bạn cho chủ đề này. Tôi chỉ muốn chia sẻ một phương pháp khác được xây dựng dựa trên câu trả lời của Ion Roata ở trên. Over đi xe lớp cơ sở với một lớp PrintPreviewDialog tùy chỉnh. Làm cho mã tìm kiếm sạch hơn 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. 

} 

Và mã để nhanh chóng ...

customPrintPreviewDialog objCPPdialog = new customPrintPreviewDialog(); 
Các vấn đề liên quan