Laden...

Klick und Doppelklick differenzieren

Erstellt von Frokuss vor 5 Jahren Letzter Beitrag vor 4 Jahren 1.670 Views
F
Frokuss Themenstarter:in
158 Beiträge seit 2015
vor 5 Jahren
Klick und Doppelklick differenzieren

Hallo Leute,

vermutlich ist das folgende ein alter Hut für euch... Gibt es eine Möglichkeit dass das Klick-Event nicht bei einem Doppelklick-Event getriggert wird?

Aber vielleicht erst einmal was ich vor habe:
Ich habe mit eine "Liste" (Panel) mit einer "Überschrift" (Label) erstellt. Mit dem klicken auf die Überschrift, wird die Liste auf/zu geklappt, so dass nur noch die Überschrift in der Liste zu sehen ist. Nun möchte ich allerdings, dass bei einem Doppelklick auf die Überschrift dieses Label durch ein Textfeld augetauscht wird, damit ich die Überschrift der Liste ändern kann. Allerdings werden beim Doppelklick beide Events getriggert...

Hoffe ich könnt mir helfen 😃 Lieben Gruß
Frokuss

4.939 Beiträge seit 2008
vor 5 Jahren

Das ist so nicht vorgesehen. Beim ersten Klick wird sofort eine Message (WM_LBUTTONDOWN) versendet, so daß ein folgender Klick entweder zu einem Doppelklick (wenn die Zeitspanne kurz genug ist), oder aber wieder als Einzelklick gesendet wird.

Du müßtest selber beim Klick einen Timer starten und wenn in der Zeit kein Doppelklick erfolgt ist, dann den Einzelklick durchführen (d.h. auch der Einzelklick wäre dann immer verzögert).

Wäre es daher nicht besser, evtl. die rechte oder mittlere Maustaste (anstatt des Doppelklicks) zu benutzen (oder alternativ noch mit Betätigung der Shift, Strg oder Alt-Taste)?

F
Frokuss Themenstarter:in
158 Beiträge seit 2015
vor 5 Jahren

Vieln Dank für deine Antwort 😃 In meinem Fall ist die rechte Maustaste bereits für ein Kontextmenü reserviert 😄 Bliebe also noch die mittlere Maustaste übrig, was ich persöhnlich nicht so schön finde.

Ich werde dann mal gucken, dass ich mir wohl sowas wie ein Mousepress zusammenschustere, das erst nach ca. 0,5 Sekunden (oder so) aktiv wird... Dann könnte ich das ganze im Klick-Event abfangen... Ist zwar dann nicht so ganz Windows-Like, sondern mehr Handy-Feeling... aber was solls 😄

Danke dir auf jeden Fall!
Frokuss

F
Frokuss Themenstarter:in
158 Beiträge seit 2015
vor 5 Jahren

So, ich habe das jetzt wie folgt realisiert:

//Events dem besagten Label zuweisen
if(ableTxt){
	//lab.DoubleClick += new EventHandler(Evt_Umbenennen);
	lab.MouseDown += new MouseEventHandler(Evt_MousePressDown);
	lab.MouseUp += new MouseEventHandler(Evt_MousePressUp);
}
//Wird vor dem Klick-Event getriggert
private void Evt_MousePressDown(object sender, MouseEventArgs evt){
	_mousePressed = true;		//bool
	_tempDate = DateTime.Now;	//DateTime
}

//wird nach dem Klick-Event getriggert
private void Evt_MousePressUp(object sender, MouseEventArgs evt){
	_mousePressed = false;
}

//Klick-Event
public void Evt_MiniMaximieren(object sender, EventArgs evt){
	MouseEventArgs e = (MouseEventArgs)evt;//Ja.. das geht!
	
	if(e.Button.Equals(MouseButtons.Left)){
		TimeSpan dif = DateTime.Now - _tempDate;
		
		if(ableTxt && dif > new TimeSpan(2500000)){
			Evt_Umbenennen(sender, evt);
		}
//...
//...

Gruß Frokuss

R
24 Beiträge seit 2019
vor 4 Jahren

Statt über ein Event, hättest auch einfach die Messages auswerten können.
Windows arbeitet intern nur mit Messages und schaut bei welcher Nummer er welches Event aufrufen muss.


 protected override void WndProc(ref Message m)
{
      switch (m.Msg)
      {
            case 513:   // WM_LBUTTONDOWN
            {  
                 ...          
            }
            break;
      }
}

463 Beiträge seit 2009
vor 4 Jahren
  
if(ableTxt && dif > new TimeSpan(2500000)){  
  

Nur als Hinweis - dir ist bewusst, dass der User diese Zeit über die Windows Konfiguration selbst einstellen kann? Somit bevormundest du hier deine User und wirst u.U. Unzufriedenheit erreichen, da aus Usersicht das Programm nicht macht was es soll....