3 Pluspunkte 0 Minuspunkte

Ich zeichne Objekte auf ein Winform und habe daraus so einen Ping Ball gemacht der einfach durch den raum fliegt und an den wänden abprallt. Die Objekte die ich zeichne haben eine Breite und eine Höhe von 100px. Das Origin der Objekte liegt jeweils in deren Mittelpunkt. Wenn ich im Code soetwas wie das schreibe

if(object.position.x > window.width - object.width) {
    object.moveDirection = Movedirection.Left;
}

Dann funktioniert es zwar links aber rechts nicht. Da muss ich etwa 20px dazuberechnen

if(object.position.x > (window.width - object.width) - 20) {
    object.moveDirection = Movedirection.Left;
}

Und oben rutscht es auch aus dem Fenster raus. Wieso ist das so und wie kann ich das ändern?

von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

Du könntest die Titelleiste ausblenden.

using System;
using System.Windows.Forms;

namespace NoTitleBarForm
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            
            // Setze die FormBorderStyle-Eigenschaft auf None, um die Titelleiste zu entfernen
            this.FormBorderStyle = FormBorderStyle.None;
        }

        // Weitere Initialisierungen und Event-Handler können hier hinzugefügt werden
    }

    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new MainForm());
        }
    }
}

von (542 Punkte)  
0 Pluspunkte 0 Minuspunkte

Du kannst die Methode OnLoad in deinem Form überschreiben.

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    // Berechne die Größe der Non-Client Area (Titelleiste, Rahmen, etc.)
    int nonClientWidth = this.Width - this.ClientSize.Width;
    int nonClientHeight = this.Height - this.ClientSize.Height;

    // Setze die Gesamtgröße des Formulars
    this.Size = new System.Drawing.Size(Width + nonClientWidth, Height + nonClientHeight);
}

Damit wird die ClientSize auf die gewünschte Größe gesetzt, und dann wird die Gesamtgröße des Formulars unter Berücksichtigung der Non-Client-Bereichsgröße festgelegt.

von (776 Punkte)