i am using the bitmap method to print the DataGridView.
How to split the bitmap on two pages if the this.dgvTheory.Height is bigger than 500?Everything should stay on the first page,except the bitmap which can go on second page if it's big.
Edited: The rest of the image should go on the 2nd page.
Thanks in advance.
private void button1_Click(object sender, EventArgs e)
{
int height = dgvTheory.Height;
dgvHistTheoCust.Height = dgvTheory.RowCount * dgvTheory.RowTemplate.Height;
bitmap = new Bitmap(960, this.dgvTheory.Height);
dgvTheory.DrawToBitmap(bitmap, new Rectangle(0, 0, 960, this.dgvTheory.Height));
dgvTheory.Height = height;
printPreviewDialog1.Document = printDocument1;
printPreviewDialog1.ShowDialog();
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
this.printDocument1.DefaultPageSettings.Landscape = true;
using (Font fnt1 = new Font("Segoe UI", 12f, FontStyle.Regular))
{
using (Font fnt2 = new Font("Arial", 13f, FontStyle.Bold))
{
e.Graphics.DrawString("just a text", fnt2, Brushes.Black, new RectangleF(new PointF(500f, 10f), new SizeF(300f, 20f)));
e.Graphics.DrawRectangle(Pens.Black, 50, 5, 1000, 30);
e.Graphics.DrawRectangle(Pens.Black, 50, 35, 1000, 30);
e.Graphics.DrawString("just a test", fnt2, Brushes.Black, new RectangleF(new PointF(280f, 40f), new SizeF(700f, 20f)));
e.Graphics.DrawRectangle(Pens.Black, 50, 70, 300, 20);
e.Graphics.DrawString("some data :", fnt1, Brushes.Black, new RectangleF(new PointF(55f, 70f), new SizeF(500f, 20f)));
e.Graphics.DrawRectangle(Pens.Black, 50, 90, 300, 20);
e.Graphics.DrawString("some data :", fnt1, Brushes.Black, new RectangleF(new PointF(55f, 90f), new SizeF(300f, 20f)));
e.Graphics.DrawRectangle(Pens.Black, 350, 70, 700, 20);
e.Graphics.DrawString("str", fnt1, Brushes.Black, new RectangleF(new PointF(600f, 70f), new SizeF(300f, 20f)));
e.Graphics.DrawRectangle(Pens.Black, 350, 90, 700, 20);
e.Graphics.DrawString("str", fnt1, Brushes.Black, new RectangleF(new PointF(600f, 90f), new SizeF(300f, 20f)));
e.Graphics.DrawRectangle(Pens.Black, 50, 110, 300, 20);
e.Graphics.DrawRectangle(Pens.Black, 350, 110, 700, 20);
e.Graphics.DrawString("some data :", fnt1, Brushes.Black, new RectangleF(new PointF(55, 110), new SizeF(300f, 20f)));
e.Graphics.DrawString("str", fnt1, Brushes.Black, new RectangleF(new PointF(600, 110), new SizeF(300f, 20f)));
e.Graphics.DrawImage(bitmap, 50, 135);
e.Graphics.DrawRectangle(Pens.Black, 50, 640, 300, 20);
e.Graphics.DrawString("some data :", fnt1, Brushes.Black, new RectangleF(new PointF(50, 640), new SizeF(300f, 20f)));
e.Graphics.DrawRectangle(Pens.Black, 350, 640, 700, 20);
e.Graphics.DrawString("int", fnt1, Brushes.Black, new RectangleF(new PointF(700, 640), new SizeF(300f, 20f)));
e.Graphics.DrawString("some data....", fnt1, Brushes.Black, new RectangleF(new PointF(50, 660), new SizeF(1000f, 70f)));
e.Graphics.DrawString("my sign goes here", fnt1, Brushes.Black, new RectangleF(new PointF(650, 730), new SizeF(300f, 20f)));
}
}
}
Printing on multiple page is controlled by two indicators:
the internal flag e.HasMorePages tells the system to re-enter the PrintPage method once more after you return from it.
some external flag you need to set up tells you which page and/or which content you are supposed to print next.
The internal flag is rather simple but you need to know that it wil be reset whenever you enter the method!
Your external flag can be anything you want, a bool or a number or it can even be implicit, like the state of a queue.
In your case a simple bool will be enough, but for more complex print jobs one may want e.g. an index into a list of items to print..
Let's call your flag printImageOnPageTwo. Declare it at class level:
bool printImageOnPageTwo = false;
Now you can check for it to know if you should enter the part that prints page one or skip it and print the image to the top of page two..:
private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
this.printDocument1.DefaultPageSettings.Landscape = true;
if (!printImageOnPageTwo )
using (Font fnt1 = new Font("Segoe UI", 12f, FontStyle.Regular))
using (Font fnt2 = new Font("Arial", 13f, FontStyle.Bold))
{
e.Graphics.DrawString("just a text", fnt2,.....);
...
...
if (dgvTheory.Height <= than 500)
e.Graphics.DrawImage(...., y_InTheMiddle)
else
{
printImageOnPageTwo = true: // set our flag
e.HasMorePages = true; // set the system flag
return; // quit the routine
}
} // end if !printImageOnPageTwo
else e.Graphics.DrawImage(...., y_AtTheTop);
printImageOnPageTwo = false; // reset our flag
}
Related
Ok, I have got a printDocument1_PrintPage method which is supposed to print out the contents of a ListView. During execution, the method only prints out the first page. Could someone help me to printout the remaining page(s)?
I have identified the end of the first page via the variable ypos and set the property e.HasMorePages = true.
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e){
Graphics graphics = e.Graphics;
int ypos = 78;
Font f1 = new Font("Arial", 14, FontStyle.Bold, GraphicsUnit.Pixel);
Brush brush = new SolidBrush(Color.LightSlateGray);
graphics.FillRectangle(brush, new Rectangle(10, 10, 770, 50));
Pen blackpen = new Pen(Color.Black);
Pen graypen = new Pen(Color.LightGray);
Pen redpen = new Pen(Color.Red);
graphics.DrawRectangle(blackpen, new Rectangle(10, 10, 770, 50));
Brush B = new SolidBrush(listView1.ForeColor);
graphics.DrawLine(blackpen, 10, 10, 10, 1132);
graphics.DrawString("FORENAME", f1, Brushes.Black, new Point(20, 25));
graphics.DrawLine(blackpen, 130, 10, 130, 1132);
graphics.DrawString("SURNAME", f1, Brushes.Black, new Point(140, 25));
graphics.DrawLine(blackpen, 290, 10, 290, 1132);
graphics.DrawString("EXT.", f1, Brushes.Black, new Point(300, 25));
graphics.DrawLine(blackpen, 380, 10, 380, 1132);
graphics.DrawString("JOB TITLE", f1, Brushes.Black, new Point(410, 25));
graphics.DrawLine(blackpen, 780, 10, 780, 1132);
int[] X = { 15, 140, 300, 390, 720 };
int Y = 60;
f1 = listView1.Font;
for (int I = 0; I < listView1.Items.Count; I++){
for (int J = 0; J < listView1.Items[I].SubItems.Count - 1; J++){
graphics.DrawString(listView1.Items[I].SubItems[J].Text, f1, B, X[J], Y);
}
Y += f1.Height;
graphics.DrawLine(graypen, 10, ypos, 780, ypos);
ypos = ypos + 17;
if (ypos > 1132){
e.HasMorePages = true;
return;
}
}
graphics.Dispose();
}
I have an issue regarding printing from a WF App:
I have this code in a button that would allow me to print:
if (string.IsNullOrWhiteSpace(tb_tab3_cliente.Text))
{
MessageBox.Show("Empty Textbox!");
}
else
{
if (try2 == false)
{
for (int i = 0; i < 3; i++)
{
if (i == 0)
{
printer_selection = "fCambio";
pnt_file.DefaultPageSettings.Landscape = false;
pnt_file.Print();
}
if (i == 1)
{
printer_selection = "fCambio2";
pnt_file.DefaultPageSettings.Landscape = true;
pnt_file.Print();
}
if (i==2)
{
printer_selection = "fCambio3";
pnt_file.DefaultPageSettings.Landscape = true;
pnt_file.Print();
}
}
}
}
As you can see, I manage my print process using a string called "printer_selection".
The button makes the printing to iterate through 3 phases, each one contains a
different .jpeg file, the first one also contains text within the image that is handled on the printing.
The following is what I have inside the printPage event:
switch (printer_selection)
{
case "fCambio":
path = Application.StartupPath;
file = #"Resources\formats\fCambio.JPG";
full = Path.Combine(path, file);
print_management = Image.FromFile(full);
e.Graphics.DrawImage(print_management, -40, 0);
e.Graphics.DrawString(tb_tab3_numeroParte.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 475, 205);
e.Graphics.DrawString(tb_tab3_nombreModelo.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 250, 205);
e.Graphics.DrawString(tb_tab3_round.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 170, 760);
e.Graphics.DrawString(tb_tab3_card.Text+", "+ tb_tab3_card2.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 210, 380);
e.Graphics.DrawString(tb_tab3_spindle.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 170, 580);
e.Graphics.DrawString(tb_tab3_blister1.Text+", "+ tb_tab3_blister2.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 190, 400);
e.Graphics.DrawString(tb_tab3_tray.Text+", "+ tb_tab3_tray2.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 130, 420);
e.Graphics.DrawString(tb_tab3_cover.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 130, 440);
e.Graphics.DrawString(tb_tab3_master.Text+", "+ tb_tab3_master2.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 135, 460);
e.Graphics.DrawString(tb_tab3_subMaster.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 150, 480);
e.Graphics.DrawString(tb_tab3_filler.Text+", "+tb_tab3_filler2.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 135, 500);
e.Graphics.DrawString(tb_tab3_envelope.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 135, 520);
e.Graphics.DrawString(tb_tab3_donut.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 150, 560);
e.Graphics.DrawString(tb_tab3_sleeve.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 135, 540);
e.Graphics.DrawString(tb_tab3_foam.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 130, 600);
e.Graphics.DrawString(tb_tab3_sticker.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 135, 620);
e.Graphics.DrawString(tb_tab3_hang.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 140, 640);
e.Graphics.DrawString(tb_tab3_film.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 130, 660);
e.Graphics.DrawString(tb_tab3_baseModel.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 160, 680);
e.Graphics.DrawString(tb_tab3_barcode.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 150, 700);
e.Graphics.DrawString(tb_tab3_upc.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 135, 720);
e.Graphics.DrawString(tb_tab3_dummy.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 150, 780);
e.Graphics.DrawString(tb_tab3_cartonLid.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 170, 740);
e.Graphics.DrawString(tb_tab3_plan.Text,
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 200, 250);
e.Graphics.DrawString(tb_tab3_pallets.Text,
new Font("Tahoma", 20, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 300, 260);
e.Graphics.DrawString(tb_tab3_masterTrays.Text,
new Font("Tahoma", 20, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 560, 260);
e.Graphics.DrawString(tb_tab3_cliente.Text,
new Font("Tahoma", 35, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 565, 420);
e.Graphics.DrawString(System.DateTime.Now.ToShortDateString(),
new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 140, 150);
e.Graphics.DrawString(Convert.ToString(dgv_tab2.SelectedCells[0].Value),
new Font("Tahoma", 35, FontStyle.Bold, GraphicsUnit.Point), Brushes.Black, 120, 170);
break;
case "fCambio2":
path = Application.StartupPath;
file = #"Resources\formats\fCambio2.JPG";
full = Path.Combine(path, file);
print_management = Image.FromFile(full);
e.Graphics.DrawImage(print_management, 0, 0);
break;
case "fCambio3":
path = Application.StartupPath;
file = #"Resources\formats\fCambio3.JPG";
full = Path.Combine(path, file);
print_management = Image.FromFile(full);
e.Graphics.DrawImage(print_management, 0, 0);
break;
}
This works correctly, however, the printing is done like this:
Print -> STOP -> Print -> STOP -> Print -> STOP
while the desired is:
Print -> Print -> Print
I know that what I did inside the printPage event wont allow me to make an speed up
on my printing process, however I would like to know how to do the multiple
print process in a single event.
(In this case print an image file with text above it, and other 2 different images)
Is it possible without third party plugins?
If it is, then, how?
In the below code in print preview it is showing all the data from DataGridView but not printing the all the data just printing the structure of page
I have attached image of both print preview and the printout
private void btnPrintPreview_Click(object sender, EventArgs e)
{
printPreviewDialog1.ShowDialog();
i = 0;
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawString("Purchase Order ", new Font("Arial", 28, FontStyle.Bold), Brushes.Black, new Point(280, 10));
e.Graphics.DrawString("POPULAR ", new Font("Arial", 20, FontStyle.Bold), Brushes.Black, new Point(10, 50));
e.Graphics.DrawString("Center", new Font("Arial", 14, FontStyle.Regular), Brushes.Black, new Point(20, 80));
e.Graphics.DrawString("Behind ,", new Font("Arial", 11, FontStyle.Regular), Brushes.Black, new Point(10, 100));
e.Graphics.DrawString(" Colony,", new Font("Arial", 11, FontStyle.Regular), Brushes.Black, new Point(10, 120));
e.Graphics.DrawString("Sh - 501.", new Font("Arial", 11, FontStyle.Regular), Brushes.Black, new Point(10, 140));
e.Graphics.DrawString("TIN : " + DateTime.Now.ToShortDateString(), new Font("Arial", 11, FontStyle.Regular), Brushes.Black, new Point(10, 160));
e.Graphics.DrawString("GST : " + DateTime.Now.ToShortDateString(), new Font("Arial", 11, FontStyle.Regular), Brushes.Black, new Point(10, 178));
e.Graphics.DrawString("P O No. : " + lblPONumber.Text.Trim(), new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(10, 197));
e.Graphics.DrawString("Date : " + date.Text, new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(506, 197));
e.Graphics.DrawString("Customer Name : " + txtSupplierName.Text.Trim(), new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(420, 70));
e.Graphics.DrawString("Company Name : " + txtSupplierCompanyName.Text.Trim(), new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(420, 90));
e.Graphics.DrawString("Mobile No. : " + txtMobile.Text.Trim(), new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(420, 110));
e.Graphics.DrawString("Address : ", new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(420, 130));
e.Graphics.DrawString(" ", new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(420, 150));
e.Graphics.DrawString("City : ", new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(420, 170));
e.Graphics.DrawString("------------------------------------------------------------------------------------------------------------------------------------", new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(10, 210));
e.Graphics.DrawString("Sl No.", new Font("Arial", 10, FontStyle.Regular), Brushes.Black, new Point(05, 227));
e.Graphics.DrawString("Item Name", new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(55, 225));
e.Graphics.DrawString("Quantity", new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(380, 225));
e.Graphics.DrawString("Unit Price", new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(510, 225));
e.Graphics.DrawString("Total", new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(660, 225));
e.Graphics.DrawString("------------------------------------------------------------------------------------------------------------------------------------", new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(10, 235));
int ypos = 250;
while (i < dataGridView1.Rows.Count)
{
if (ypos > e.MarginBounds.Height)
{
ypos = 250;
e.HasMorePages = true;
return;
}
numberofitemsprinted++;
SlNumber++;
e.Graphics.DrawString(SlNumber.ToString(), new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(10, ypos));
e.Graphics.DrawString(dataGridView1.Rows[i].Cells[0].FormattedValue.ToString(), new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(60, ypos));
e.Graphics.DrawString(dataGridView1.Rows[i].Cells[3].FormattedValue.ToString(), new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(397, ypos));
e.Graphics.DrawString(dataGridView1.Rows[i].Cells[2].FormattedValue.ToString(), new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(530, ypos));
e.Graphics.DrawString(dataGridView1.Rows[i].Cells[4].FormattedValue.ToString(), new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(670, ypos));
i++;
ypos = ypos + 30;
}
e.Graphics.DrawString("------------------------------------------------------------------------------------------------------------------------------------", new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(10, ypos));
e.Graphics.DrawString("Total Amount : " + txtTotalSum.Text.Trim(), new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(510, ypos + 30));
e.Graphics.DrawString("Amount in Words : " + txtTotalSumWords.Text.Trim(), new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(200, ypos + 120));
numberofitemsperpage = 0;
numberofitemsprinted = 0;
SlNumber = 0;
}
private void btnPrint_Click(object sender, EventArgs e)
{
printDocument1.Print();
}
You need to reset the variable i before the printing.
It looks as if the PrintPage is called once for the preview and then, without i being reset, again for the actual printing..
This should help:
private void btnPrint_Click(object sender, EventArgs e)
{
i = 0;
printDocument1.Print();
}
I would also strongly suggest to change the name i to something more explicit like currentPrintRow..
I have several outputs for my datas and want to create one fill-Object for any output-possibility. For example PrintDocument and Bitmap. Thats works with Graphics-Object, but the result is different.
My test method for fill graphics:
protected void fillGraphics(Graphics g)
{
g.PageUnit = GraphicsUnit.Pixel;
Pen pen = new Pen(Brushes.Black, 3);
g.DrawRectangle(pen, 100, 100, 300, 300);
g.DrawString("Wichtig!", new System.Drawing.Font(FontFamily.GenericSansSerif, 16), new SolidBrush(Color.Black), 120, 120);
}
I have created a venn diagram which looks like this,
I have also created regions for handling clicks on each part of venn. Left / Right and common two parts. Here is the code I have,
private void panelControlVennDiagram_Paint(object sender, PaintEventArgs e)
{
Rectangle leftVenn = new Rectangle(20, 50, 130, 130);
Rectangle rightVenn = new Rectangle(60, 50, 130, 130);
commonRegion = new Region();
Pen pen = new Pen(Color.Black,3);
using (Brush brushLeft = new SolidBrush(leftVennColor))
{
ellipseLeftOnlyPath.AddEllipse(leftVenn);
leftOnlyRegion = new Region(ellipseLeftOnlyPath);
e.Graphics.FillEllipse(brushLeft, leftVenn);
e.Graphics.DrawEllipse(pen, leftVenn);
brushLeft.Dispose();
}
using (Brush brushRight = new SolidBrush(rightVennColor))
{
ellipseRightOnlyPath.AddEllipse(rightVenn);
rightOnlyRegion = new Region(rightVenn);
e.Graphics.FillEllipse(brushRight, rightVenn);
e.Graphics.DrawEllipse(pen, rightVenn);
brushRight.Dispose();
}
using (GraphicsPath circle_path = new GraphicsPath())
{
circle_path.AddEllipse(leftVenn);
commonRegion.Intersect(circle_path);
}
using (GraphicsPath circle_path = new GraphicsPath())
{
circle_path.AddEllipse(rightVenn);
commonRegion.Intersect(circle_path);
}
leftOnlyRegion.Exclude(commonRegion);
rightOnlyRegion.Exclude(commonRegion);
using (Brush brushCommon = new SolidBrush(commonColor))
{
e.Graphics.FillRegion(brushCommon, commonRegion);
brushCommon.Dispose();
}
using (Brush brushLeftOnly = new SolidBrush(leftRightCommonColor))
{
ellipseLeftRightCommonPath.AddEllipse(65, 80, 35, 40);
e.Graphics.FillEllipse(brushLeftOnly, 65, 80, 35, 40);
e.Graphics.DrawEllipse(pen, 65, 80, 35, 40);
brushLeftOnly.Dispose();
}
using (Brush brushRightOnly = new SolidBrush(rightLeftCommonColor))
{
ellipseRightLeftCommonPath.AddEllipse(105, 110, 35, 40);
e.Graphics.FillEllipse(brushRightOnly, 105, 110, 35, 40);
e.Graphics.DrawEllipse(pen, 105, 110, 35, 40);
brushRightOnly.Dispose();
}
Brush brush = new SolidBrush(Color.Black);
Font stringFont = new Font("Calibri", 9, FontStyle.Bold);
Font stringFontCommon = new Font("Calibri", 8, FontStyle.Bold);
e.Graphics.DrawString(leftValue.ToString(), stringFont, brush, 40, 90);
e.Graphics.DrawString(rightValue.ToString(), stringFont, brush, 160, 90);
e.Graphics.DrawString(leftRightValue.ToString(), stringFontCommon, brush, 70, 115);
e.Graphics.DrawString(rightLeftValue.ToString(), stringFontCommon, brush, 110, 115);
brush.Dispose();
stringFont.Dispose(); stringFontCommon.Dispose();
pen.Dispose();
}
This is to handle the mouse clicks. Basically I want to have a click handled only on left / right parts and not their intersection. But even with this I dont get the message box. Sometimes if I put a break point it does hit messagebox code but sometimes not.
private void panelControlVennDiagram_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
if (ellipseLeftRightCommonPath.IsVisible(e.Location))
MessageBox.Show("Left - Right Common");
else if (ellipseRightLeftCommonPath.IsVisible(e.Location))
MessageBox.Show("Right - Left Common");
else if (leftOnlyRegion.IsVisible(e.Location))
MessageBox.Show("Left Only");
else if (rightOnlyRegion.IsVisible(e.Location))
MessageBox.Show("Right Only");
}
}
Whats wrong here? Please help.
I used directly regions rather than using GraphicsPath.. It works .
leftOnlyRegion = new Region(leftVenn);