none
Wie kann ich eine Form in Autoscalemode setzen? RRS feed

  • Frage

  • Neue Frage :D

    Ich habe mit Primalforms eine simple From erstellt, und möchte, das diese sich mittels Autoscalemode automatisch anpasst.

    Wenn ich nähmlich (optisch) größere Funktionen benutze können diese auf kleineren Bildschirmen oft nicht ganz angezeigt werden und deshalb würde ich gerne wissen wie ich Autoscalemode anwenden kann?:)

    Es ist doch bestimmt möglich auf eine Funktion (In diesem Fall GenerateForm) den Autoscalemode anzuwenden und damit alle Buttons, Listboxen, etc. in dieser Funktion automatisch skalieren zu lassen!?

    #Generated Form Function function GenerateForm { ######################################################################## # Code Generated By: SAPIEN Technologies PrimalForms (Community Edition) v1.0.10.0 # Generated On: 19.07.2016 13:41 # Generated By: Kschneider ######################################################################## #region Import the Assemblies [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null #endregion #region Generated Form Objects $form1 = New-Object System.Windows.Forms.Form $label1 = New-Object System.Windows.Forms.Label $listBox1 = New-Object System.Windows.Forms.ListBox $button1 = New-Object System.Windows.Forms.Button $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState #endregion Generated Form Objects #---------------------------------------------- #Generated Event Script Blocks #---------------------------------------------- #Provide Custom Code for events specified in PrimalForms. $button1_OnClick= { #TODO: Place custom script here } $OnLoadForm_StateCorrection= {#Correct the initial state of the form to prevent the .Net maximized form issue $form1.WindowState = $InitialFormWindowState } #---------------------------------------------- #region Generated Form Code $System_Drawing_Size = New-Object System.Drawing.Size $System_Drawing_Size.Height = 362 $System_Drawing_Size.Width = 684 $form1.ClientSize = $System_Drawing_Size $form1.DataBindings.DefaultDataSourceUpdateMode = 0 $form1.Name = "form1" $form1.Text = "Primal Form" $label1.BorderStyle = 1 $label1.DataBindings.DefaultDataSourceUpdateMode = 0 $System_Drawing_Point = New-Object System.Drawing.Point $System_Drawing_Point.X = 12 $System_Drawing_Point.Y = 12 $label1.Location = $System_Drawing_Point $label1.Name = "label1" $System_Drawing_Size = New-Object System.Drawing.Size $System_Drawing_Size.Height = 80 $System_Drawing_Size.Width = 423 $label1.Size = $System_Drawing_Size $label1.TabIndex = 2 $label1.Text = "label1" $form1.Controls.Add($label1) $listBox1.DataBindings.DefaultDataSourceUpdateMode = 0 $listBox1.FormattingEnabled = $True $System_Drawing_Point = New-Object System.Drawing.Point $System_Drawing_Point.X = 452 $System_Drawing_Point.Y = 12 $listBox1.Location = $System_Drawing_Point $listBox1.Name = "listBox1" $System_Drawing_Size = New-Object System.Drawing.Size $System_Drawing_Size.Height = 342 $System_Drawing_Size.Width = 220 $listBox1.Size = $System_Drawing_Size $listBox1.TabIndex = 1 $form1.Controls.Add($listBox1) $button1.DataBindings.DefaultDataSourceUpdateMode = 0 $System_Drawing_Point = New-Object System.Drawing.Point $System_Drawing_Point.X = 12 $System_Drawing_Point.Y = 296 $button1.Location = $System_Drawing_Point $button1.Name = "button1" $System_Drawing_Size = New-Object System.Drawing.Size $System_Drawing_Size.Height = 54 $System_Drawing_Size.Width = 125 $button1.Size = $System_Drawing_Size $button1.TabIndex = 0 $button1.Text = "button1" $button1.UseVisualStyleBackColor = $True $button1.add_Click($button1_OnClick) $form1.Controls.Add($button1) #endregion Generated Form Code #Save the initial state of the form $InitialFormWindowState = $form1.WindowState #Init the OnLoad event to correct the initial state of the form $form1.add_Load($OnLoadForm_StateCorrection) #Show the Form $form1.ShowDialog()| Out-Null } #End Function #Call the Function GenerateForm

    Danke für jede Hilfe

    Grüße


    • Bearbeitet MCMaggi Donnerstag, 21. Juli 2016 06:45
    Dienstag, 19. Juli 2016 11:43

Antworten

  • So einfach wie du dir das vorstellst, geht das leider nicht. Grundsätzlich steuerst du das über die Anchor-Properties. Was es daneben gibt, ist das DPI-Autoscaling: LINK was aber alles andere als reibungslos funktioniert. WPF kann das deutlich besser, ist aber auch deutlich komplexer.
     
    Besser ist es meiner Erfahrung nach, die Form gleich so zu planen das sie auf allen gewünschten Bildschirmgrößen funktioniert, d.h. die Controls geschickt anzuordnen und über anchor gezielt festzupinnen. So das sie zum Teil skalieren (z.b. Text- und Listboxen) bzw. automatisch in den sichtbaren Bereich verschoben werden (Buttons etc.)
     
    Falls das nicht geht, weil die Form zu voll bzw. komplex ist, kann man auch zusätzlich(!) noch manuell "Skalierungsstufen" erstellen. D.h für alle Ziel-Bildschirmgrößen den Schwellwert herausfinden, an dem noch alle Elemente sichtbar sind. Das ganze in maximal drei Gruppen aufteilen und für jede Gruppe die Elemente so skalieren bzw. anordnen das alles sichtbar und sinnvoll zu benutzen ist. Werte in Variablen festschreiben. Dann zum Start der Form die Bildschirmgröße überprüfen und die entsprechende "Gruppe" aktivieren.
    Das hört sich komplex an, ist aber deutlich weniger aufwändig als eine vollständig skalierbare WPF-Form zu erstellen oder sich mit dem Autoscaling rumzuschlagen.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Donnerstag, 21. Juli 2016 12:02
    Moderator

Alle Antworten

  • So einfach wie du dir das vorstellst, geht das leider nicht. Grundsätzlich steuerst du das über die Anchor-Properties. Was es daneben gibt, ist das DPI-Autoscaling: LINK was aber alles andere als reibungslos funktioniert. WPF kann das deutlich besser, ist aber auch deutlich komplexer.
     
    Besser ist es meiner Erfahrung nach, die Form gleich so zu planen das sie auf allen gewünschten Bildschirmgrößen funktioniert, d.h. die Controls geschickt anzuordnen und über anchor gezielt festzupinnen. So das sie zum Teil skalieren (z.b. Text- und Listboxen) bzw. automatisch in den sichtbaren Bereich verschoben werden (Buttons etc.)
     
    Falls das nicht geht, weil die Form zu voll bzw. komplex ist, kann man auch zusätzlich(!) noch manuell "Skalierungsstufen" erstellen. D.h für alle Ziel-Bildschirmgrößen den Schwellwert herausfinden, an dem noch alle Elemente sichtbar sind. Das ganze in maximal drei Gruppen aufteilen und für jede Gruppe die Elemente so skalieren bzw. anordnen das alles sichtbar und sinnvoll zu benutzen ist. Werte in Variablen festschreiben. Dann zum Start der Form die Bildschirmgröße überprüfen und die entsprechende "Gruppe" aktivieren.
    Das hört sich komplex an, ist aber deutlich weniger aufwändig als eine vollständig skalierbare WPF-Form zu erstellen oder sich mit dem Autoscaling rumzuschlagen.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Donnerstag, 21. Juli 2016 12:02
    Moderator
  • Hi,

    danke für die Erklärung:)

    Ich glaube ich schau mir mal diese "Skalierungsstufen" an :)                                                             Aber kann mir vielleicht noch jemand erklären was es mit  "Autosize" auf sich hat ?                 

    Grüße



    • Bearbeitet MCMaggi Freitag, 22. Juli 2016 06:13
    Freitag, 22. Juli 2016 06:11
  • Schau mal hier, da ist das glaube ich ganz gut erklärt.

    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Freitag, 22. Juli 2016 21:47
    Moderator