Hallo zusammen,
ich habe aktuell ein kleines Problem mit einem kleinen Tool was ich schreibe.
Die Form des Tools soll sich am rechten Bildschirmrand befinden.
Breite der Form = 100px
Höhe der Form = Bildschirmauflösung - Taskbar.
Das klappt soweit auch gut.
Nur scheint Windows irgendwie noch etwas Breite an die Form anzufügen, denn ich habe immer einen Rest auf dem zweiten Monitor...
Location(X) stimmt mit 100px => 1680-100=1580
Auch die Size passt mit 100px.
Nur wird mir immer ein Teil angezeigt.
Dazu noch ein Screenshot.
Dort wo der "Bruch" des Hintergrundbildes zu erkennen ist, sind auch die 100 Form eigentlich zu Ende und der Anfang des zweiten Monitors. (Taskbar geht durch, da UltraMon im Einsatz).
Vielleicht hat ja jemand eine Idee 😃
FormBorderStyle = None
private void setFormSizeAndLocation()
{
//Location
int taskbarHeight = Screen.PrimaryScreen.Bounds.Bottom - Screen.PrimaryScreen.WorkingArea.Bottom;
//1680
int screenWidth = Screen.PrimaryScreen.Bounds.Right;
int screenHeight = SystemInformation.PrimaryMonitorSize.Height;
//1580 (1680-100)
int x = screenWidth - BARWIDTH;
int y = 0;
Point location = new Point(x, y);
this.Location = location;
//Size
int height = screenHeight - taskbarHeight;
this.Size = new Size(BARWIDTH, height);
}
Was sagt denn der Debugger dazu? Irgendwo muss die zusätzliche Breite ja herkommen und wenn man das ganze mal Schritt für Schritt durchgeht, springt es einen meistens auch an. Am Code selbst kann ich jetzt nichts falsches sehen, ausser eventuell statt Bounds.Right mit Bounds.Width arbeiten.
Ist vllt. MinimumSize der Form gesetzt?
Hey!
Vielen Dank erstmal für Eure Antworten 😃
Laut dem Debugger ist zu jeder Zeit die Position, als auch Größe der Form korrekt.
x = 1580, Breite = 100
MinimumSize steht auf 0;0
Bin echt ratlos 😕
Hallo audhen,
also wenn ich mir die Size direkt nach dem Setzen anschaue, ist sie 112. Ich denke, das ist eine von Windows bestimmte Mindestbreite des Forms. Und natürlich ragt das Form dann (12 Pixel) über den Hauptschirm hinaus. Ich denke, dass man das auch im Debugger sehen müsste, aber wenn da wirklich nicht, hätte man es leicht in einem Screenshot ermitteln können.
Wenn du BARWIDTH auf einen Wert über der Mindestbreite festlegst, ragt nichts mehr heraus.
Noch besser ist, wenn du die Location erst nach dem Setzen von Size setzt und dabei x auf screenWidth - Width festlegst, also für die Berechnung die tatsächliche und nicht die gewünschte Breite des Form verwendest.
herbivore
Hallo herbivore,
Du hast mir die Lösung gebracht 😄
Mindestbreite scheint bei mir 132px zu sein.
Dies gilt auch für alle Forms mit FormBorderStyle != None.
Zwar gebe ich gleich direkt im Designer an, dass dem so ist, jedoch wird das wieder überschrieben...
Daher hab ich die Methode nun im FormLoad-Listener untergebracht - siehe da, es funktioniert mit den 100px.
Deinen Vorschlag beherzige ich nun auch 😃 Erst Size, dann Location.
Vielen vielen Dank an alle und schöne Ostertage!