生成这样的条形码:每张纸显示8个,一个病人产生两个,最多可打印两页,我自己也写了代码,可是打出了黑屏,求大师,指点
我把这样的写成用户控件:
代码如下:
public partial class UserPrintCode : UserControl
{
public string Bedno { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
public string OperationNo { get; set; }
public string Taici { get; set; }
public object Code { get; set; }
public UserPrintCode()
{
InitializeComponent();
}
public UserPrintCode(string bedNo,string name,string sex,
int age,string operationno,string taici,object code)
{
InitializeComponent();
this.Bedno = bedNo;
this.Name = name;
this.Sex = sex;
this.Age = age;
this.OperationNo = operationno;
this.Taici = taici;
this.Code = code;
}
private void UserPrintCode_Load(object sender, EventArgs e)
{
lblbed_no.Text = Bedno;
lblName.Text = Name;
lblSex.Text = Sex;
lblAge.Text = Age.ToString();
lblOperation_no.Text = OperationNo;
lbltaici.Text = Taici;
barcodeControl2.Data = Code.ToString();
barcodeControl2.Invalidate();
//Invalidate();
}
}
调用页面如下:
代码如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//该纸张上要支持我想打几个人的就能打几个人,
//最多不超过8个,不然字太小,一式两份;
int pageCount = int.Parse(PageCount.Text.Trim());
int printCount = int.Parse(PrintCount.Text.Trim());
if (printCount > 8)
{
MessageBox.Show("最多一张纸打8个");
return;
}
else if (printCount <= 8)
{
//目前测试这块
CaptureScreen(printCount);
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
PrintPreviewDialog cppd = new PrintPreviewDialog();
cppd.Document = pd;
cppd.ShowDialog();
}
else
{
//未写
}
}
void pd_PrintPage(object sender, PrintPageEventArgs e)
{
//Graphics g = e.Graphics;
//barcodeControl2.Draw(g, barcodeControl2.ClientRectangle, GraphicsUnit.Inch, 0.01f, 0, null);
//g.Dispose();
e.Graphics.DrawImage(memoryImage, 0, 0);
}
[System.Runtime.InteropServices.DllImport("gdi32.dll ")]
public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
private Bitmap memoryImage;
private void CaptureScreen(int printCout)
{
Panel panel1 = new Panel();
int c = printCout % 2 == 0 ? printCout / 2 : printCout / 2 + 1;
for (int i = 1; i <= c; i++)
{
for (int t = 1; t <= 2; t++)
{
UserPrintCode u = new UserPrintCode("ffffff","ddddddd","男", 1,
"aaaaa","bbbbbb",txtValue.Text); //随便给的值
panel1.Controls.Add(u);
u.Size = new Size(190, 145);
u.Location = new Point(30 + t * 60, 20 + i * 50);
panel1.Controls.Add(u);
}
}
Graphics mygraphics = panel1.CreateGraphics();//创建的是整个panel
Size s = panel1.Size;//取panel大小
memoryImage = new Bitmap(s.Width, s.Height, mygraphics);
Graphics memoryGraphics = Graphics.FromImage(memoryImage);
IntPtr dc1 = mygraphics.GetHdc();
IntPtr dc2 = memoryGraphics.GetHdc();
BitBlt(dc2, 0, 0, panel1.ClientRectangle.Width, panel1.ClientRectangle.Height, dc1, 0, 0, 13369376);
mygraphics.ReleaseHdc(dc1);
memoryGraphics.ReleaseHdc(dc2);
}
}
求为什么打出来的是黑屏????而且还只有一个黑屏??这是为什么???