Bild mit Schaltflächen



  • Hi,

    ich habe ein Windows Form projekt und will in ein usercontrol ein bild einfügen. wenn man nun auf bestimmte teile des bildes klickt, so soll sich das so verhalten, wie wenn ich auf ein button klicke. wie kann ich das machen? oder geht das überhaupt? ich kenn es von html, da ist sowas möglich. da kann man so flächen definieren.

    Vielen dank im voraus.

    Grüße,



  • Hallo StudentJojo,

    klar geht das, du meldest dich einfach am MousDown - und Click - Event des Formulars bzw. Usercontrols an. Und Schreibst in etwas sowas in die Eventhandler.

    private void Form1_Click(object sender, System.EventArgs e)
    		{
    			//Die Fläche definieren in der du den Klick erwartest
    			Rectangle rec = new Rectangle( 50, 50, 50, 50 );
    			//Prüfen ob die Mausposiion in dieser Fläche liegt
    			if( rec.Contains(mouse_offset) )
    			{
    				//Aktionen durchführen
    				MessageBox.Show("Juhu geklickt!!!");
    			}
    		}
    
    		private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    		{
    			//Die Maus Position merken
    			mouse_offset = new Point(e.X, e.Y);
    		}
    
    		private Point mouse_offset;
    

    Grüße Sven



  • danke zunächst einmal.
    geht es auch, das man flächen die nicht rechteckig sind definiert?
    ich will das z.B. für ne europakarte machen, wo ma jeweils ein land anklicken kann.



  • Ja natürlich geht das, aber es ist ziemlich viel arbeit diese Fläche zu definieren. Ich würde mir da ein Tool zusammenbauen mit welchem ich die Eckpunkte der Länder definiere, und diese dann anhand eines "GraphicsPath" Objektes prüfen. Siehe das Beispiel.

    private void Form1_Click(object sender, System.EventArgs e)
    		{
    			//Die Fläche definieren in der du den Klick erwartest
    			System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
    			gp.AddPolygon
    				(
    				new Point[]
    				{
    					new Point(10,10),
    					new Point(10,50),
    					new Point(50,50)
    				}
    				);
    
    			//Prüfen ob die Mausposiion in dieser Fläche liegt
    			if( gp.IsVisible(mouse_offset) )
    			{
    				//Aktionen durchführen
    				MessageBox.Show("Juhu geklickt!!!");
    			}
    		}
    
    		private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    		{
    			//Die Maus Position merken
    			mouse_offset = new Point(e.X, e.Y);
    		}
    
    		private Point mouse_offset;
    

    <edit>
    Vielleicht noch eine kleine Idee.
    Je nachdem wie die Karte aussieht kannst du vielleicht auch anhand der Farbe unterscheiden welches Land gerade darunter liegt.
    </edit>

    Grüße



  • die farb idee spricht mich an 🙂

    danke für den tipp.


Anmelden zum Antworten