Feedback

C# - Fixes Form in Höhe und Breite verdoppeln, Inhalt skalieren

Veröffentlicht von am 19.05.2010
(0 Bewertungen)
Ein einfaches Form, wo alles feste Größe hat, soll in der Höhe und Breite doppelt so groß werden. (bei mir, wenn Höhe des Bildschirms einen Wert 640 überschreitet.)

Anchor steht bei mir immer auf links-oben.

Schriftgrößen und Controlinhalte sollen mit wachsen.

Nicht perfekt. Radiobuttons und Checkboxen wachsen leider nicht komplett mit. Funktioniert sonst aber bei mir wie gewünscht.
GFU-Schulungen  [Anzeige]

ASP.NET Core - Der Einstieg

In nur 3 Tagen lernen Sie, wie man mit ASP.NET Core und den Technologien MVC, Entity Framework, WebAPI und Razor professionelle Web-Anwendungs-Architekturen aufbaut. Diese Schulung ist der perfekte Einstieg, um datengetriebene und präsentations-orientierte Applikationen auf Basis der ASP.NET Core Plattform zu erstellen.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Entwickler - Kompakt

Nach Teilnahme an dieser Schulung kennen Sie alle wesentlichen Funktionen des TFS für Entwickler. Sie setzen Software-Entwicklung mit dem Visual Studio Team Foundation Server erfolgreich um.

        public int FormScaleFactor = 1;


        /// <summary>
        /// Form ggf. skalieren, wenn Bildschirmhöhe größer 640
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form_Shown(object sender, EventArgs e)
        {

            if (this.DesignMode) return;

            int intY = Screen.PrimaryScreen.Bounds.Height;
            if (intY >= 640)
            {
                FormScaleFactor = 2;

                this.SuspendLayout();

                //Font skalieren
                float currentSize = this.Font.SizeInPoints;
                currentSize = currentSize * FormScaleFactor;
                this.Font = new Font(this.Font.Name, currentSize,
                    this.Font.Style);

                //Form vergrößern
                this.Size = new Size(
                                this.Width * FormScaleFactor, 
                                this.Height * FormScaleFactor);

                //Controls des Forms skalieren
                foreach (Control ctrl in this.Controls)
                    ReSizeByFactor(ctrl);

                this.ResumeLayout();

            }
        }

        /// <summary>
        /// Skaliert ein Control und ruft rekursiv die Childcontrols auf
        /// </summary>
        /// <param name="ctrl">Control</param>
        /// <remarks>Faktor in FormScaleFactor</remarks>
        public void ReSizeByFactor(Control ctrl)
        {

            if (FormScaleFactor == 1) return;            

            DockStyle olddock = ctrl.Dock;
            AnchorStyles oldanchor = ctrl.Anchor;
            Point oldLocation = new Point(ctrl.Left, ctrl.Top);
           
            ctrl.Dock = DockStyle.None;
            ctrl.Anchor = AnchorStyles.None;

            ctrl.Size = new Size(
                ctrl.Width * FormScaleFactor, 
                ctrl.Height * FormScaleFactor);
            ctrl.Location = new Point(
                oldLocation.X * FormScaleFactor, 
                oldLocation.Y * FormScaleFactor);

            if (ctrl.Font != ctrl.Parent.Font)
            {
                //Font vergrößern, wenn Control eine eigene Schrift hat
                float currentSize = ctrl.Font.SizeInPoints;
                currentSize = currentSize * FormScaleFactor;
                ctrl.Font = new Font(ctrl.Font.Name, currentSize,
                    ctrl.Font.Style);
            }

            //bestimmte Control-Klassen noch gesondert behandeln
            if (ctrl is Button)
            {
                //Bild vergrößern 
                //Die Methode ResziePicByWitdh in anderem Snippet suchen!
                Button btn = ctrl as Button;
                if (btn.Image != null)
                    btn.Image = ResizePicByWidth(
                        btn.Image, btn.Image.Width * FormScaleFactor);
                if (btn.BackgroundImage != null)
                    btn.BackgroundImage = ResizePicByWidth(
                        btn.BackgroundImage, btn.BackgroundImage.Width * FormScaleFactor);
            }
            else if (ctrl is ListView)
            {
                ListView lst = ctrl as ListView;
                foreach (ColumnHeader clh in lst.Columns)
                {
                    clh.Width = clh.Width * FormScaleFactor;
                }
            }
            //else if (ctrl is ...)

            ctrl.Dock = olddock;
            ctrl.Anchor = oldanchor;

            //Rekursiv die enthaltenen Controls weiter skalieren
            foreach (Control ctrlchild in ctrl.Controls)
                ReSizeByFactor(ctrlchild);

        }
Abgelegt unter Form, Size, Skalieren.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!