Entwickler-Ecke

WinForms - Klick-/Doppelklick-Ereignishandling bei PictureBox


der.flori - Mo 21.07.08 11:38
Titel: Klick-/Doppelklick-Ereignishandling bei PictureBox
Hallo,

ich stehe vor folgendem Problem:
ich habe eine PictureBox und dafür jeweils ein Klick-/DoppelKlick-Event registriert.

Beim einfachen Klick soll ein Rahmen (BorderStyle.FixedSingle) um die Box gesetzt werden, beim Doppelklick eine Anwendung (bis jetzt nur eine MessageBox) gestartet werden.

Leider wird das Doppelklick-Ereignis jedoch nie ausgelöst.
Das is für mich unverständlich, weil beim Windows-Explorer gibt es ja die gleiche Funktionalität!
--> Beim einfachen Klick markieren und bei Doppelklick öffnen.

Gibt es eine Lösung für dieses Problem?

Es funktioniert jedoch einwandfrei, wenn ich den Rahmen weglasse und z.B. nur einen Konsolentext beim Klick-Ereignis ausgeben lasse.


Christian S. - Mo 21.07.08 11:44

Hallo und :welcome:!

Ich habe es gerade mal getestet und bei mir geht das einwandfrei. Am Besten zeigst Du mal die relevanten Quelltext-Teile.

Außerdem solltest Du prüfen, ob die Events auch richtig mit den entsprechenden Methoden verknüpft sind.

Grüße
Christian


der.flori - Mo 21.07.08 12:12

Hier ein vereinfachter Codeausschnitt:

Die PictureBoxen werden dynamisch mit der Methode createLokBild() erzeugt und auf ein Panel "pGalerie" gelegt!



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
public void createLokBilder() 
{
  // dynamisches Erzeugen der PictureBox
  PictureBox LokBild = this.createLokBild(.......);
  LokBild.Location = new Point(x,y);

  // Ereignisse
  LokBild.DoubleClick += new EventHandler(LokBild_DoubleClick);
  LokBild.Click += new EventHandler(LokBild_Click);

  pGalerie.Controls.Add(LokBild);
}


private void LokBild_DoubleClick(object sender, EventArgs e)
{
  MessageBox.Show("Doppel-Klick");
}

private void LokBild_Click(object sender, EventArgs e)
{
  PictureBox pb = (PictureBox)sender;

  if (pb.BorderStyle == BorderStyle.FixedSingle)
    pb.BorderStyle = BorderStyle.None;
  else
    pb.BorderStyle = BorderStyle.FixedSingle;
}


der.flori - Mi 23.07.08 11:05

Leider wird das Event für den DoppelKlick nie aufgerufen!

Ich bin deshalb immer noch ratlos, weil die Logik eigentlich stimmen müsste.