Welcome to Dream.In.Code
Become a C# Expert!

Join 150,416 C# Programmers for FREE! Get instant access to thousands of C# experts, tutorials, code snippets, and more! There are 1,023 people online right now. Registration is fast and FREE... Join Now!




Creatig ellipse on a picturebox and making ellipse a link

 
Reply to this topicStart new topic

Creatig ellipse on a picturebox and making ellipse a link

Dumpen
24 Mar, 2008 - 09:13 AM
Post #1

New D.I.C Head
*

Joined: 21 Mar, 2008
Posts: 40

Hey im back with a new questions / problems wink2.gif

Question 1:
I have a image that is in a picturebox which is called pictureBox1

I want to read monstersetbase.txt and add small ellipses to my image. The position of the ellipse comes from my monstersetbase.txt. The image is 256x256 and the coordinates is example 125x150.

I figured out a way to write a ellipse on the picturebox. It looks like this:
CODE
        public void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            System.Drawing.Graphics g = e.Graphics;
            g.DrawEllipse(System.Drawing.Pens.Red, 125, 150, 2, 2);
        }


And on my form load:
CODE
        public void Form1_Load(object sender, EventArgs e)
        {
            pictureBox1.Paint += new PaintEventHandler(this.pictureBox1_Paint);
            this.Controls.Add(pictureBox1);
        }


Now my problem is that I cant seem to figure out how to read the txt file properly when I need all the data

If I use for example:
CODE
public void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            String line;
            String data;

            System.Drawing.Graphics g = e.Graphics;

            // Reading txt file from fileLocation
            using (StreamReader sr = new StreamReader(Convert.ToString(@fileLocation)))
            {
                while ((line = sr.ReadLine()) != null)
                {
                    // Converting line to string from txt file
                    data = Convert.ToString(line);

                    // Splitting data into piecesMap[]
                    String[] piecesMap = data.Split('\t');

                    // Converting x/y cord to float from string
                    float xCord = float.Parse(piecesMap[3]);
                    float yCord = float.Parse(piecesMap[4]);

                    // Displaying ellipse
                    g.DrawEllipse(System.Drawing.Pens.Red, xCord, yCord, 2, 2);
                }
            }

        }


then im getting the error:
Index was outside the bounds of the array.

Any suggestions?

My monstersetbase.txt:
CODE
3
0    0    30    78    60    240    240    -1    5    // Red Dragon
1    0    30    185    132    185    132    -1    10      // Golden Titan
2    0    30    183    128    188    135    -1    10      // Golden Solider
3    0    30    10    10    240    240    -1    12      // Golden Goblin
4    0    30    10    10    240    240    -1    8     // Golden Dragon
5    0    30    185    132    185    132    -1    7     // Golden Lizard King
6    0    30    132    83    132    83    -1    10      // Golden Vepar
7    0    30    183    128    188    135    -1    6     // Golden Tantalos
8    0    30    132    83    138    90    -1    10      // Golden Wheel
end
1
9    33    10    85    162    95    168    -1    5    // Kundun Demon
10    29    30    40    113    45    116    -1    3    // Kundum Demon
11    41    5    126    160    125    161    -1    2    // Kundum Demon
12    38    5    106    161    111    160    -1    2    // Kundum Demon
end


78 and 60 is the x and y coordinates in the text above.

Question 2:
After I insert the ellipse I want it to be "link" like when I click on it something happens
I also want to display a tooltil when I have the mouse over my ellipse is that possible?
User is offlineProfile CardPM
+Quote Post

PsychoCoder
RE: Creatig Ellipse On A Picturebox And Making Ellipse A Link
25 Mar, 2008 - 07:47 AM
Post #2

using DIC.Core;
Group Icon

Joined: 26 Jul, 2007
Posts: 9,483



Thanked: 161 times
Dream Kudos: 9075
Expert In: VB, VB.Net, C#, SQL, ASP, ASP.Net, Web Development, HTML, CSS, Win32 API, Javascript, mySQL, J#, Boo.Net

My Contributions
You're getting that error because you're going outside the size of the file. Use the Peek Method of the StreamReader to make sure you're not past the end of the file

csharp

using (StreamReader sr = new StreamReader(Convert.ToString(@fileLocation)))
{
while(!(sr.Peek() = -1))
{
while ((line = sr.ReadLine()) != null)
{
// Converting line to string from txt file
data = Convert.ToString(line);

// Splitting data into piecesMap[]
String[] piecesMap = data.Split('\t');

// Converting x/y cord to float from string
float xCord = float.Parse(piecesMap[3]);
float yCord = float.Parse(piecesMap[4]);

// Displaying ellipse
g.DrawEllipse(System.Drawing.Pens.Red, xCord, yCord, 2, 2);
}
}
}


User is offlineProfile CardPM
+Quote Post

Dumpen
RE: Creatig Ellipse On A Picturebox And Making Ellipse A Link
26 Mar, 2008 - 01:17 PM
Post #3

New D.I.C Head
*

Joined: 21 Mar, 2008
Posts: 40

Thank you for the answear(s)

Now I got it writing on the picturebox and when clicking on ellipse it shows a messagebox

But it only works for the last ellipse because the variable gp changes <.<

Any idea?

Gp is defined here:
GraphicsPath gp = new GraphicsPath();
In the beginning of the program

Here is the code:
CODE
public void readFileToPaint()

{

string line;

string data;

string fileLocation = @"D:\msbEditor\monstersetbase.txt";

using (StreamReader sr = new StreamReader(Convert.ToString(@fileLocation)))

{

while ((line = sr.ReadLine()) != null)

{

// Get rid of any trailing spaces

line = line.TrimEnd();

// if line is blank skip to next line

if (line == "") continue;

data = line; // don't need a conversion here as line is a string

// Splitting data into piecesMap[]

String[] piecesMap = data.Split('\t');

// if piecesMap only contains one element, skip to next line

if (piecesMap.Length == 1) continue;

Rectangle rect = new Rectangle(Convert.ToInt16(piecesMap[3]), Convert.ToInt16(piecesMap[4]), 4, 4);

gp.AddEllipse(rect);

}

}

}

public void pictureBox1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

g.DrawPath(new Pen(Color.Red), gp);

}

private void Form1_Load(object sender, EventArgs e)

{

readFileToPaint();

pictureBox1.Paint += new PaintEventHandler(this.pictureBox1_Paint);

this.Controls.Add(pictureBox1);

}

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)

{

if (gp.IsVisible(e.X, e.Y))

{

MessageBox.Show("");

}

}


This post has been edited by Dumpen: 27 Mar, 2008 - 05:24 AM
User is offlineProfile CardPM
+Quote Post

Fast ReplyReply to this topicStart new topic
Time is now: 1/9/09 08:05PM

Be Social

Dream.In.Code RSS Feed Dream.In.Code LinkedIn Group Follow Us On Twitter

Live C# Help!

C# Tutorials

Reference Sheets

C# Snippets

DIC Chatroom

Bye Bye Ads

Monthly Drawing

Thumb Drive

Top Contributors

Top 10 Kudos This Month