Komplette Form ist unscharf

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Komplette Form ist unscharf

    Hallo,

    was kann ich tun damit die Form nicht unscharf dargestellt wird?
    Wenn ich in den Windows Einstellungen die Skalierung auf 100% habe wird alles scharf dargestellt
    aber auf 125% ist alles total unscharf.

    So sieht es bei einer Skalierung mit 100% aus


    und so bei 125%


    Ihr seht ja selbst wie unscharf die Schrift dargestellt wird.
    -... .-.. .- -.-. -.- ... .--. .. -.. . .-.
    The Leading Horse is white - the second horse is red - the third one is a black - the last one is a green.
    Wilkommen bei WinForms :)

    Windows skaliert dein WinForm Fenster zur Laufzeit. Dies kannst du in den Eigenschaften der .exe per rechtsklick umstellen.

    Was kann man nun tun?
    - WPF verwenden
    - damit leben
    - In den Eigenschaften der .exe die skalierung deaktivieren

    "aber das kann doch nicht sein, dass mein Programm jetzt immer unscharf ist":
    -> Ich habe etliche Programme, die auf meinem PC unscharf sind. Und das sind jetzt keine selbst gecodeten sondern von namhaften Herstellern. Je höher die Auflösung des Monitors, desto mehr Probleme bekommt man mit WinForms.

    Es wird noch abgefahrener, hatten wir hier erst:
    ->Layout verändert sich beim starten
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:


    - In den Eigenschaften der .exe die skalierung deaktivieren


    Hi,

    ist es denn möglich dass das Programm, mit ein paar Zeilen Code, die Eigenschaft selbst deaktiviert?
    Wär ja blöd jeden Benutzer zu bitten das selbst zu machen.
    -... .-.. .- -.-. -.- ... .--. .. -.. . .-.
    The Leading Horse is white - the second horse is red - the third one is a black - the last one is a green.
    Probiers hiermit: msdn.microsoft.com/de-de/libra…op/ms633543(v=vs.85).aspx
    Auf pinvoke.net findest du den Code, um die Funktion in dein .NET-Programm zu holen.

    Nach stackoverflow.com/questions/36…-to-work-under-windows-10 musst du dich jedoch unter Windows 10 ab- und wieder anmelden, damit es läuft.

    LG :)

    Edit: Was mir noch einfällt: Im MSDN wird empfohlen, dass man das ganze über das Manifest setzt. Das hat bei mir jedoch noch nie funktioniert. Die Funktionen SetProcessDpiAwareness(), die im MSDN ebenfalls empfohlen wird, habe ich noch nicht getestet.

    Ach ja: Du solltest die Funktion als allererste aufrufen, d.h. noch vor jedem Funktionsaufruf aus der Application-Klasse. Unter VB.NET setzt das vorraus, dass du eine eigene Main-Funktion schreibst.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ichduersie“ ()

    Ah, jetzt wird alles angezeigt so wie es sein soll.

    In die App.config fügt man folgendes ein

    XML-Quellcode

    1. <appSettings>
    2. <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    3. </appSettings>


    Und in app.manifest kommt folgendes

    XML-Quellcode

    1. <application xmlns="urn:schemas-microsoft-com:asm.v3">
    2. <windowsSettings>
    3. <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    4. </windowsSettings>
    5. </application>


    Man muss danach sein Projekt einmal neu laden damit die Änderungen auch Wirkung zeigen.

    Danke für die Hilfe.
    -... .-.. .- -.-. -.- ... .--. .. -.. . .-.
    The Leading Horse is white - the second horse is red - the third one is a black - the last one is a green.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BlackSpider“ ()

    @BlackSpider:

    In der Entwicklungsumgebung funktioniert Dein Vorschlag, sobald ich allerdings Debugge und versuche das Programm dann zu installieren, erscheint folgender Fehler:
    !!Das Manifest ist möglicherweise ungültig, oder die Datei konnte nicht geöffnet werden.!! (Ich kann das Programm aktuell also nicht mehr installieren...)

    Was genau mache ich falsch?

    Santak schrieb:

    Das Manifest ist möglicherweise ungültig
    Da stimmt wohl die Syntax dieser Datei nicht.
    Hänge sie mal an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hier der Quellcode der app.manifest:


    <?xml version="1.0" encoding="utf-8"?>
    <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
    <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
    <!-- UAC-Manifestoptionen
    Wenn Sie die Zugangsebene für das Windows-Benutzerkonto ändern möchten, ersetzen Sie den
    requestedExecutionLevel-Knoten durch eines der folgenden Elemente.

    <requestedExecutionLevel level="asInvoker" uiAccess="false" />
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    <requestedExecutionLevel level="highestAvailable" uiAccess="false" />

    Durch Angeben des requestedExecutionLevel-Knotens wird die Datei- und Registrierungsvirtualisierung deaktiviert.
    Wenn Sie Datei- und Registrierungsvirtualisierung für Abwärts-
    kompatibilität verwenden möchten, löschen Sie den requestedExecutionLevel-Knoten.
    -->
    <requestedExecutionLevel level="asInvoker" uiAccess="false" />
    </requestedPrivileges>
    </security>
    </trustInfo>

    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
    <!-- Eine Liste aller Windows-Versionen, mit denen die Anwendung kompatibel ist. Windows wählt automatisch die am stärksten kompatible Umgebung aus.-->

    <!-- Wenn die Anwendung mit Windows 7 kompatibel ist, heben Sie die Kommentierung des folgenden supportedOS-Knotens auf.-->
    <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->

    </application>
    </compatibility>


    <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
    </application>


    <!-- Designs für allgemeine Windows-Steuerelemente und -Dialogfelder (Windows XP und höher) aktivieren -->
    <!-- <dependency>
    <dependentAssembly>
    <assemblyIdentity
    type="win32"
    name="Microsoft.Windows.Common-Controls"
    version="6.0.0.0"
    processorArchitecture="*"
    publicKeyToken="6595b64144ccf1df"
    language="*"
    />
    </dependentAssembly>
    </dependency>-->

    </asmv1:assembly>
    @Santak Das Manifest ist von der Syntax her eine XML-Datei.
    Das was Du da zusammenkopiert hast, ist das nicht.
    Fang also von vorn an und erstell Dir aus einer Default-XML Deine spezielle XML-Datei.
    Du musst stets vollständige Knoten einfügen!
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    sorry, muss jetzt nochmal nachfragen, bin in Sachen app.manifest und XML absoluter "Newbie".
    Ich habe nur diesen Ausschnitt in die app.manifest kopiert-seitdem habe ich den Fehler:
    (ist es ein konkreter Fehler den ich mache?)

    <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
    </application>
    @Santak Fang mal an und markiere den Code als XML-Code (bitte beide Posts editieren).
    Nimm Dir mal eine neue app.manifest-Datei, benenne sie um in *.xml (.xml anhängen) und öffne sie im Explorer.
    Schau Dir die Struktur an und überleg, wo Deine Zeilen reinpassen.n Eigentlich sollten die inneren 3 Zeilen genügen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!