Hi !
Ein Fenster hat in Vista ja rechts und links einen dünnen Rand. Jetzt hab ich in Visual Express mal in einen Frame der Breite 300 einen Button der Breite 286 mittig erstellt. Das Resultat ist, dass der Button genau bis an das Innere dieses dünnen Ränder geht. Also dachte ich mir, die müssten jeweils 7 Pixel breit sein.
Dann hab ich aber festgestellt, dass mein Button die Position -1/irgendwas hat. wenn ich aber 0/irgendwas sage, dann ist zwischen dem linken dünnen rand und dem button circa 1 Pixel platz. Komisch...
wie breit sind denn nun die beiden dünnen ränder jeweils ??
Hi,
Was meinst du denn mit einem Frame? Reden wir hier von Forms? Du kannst hier die Größe eines Fensters ohne Berücksichtigung des Rahmens mit "ClientSize" angeben.
Gruß Thomas
Ah mit ClientSize klappts !
Jetzt hab ich noch eine kleine Frage. Ich habe eine Art Taschenrechner Ausgabe, in der der Taschenrechner das Ergebnis schreibt. Jetzt dachte ich, dafür nehme ich am besten ein Label. Leider lässt sich die Size des Labels aber nicht ändern... Sie will umbedingt z.B. eine Width von 35 haben...
Ist Label für die Aufgabe richtig und wenn ja, warum kann ich denn die Grße nicht ändern?
Hallo sowieso,
sicher kannst su ein Label nehmen. Die größe ist - zumindest im Designer - durch die Autosize-eigenschaft bedingt. Setze diese mal auf FALSE; dann müsste die Größe frei einstellbar sein.
ahh, perfekt!
Jetzt hab ich mir die ganzen properties eines Labels mal angeschaut. Nur eines vermisse ich irgendwie. Wie kann ich denn die Größe des Textes festlegen, der in einem Label steht ??
Jetzt hab ich mir die ganzen properties eines Labels mal angeschaut.
dort müsstest du dann auch die Font-eigenschaft gefunden haben. (Deren Größe naturlich veränderbar ist)
ohje, ich hatte das doch tatsächlich übersehen...sorry dafür.
Was ich mich aber noch frage, ist, welche margin werte die schrift selber hat. das müsste ich nämlich wissen, um die Schriftgröße der Height des Labels anzupassen. Die Schrift soll nämlich schön mittig im Label liegen. Es gibt tatsächlich einen Abstand vom oberen Rand des Labels zum oberen Anfang der Schrift im Label.
Also wenn ich das wieder übersehen habe, fresse ich meinen Hut..
na dann guten Appetit 😁
du findest unter den Eigenschaften auch die Eigenschaft "TextAlign", die die Ausrichtung des Textes festlegt. Ansonsten würde ich dich auf "Padding" verweisen womit du die Position des Textes natürlich pixelgenau einstellen kannst.
na, ich wart mit dem hut noch kurz 😉 denn auch wenn alle paddings 0 sind, gibt es zwischen dem oberen ende des textes und dem oberen ende des labels einen Abstand (den es unten nicht gibt). Wie kann ich denn raus kriegen, wie groß der ist?
hm... 🤔
Spontan würde ich jetzt sagen, dass das von der Schriftgröße abhängt, aber wie man den jetzt genau ermittelt, weiß ich nicht. (Ich muss zugeben, dass ich mir vorher darüber noch nie gedanken gemacht habe)
hm... 🤔
Spontan würde ich jetzt sagen, dass das von der Schriftgröße abhängt, aber wie man den jetzt genau ermittelt, weiß ich nicht. (Ich muss zugeben, dass ich mir vorher darüber noch nie gedanken gemacht habe)
Das geht ca. wie folgt 🙂
using (Graphics gfx = new Graphics())
{
SizeF FontSize = gfx.MeasureString("TEXT", <Font>);
}
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
Hallo Andreas.May,
wie man die Größe einer Font berechnet weiß ich bereits, aber es ging ja um den Abstand zwischen oberer Labelgrenze und dem "oberen Ende" der Schrift,
denn auch wenn alle paddings 0 sind, gibt es zwischen dem oberen ende des textes und dem oberen ende des labels einen Abstand
der ja, wenn Padding = 0 auch null sein müsste.
Ich habe aber keinen Weg gefunden diesen zu ermitteln.
Hrm, grübel
Den Abstand zwischen DeviceContext und Control.Size zu ermitteln bringt dir ja leider nichts, da ihn nicht raus bekommst. Der ist einfach fest vorhanden.
Jetzt kannst höchstens von Label ableiten und die OnPaint Methode überschreiben und schauen ob evtl ne protected Methode mit DrawString oder ähnliches findest die dann um das base.Draw ausklammerst. Oder du machst ein UserControl das dann komplett selbst neu aufbaust umd das Label zu ersetzen. Auch mit der Win32 API kannst in den DeviceContext höchstens reinmalen. Aber positionierungen ersetzen phuu, nie probiert.
Evtl gibts da ja etwas um den DeviceContext umzupositionieren, müsstest aber suchen (GetHDC usw.).
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(