Avatar billede alex_sleiborg Nybegynder
15. november 2006 - 12:29 Der er 2 kommentarer og
1 løsning

Lave en event udfra noget der er tegnet med gdi

Jeg har tegnet noget forskellige labels med GDI+, de forskellige kordinater bliver så smidt ind i en arraylist. Hvor jeg så løber igennem nogle løkker for at se om man klikker i nærheden af det punkt. Kan det gøres på en smartere måde???

        private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
              foreach (int x in StaticGateway.SaveWeekNumPos)
              {
                  for (int i = 0; i <= 15; i++)
                  {
                      if (x == e.X - i)
                      {
                          for (int k = 0; k <= 15; k++)
                          {
                              if(0 == e.Y - k)
                              MessageBox.Show("Nummer" + x + "");
                          }
                      }
                  }
                }
            }
        }

Det virker fint, men synes bare ikke det er så elegant.
Avatar billede prec Nybegynder
16. november 2006 - 12:32 #1
Hvis du kender x,y coords på det punkt du vil teste, kan du bruge følgende:

Rectangle r = new Rectangle(x, y, 1, 1); // et punkt der fylder en pixel
r = r.Expand(5); // expand rectangle med 5 pixels i alle retninger for at gøre hit muligheden større
if(r.Contains(e.Location)) // test om markør positionen er indenfor din hit rectangle
    MessageBox.Show("Hit: " + e.Location.ToString());


Denne kode er skrevet ud fra hovedet, så det kan godt være der er småfejl i.

P.S for at du kan få en applikation som dette til at virke bør du opbygge en mere kompleks object model der bla. tager højde for Z-Order... for hvis 2 punkter ligger i nærheden af hinanden, vil du ramme begge punkter, hvilket muligvis ikke er ønsket.
Avatar billede alex_sleiborg Nybegynder
16. november 2006 - 13:17 #2
Perfekt. Det var lige det med den rectangle jeg søgte, mente godt nok der var en smartere måde at lave den på. I stedet for at bruge en masse løkker. Smid et svar
Avatar billede prec Nybegynder
18. november 2006 - 01:08 #3
Hvis du skal ud i at lave nogle mere komplekse figurer senere, måske en circel eller lign. kan jeg anbefale at du kigger på GraphicsPath til hit testing.. Det hele ligger i funktionerne IsVisible og IsOutlineVisible.. læs om det her:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdrawingdrawing2dgraphicspathmemberstopic.asp
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester