void DrawForm(Graphics g, int resX, int resY) { g.FillRectangle(new SolidBrush(this.BackColor), 0, 0, this.Width, this.Height); float scale = resX/ScreenResolution; // Cycle through each control on the form and paint it to the printe foreach (Control c in Controls) {// Get the time of the next control so we can unbox it string strType = c.GetType().ToString().Substring(c.GetType().ToString().LastIndexOf(".") + 1); switch (strType) { case "Button": Button b = (Button)c;// Use the ControlPaint method DrawButton in order to draw the button of the form ControlPaint.DrawButton(g, ((Button)c).Left, ((Button)c).Top, ((Button)c).Width, ((Button)c).Height, ButtonState.Normal);// We also need to draw the text g.DrawString(b.Text, b.Font, new SolidBrush(b.ForeColor), b.Left + b.Width/2 - g.MeasureString(b.Text, b.Font).Width/2, b.Top + b.Height/2 - g.MeasureString("a", b.Font).Height/2, new StringFormat());break;case "TextBox":TextBox t = (TextBox)c;// Draw a text box by drawing a pushed in button and filling the rectangle with the background color and the text // of the TextBox control// First the sunken border ControlPaint.DrawButton(g, t.Left, t.Top, t.Width, t.Height, ButtonState.Pushed );// Then fill it with the background of the textbox g.FillRectangle(new SolidBrush(t.BackColor), t.Left+1, t.Top + 1, t.Width+2, t.Height -2);// Finally draw the string inside g.DrawString(t.Text, t.Font, new SolidBrush(t.ForeColor), t.Left + 2, t.Top + t.Height/2 - g.MeasureString("a", t.Font).Height/2, new StringFormat());break;case "CheckBox":// We have a checkbox to paint, unbox it CheckBox cb = (CheckBox)c;// Use the DrawCheckBox command to draw a checkbox and pass the button state to paint it checked or unchecked if (cb.Checked) ControlPaint.DrawCheckBox(g, cb.Left, cb.Top, cb.Height/2, cb.Height/2, ButtonState.Checked); else ControlPaint.DrawCheckBox(g, cb.Left, cb.Top, cb.Height/2, cb.Height/2, ButtonState.Normal);// Don't forget the checkbox text g.DrawString(cb.Text, cb.Font, new SolidBrush(cb.ForeColor), cb.Right -cb.Height - g.MeasureString(cb.Text, cb.Font).Width , cb.Top, new StringFormat()); break; } }}
cyp503(谁怕?一蓑烟雨任平生) 的代码感觉是在重绘而不是打印:(
你可以只打印内容呀// Finally draw the string inside g.DrawString(t.Text, t.Font, new SolidBrush(t.ForeColor), t.Left + 2, t.Top + t.Height/2 - g.MeasureString("a", t.Font).Height/2, new StringFormat());t.Text为textbox的内容
{
g.FillRectangle(new SolidBrush(this.BackColor), 0, 0, this.Width, this.Height);
float scale = resX/ScreenResolution;
// Cycle through each control on the form and paint it to the printe
foreach (Control c in Controls)
{// Get the time of the next control so we can unbox it
string strType = c.GetType().ToString().Substring(c.GetType().ToString().LastIndexOf(".") + 1);
switch (strType)
{
case "Button":
Button b = (Button)c;// Use the ControlPaint method DrawButton in order to draw the button of the form
ControlPaint.DrawButton(g, ((Button)c).Left, ((Button)c).Top, ((Button)c).Width, ((Button)c).Height, ButtonState.Normal);// We also need to draw the text
g.DrawString(b.Text, b.Font, new SolidBrush(b.ForeColor),
b.Left + b.Width/2 - g.MeasureString(b.Text,
b.Font).Width/2, b.Top + b.Height/2 - g.MeasureString("a", b.Font).Height/2,
new StringFormat());break;case "TextBox":TextBox t = (TextBox)c;// Draw a text box by drawing a pushed in button and filling the rectangle with the background color and the text
// of the TextBox control// First the sunken border
ControlPaint.DrawButton(g, t.Left, t.Top, t.Width, t.Height, ButtonState.Pushed );// Then fill it with the background of the textbox
g.FillRectangle(new SolidBrush(t.BackColor), t.Left+1, t.Top + 1, t.Width+2, t.Height -2);// Finally draw the string inside
g.DrawString(t.Text, t.Font, new SolidBrush(t.ForeColor), t.Left + 2,
t.Top + t.Height/2 - g.MeasureString("a", t.Font).Height/2, new StringFormat());break;case "CheckBox":// We have a checkbox to paint, unbox it CheckBox cb = (CheckBox)c;// Use the DrawCheckBox command to draw a checkbox and pass the button state to paint it checked or unchecked
if (cb.Checked)
ControlPaint.DrawCheckBox(g, cb.Left, cb.Top, cb.Height/2, cb.Height/2, ButtonState.Checked);
else
ControlPaint.DrawCheckBox(g, cb.Left, cb.Top, cb.Height/2, cb.Height/2, ButtonState.Normal);// Don't forget the checkbox text
g.DrawString(cb.Text, cb.Font, new SolidBrush(cb.ForeColor), cb.Right -cb.Height - g.MeasureString(cb.Text, cb.Font).Width ,
cb.Top, new StringFormat()); break; }
}}
g.DrawString(t.Text, t.Font, new SolidBrush(t.ForeColor), t.Left + 2,
t.Top + t.Height/2 - g.MeasureString("a", t.Font).Height/2, new StringFormat());t.Text为textbox的内容
将打印内容输入到richtextbox中,就打印
http://support.microsoft.com/default.aspx?scid=kb;en-us;812425