レポートビューアーがあり、印刷ボタンを有効にしましたが、ツールバーを有効にしていません。ユーザーがEnterキーを押すと、レポートビューアーは印刷を開始する必要があります。印刷ダイアログも表示されません。KeyPresイベントにどのコードを書く必要がありますか?
4516 次
3 に答える
0
プロジェクトでカスタム レポートを使用しています。カスタムとは、e.Graphics.DrawString タイプのコードを使用して作成されたレポートを意味します。
だから私はのデフォルトの印刷イベントですべてのレポート(コーディング)を作りましたPrintDocument
これが PrintDocument ツールの です。画面にドラッグ アンド ドロップし、ダブルクリックしてイベント ハンドラを作成します。
のイベント ハンドラーの背後にあるコードPrintDocoument
は次のとおりです。
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Image image = Properties.Resources.New_Header;
Font font = new Font("Arial", 7, FontStyle.Bold);
Font font2 = new Font("Arial", 7, FontStyle.Regular);
float fontHeight = font2.GetHeight();
e.Graphics.DrawImage(image, 20, 5, 260, 130);
e.Graphics.DrawString("Date:" + DateTime.Now.ToShortDateString(), new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(20, 160));
e.Graphics.DrawString("Invoice#: "+InvoiceNoTextBox.Text, new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(160, 160));
e.Graphics.DrawString("Client Name: " + ClientNameTextBox.Text.Trim(), new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(20, 180));
e.Graphics.DrawString("______________________________",
new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(20, 190));
e.Graphics.DrawString("Product", new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(23, 220));
e.Graphics.DrawString("U/Price", new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(170, 220));
e.Graphics.DrawString("Qty", new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(210, 220));
e.Graphics.DrawString("Total", new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(240, 220));
e.Graphics.DrawString("______________________________",
new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(20, 220));
int CurrentX = 25;
int CurrentY = 230;
int offset = 20;
foreach (var i in shoppingCart)
{
e.Graphics.DrawString(i.ItemName, new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(CurrentX, CurrentY+offset));
e.Graphics.DrawString(i.UnitPrice.ToString(), new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + offset));
e.Graphics.DrawString(i.Quantity.ToString(), new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(215, CurrentY + offset));
e.Graphics.DrawString(i.TotalPrice.ToString(), new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(240, CurrentY + offset));
offset = offset + (int)fontHeight + 5;
}
CurrentY = CurrentY+offset;
e.Graphics.DrawString("______________________________",
new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(20, CurrentY-5));
e.Graphics.DrawString("Total Amt: Rs." + TotalAmountTextBox.Text, new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + 35));
e.Graphics.DrawString("Discount%: " + DiscountTextBox.Text.Trim()+"%", new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + 50));
e.Graphics.DrawString("Discount: Rs." + JustDiscountTextBox.Text.Trim(), new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + 65));
e.Graphics.DrawString("Grand Total: Rs." + TotalToPayTextBox.Text, new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + 80));
e.Graphics.DrawString("Advance: Rs." + AdvancePaymentTextBox.Text.Trim(), new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(20, CurrentY + 95));
e.Graphics.DrawString("Cash: Rs." + givenCash.Text.Trim(), new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + 95));
e.Graphics.DrawString("Pending: Rs." + PendingPaymentTextBox.Text, new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(20, CurrentY + 110));
e.Graphics.DrawString("Return: Rs." + ReturnTextBox.Text, new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + 110));
e.Graphics.DrawString("Software Provided By Muhammad Abbas", new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(20, CurrentY + 125));
e.Graphics.DrawString("Mob:0304-9550308", new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(20, CurrentY + 140));
}
private void PrintPreviewButton_Click(object sender, EventArgs e)
{
try
{
printPreviewDialog1.Document = printDocument1;
printPreviewDialog1.ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
そして最後にあなたの質問の答え。これを FormKeyDown
イベントで使用します。
private void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
printDocument1.Print();
}
}
プリンターから領収書を直接印刷します。
于 2016-07-07T04:58:08.150 に答える
0
これは、ReportViewer からプログラムで印刷したいときにうまくいった方法です。
PrintController を StandardPrintController に設定して、印刷ダイアログを非表示にする必要があります。
printDoc.PrintController = new System.Drawing.Printing.StandardPrintController();
于 2009-07-27T04:06:06.303 に答える
0
Report Viewer で手動で印刷するためのコードを次に示します。ただし、VB.NETにあります。PrintDocument オブジェクトの Print Event を処理することで機能します。
Dim m_pageSettings As PageSettings 'Stores page settings for printout
Dim m_currentPage As Integer 'Used for index of pages
Private m_pages As New List(Of Stream)() 'Stores a stream for each pages
'Event fires when printDocument starts printing - reset page index to zero
Private Sub PrintDocument1_BeginPrint(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
m_currentPage = 0
End Sub
'Function that prints all the pages included in the report
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim pageToPrint As Stream = m_pages(m_currentPage)
pageToPrint.Position = 0
Dim pageMetaFile As Metafile = New Metafile(pageToPrint) 'create an image(metafile) of the report page
Using (pageMetaFile)
'Create a rectangle the size of our report - include margins
' Dim adjustedRect As Rectangle = New Rectangle( _
' e.PageBounds.Left - CType(e.PageSettings.HardMarginX, Integer), _
' e.PageBounds.Top - CType(e.PageSettings.HardMarginY, Integer), _
' e.PageBounds.Width, _
' e.PageBounds.Height)
Dim adjustedRect As Rectangle = New Rectangle( _
e.PageBounds.Left, _
e.PageBounds.Top, _
e.PageBounds.Width, _
e.PageBounds.Height)
e.Graphics.FillRectangle(Brushes.White, adjustedRect) 'Fill rectangle with WHITE background
e.Graphics.DrawImage(pageMetaFile, adjustedRect) 'Draw report in rectangle - this will be printed
m_currentPage = m_currentPage + 1
e.HasMorePages = m_currentPage < m_pages.Count 'If more pages are left - keep processing
End Using
End Sub
'Event fires when PrintDocument queries for PageSettings. Return a copy of m_pagesettings.
Private Sub PrintDocument1_QueryPageSettings(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.QueryPageSettingsEventArgs) Handles PrintDocument1.QueryPageSettings
e.PageSettings = CType(m_pageSettings.Clone, PageSettings)
End Sub
'Render the report in a EMF - This function creates metafiles(images) of each page in the report
Private Sub RenderAllLocalReportPages(ByVal localReport As LocalReport)
Dim deviceInfo As String = CreateEMFDeviceInfo() 'Enhanced MetaFile
Dim warnings As Warning() = Nothing
localReport.Render("IMAGE", deviceInfo, AddressOf LocalReportCreateStreamCallback, warnings)
End Sub
'Callback function used with RenderAllLocalReportPages
Private Function LocalReportCreateStreamCallback(ByVal name As String, ByVal extension As String, ByVal encoding As Encoding, ByVal mimeType As String, ByVal willSeek As Boolean) As Stream
Dim stream As New MemoryStream()
m_pages.Add(stream)
Return stream
End Function
Private Function CreateEMFDeviceInfo() As String
Dim paperSize As PaperSize = m_pageSettings.PaperSize
Dim margins As Margins = m_pageSettings.Margins
'The device info string defines the page range to print as well as the size of the page.
'A start and end page of 0 means generate all pages.
Return String.Format(CultureInfo.InvariantCulture, "<DeviceInfo><OutputFormat>emf</OutputFormat><StartPage>0</StartPage><EndPage>0</EndPage><MarginTop>{0}</MarginTop><MarginLeft>{1}</MarginLeft><MarginRight>{2}</MarginRight><MarginBottom>{3}</MarginBottom><PageHeight>{4}</PageHeight><PageWidth>{5}</PageWidth></DeviceInfo>", ToInches(margins.Top), ToInches(margins.Left), ToInches(margins.Right), ToInches(margins.Bottom), ToInches(paperSize.Height), ToInches(paperSize.Width))
End Function
'Convert report printing size to inches
Private Shared Function ToInches(ByVal hundrethsOfInch As Integer) As String
Dim inches As Double = hundrethsOfInch / 100.0R
Return inches.ToString(CultureInfo.InvariantCulture) & "in"
End Function
于 2009-07-27T18:25:43.593 に答える