Feedback

C# - Fenster am Bildschirmrand andocken (auch WPF)

Veröffentlicht von am 23.05.2013
(1 Bewertungen)
Einige Programme, wie beispielsweise Skype, heften sich an den Bildschirmrand an, wenn man das Fenster in die Nähe schiebt. Diese Erweiterungsmethode muss im LocationChanged-Eventhandler aufgerufen werden. Die Parameter sind in der XML-Doku näher beschrieben.

Hinweis: Diese Methode lässt auch relativ leicht für WPF umsetzen.
GFU-Schulungen  [Anzeige]

ASP.NET Core - Der Einstieg

In nur 3 Tagen lernen Sie, wie man mit ASP.NET Core und den Technologien MVC, Entity Framework, WebAPI und Razor professionelle Web-Anwendungs-Architekturen aufbaut. Diese Schulung ist der perfekte Einstieg, um datengetriebene und präsentations-orientierte Applikationen auf Basis der ASP.NET Core Plattform zu erstellen.

XML und .NET Überblick

Um auf dem neuesten Wissensstand zu sein, sollten Sie unser aktuelles ASP .NET Komplett Seminar belegen.
Nach dem Seminar kennen Sie die wichtigsten Strömungen in der Software-Technologie

/// <summary>
/// Überprüft ob eine Form in der Nähe von einem Bildschirmrand ist.
/// </summary>
/// <param name="frm">Die Form, deren Position überprüft werden soll.</param>
/// <param name="px">Die Mögliche Differenz vom Rand in Pixel.</param>
/// <param name="snap"><c>True</c>, wenn das Fenster an den entsprechenden Rand verschoben werden soll, ansonsten <c>>False</c>.</param>
/// <returns><c>True</c>, wenn das Fenster einen BHildschirmrand berührt oder sich in der Nähe befindet, andernfalls <c>False</c>.</returns>
/// <exception cref="System.ArgumentNullException">Wird ausgelöst, wenn die Form <c>null</c> ist.</exception>
/// <exception cref="System.ArgumentOutOfRangeException">Wird ausgelöst, wenn px kleiner als 0 ist.</exception>
public static bool IsTouchingScreenBorder(this Form frm, int px, bool snap)
{
    if (frm == null)
        throw new ArgumentNullException("frm", "Condition: frm != null");
    if (px < 0)
        throw new ArgumentOutOfRangeException("Condition: px >= 0");

    bool result = false;
    bool v = false, h = false;
    foreach (Screen s in Screen.AllScreens)
    {
        if (!h)
        {
            if (s.WorkingArea.Left - px < frm.Left && s.WorkingArea.Left + px > frm.Left)
            {
                if(snap)
                    frm.Left = s.WorkingArea.Left;
                h = true;
                result = true;
            }
            else if (s.WorkingArea.Right - px < frm.Right && s.WorkingArea.Right + px > frm.Right)
            {
                if(snap)
                    frm.Left = s.WorkingArea.Right - frm.Width;
                h = true;
                result = true;
            }
        }
        if (!v)
        {
            if (s.WorkingArea.Top - px < frm.Top && s.WorkingArea.Top + px > frm.Top)
            {
                if(snap)
                    frm.Top = s.WorkingArea.Top;
                v = true;
                result = true;
            }
            else if (s.WorkingArea.Bottom - px < frm.Bottom && s.WorkingArea.Bottom + px > frm.Bottom)
            {
                if(snap)
                    frm.Top = s.WorkingArea.Bottom - frm.Height;
                v = true;
                result = true;
            }
        }
        if (v && h)
            return result;
    }
    return result;
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!