15. november 2006 - 12:29Der 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.
Virksomheder er på vej fra store sprogmodeller, der svarer på spørgsmål, til AI-agenter, der kan udføre opgaver på egen hånd. Det gør teknologien mere nyttig – og langt mere risikabel.
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.
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
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:
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.