問題
我在將 PrintPage 函式(SampleForm_PrintPage)移動到新類(PrintPageDesign)時遇到問題,PrintPage的設計也使用主表單中的資料,我無法將資料拉入新類。
為什么?
我將所有 PrintPage 函式移動到單個類,因為應用程式中需要多個頁面設計,當每個頁面設計需要任何更改時,將它們全部放在同一個主表單中似乎很難審查和更新。
示例代碼
為了簡化我的問題,我在 Visual Basic 中創建了一個示例解決方案,

Form1.cs(表單代碼):
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Printing;
using System.Windows.Forms;
namespace Sample_Print
{
public partial class Main : Form
{
public Main()
{
InitializeComponent();
}
private void BTN_Print_Click(object sender, EventArgs e)
{
PrintDialog PD_SamplePage = new PrintDialog();
PrintDocument Doc_SamplePage = new PrintDocument();
Doc_SamplePage.PrintPage = SampleForm_PrintPage;
PD_SamplePage.Document = Doc_SamplePage;
Doc_SamplePage.Print();
}
protected void SampleForm_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
e.Graphics.CompositingMode = CompositingMode.SourceOver;
e.Graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
e.Graphics.DrawString(TB_Name.Text.ToString(), new Font("Roboto Condensed",12, FontStyle.Bold), Brushes.Black, 10, 10);
}
}
}
要求
我想將函式 SampleForm_PrintPage移動 到類PrintPageDesign,目前只有 Visual Studio 生成的代碼在類中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sample_Print
{
class PrintPageDesign
{
}
}
我嘗試了幾種方法從主表單外的文本框中獲取值,但結果為空。
非常感謝任何幫助。
uj5u.com熱心網友回復:
如上所述,您可以使用分部類來分隔MainForm 成員、方法和功能。
- 按Shift Alt C添加新課程。將檔案重命名為
PrintPageDesign并點擊Add。 - 在新類中,添加
partial修飾符并將名稱更改為Main(主表單的確切名稱)。請注意,我們在這里創建一個部分類,而不是從表單派生。Main
現在您在MainForm 背景關系中,您可以訪問它的成員。
例子
主表單類:
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Printing;
using System.Windows.Forms;
namespace Sample_Print
{
public partial class Main : Form
{
public Main()
{
InitializeComponent();
}
private void BTN_Print_Click(object sender, EventArgs e) => PrintJob1();
}
}
PrintPageDesign類:
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.ComponentModel;
namespace Sample_Print
{
partial class Main
{
private void PrintJob1(bool preview = false)
{
using (var doc = new PrintDocument())
{
doc.PrintPage = (s, e) =>
{
var g = e.Graphics;
var r = new Rectangle(e.MarginBounds.X, e.MarginBounds.Y,
e.MarginBounds.Width, 32);
using (var sf = new StringFormat())
using (var fnt = new Font("Roboto Condensed", 12, FontStyle.Bold))
{
sf.Alignment = StringAlignment.Near;
sf.LineAlignment = StringAlignment.Center;
g.DrawString(TB_Name.Text, fnt, Brushes.Black, r, sf);
r.Y = r.Height;
foreach (Control c in Controls)
{
g.DrawString(c.Name, fnt, Brushes.Black, r, sf);
r.Y = r.Height;
}
// ...
}
};
if (preview)
using (var ppd = new PrintPreviewDialog() { Document = doc })
ppd.ShowDialog();
else
{
using (var pd = new PrintDialog() { Document = doc })
{
if (pd.ShowDialog() == DialogResult.OK)
pd.Document.Print();
}
}
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/480702.html
上一篇:Windows10觸控鍵盤
