Feedback

C# - WPF Klick mit Linker Maustaste auf ein Shape-Objekt registrieren.

Veröffentlicht von am 11.02.2014
(0 Bewertungen)
Simuliert ein Klickereignis (Linke Maustaste) für ein Shape-Objekt.
GFU-Schulungen  [Anzeige]

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

/// <summary>
/// Verwaltet die nötigen Einstellungen zum Auslösen eines Linksklicks auf einer (un-)transformierten Form.
/// </summary>
public class ShapeClickHandler
{
    /// <summary>
    /// Ein Action&lt;Shape>-Delegate.
    /// </summary>
    public delegate void OnClickAction(Shape shape);

    /// <summary>
    /// Wird aufgerufen, wenn die transformierte Form geklickt wird per linker Maustaste.
    /// </summary>
    public event OnClickAction OnClick;

    private bool isMouseOverArrow;
    private bool isMouseLeftDown;
    private bool isMouseLeave;
    private bool isMouseLeftUp;

    private readonly Shape view;

    public ShapeClickHandler(Shape shape)
    {
        view = shape;
        shape.IsHitTestVisible = true;
        shape.Focusable = true;
        shape.MouseEnter += onArrowEnter;
        shape.MouseLeave += onArrowLeave;
        shape.MouseLeftButtonDown += onArrowMouseDown;
        shape.MouseLeftButtonUp += onArrowMouseUp;
    }

    private void onArrowEnter(object sender, MouseEventArgs e)
    {
        isMouseOverArrow = true;
        isMouseLeave = false;
    }

    private void onArrowLeave(object sender, MouseEventArgs e)
    {
        isMouseLeave = true;
        if (isMouseLeftUp)
        {
            isMouseOverArrow = false;
        }
    }

    private void onArrowMouseDown(object sender, MouseButtonEventArgs e)
    {
        isMouseLeftUp = false;

        if (isMouseOverArrow)
        {
            isMouseLeftDown = true;

            // Unbedingt!
            e.Handled = true;
        }
    }

    private void onArrowMouseUp(object sender, MouseButtonEventArgs e)
    {
        if (isMouseOverArrow && !isMouseLeave && isMouseLeftDown)
        {
            // Klick
            var handler = OnClick;
            if (handler != null)
            {
                view.Dispatcher.Invoke(new Action(() => handler.BeginInvoke(view, null, null)));
            }
        }

        // Auflösen!
        isMouseLeftUp = true;
        isMouseLeftDown = false;

        if (isMouseLeave)
        {
            isMouseOverArrow = false;
        }
    }
}
Abgelegt unter Shape, Klick, Linksklick, Maus, Event, Ereignis, Geometry, WPF.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!