Børre Stenseth
Moduler>GUI-komponenter>WHello World

Hallo igjen

Hva
screen
Button i et enkelt vindu
og hallo alle sammen

Vi lager dette programmet i Visual Studio etter "minste motstands vei". Det vil si at vi sier vi lager et nytt "project" av typen "Windows Application". Så bruker vi GUI-editoren til å lage en enkel form. Vi får tre kildefiler:

  • Program.cs
  • Form1.cs
  • Form1.Designer.cs

Program.cs

Dette er selve programmet som inneholder main.

using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WHello
{
    static class Program
    {
        /// The main entry point for the application.
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }
    }
}

Form1.cs

Form1 er navnet på det vinduet vi setter opp. Koden for denne klassen er delt på 2 filer: Form1.cs og Form1.Designer.cs. Form1.css er den fila vi vil fortsette å implementere logikk i, mens Form1.Designer.cs i er generert fra GUI-editoren i Visual Studio. Det er ikke lurt å editere denne fila. Det fører til at vi ødelegger Visual Studios muligheter til å regenerere GUI-komponentene i GUI-editoren.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WHello
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void buttonAway_Click(object sender, EventArgs e)
        {
            // this is the only handcoded programline
            this.Dispose(true);
        }
    }
}

Form1.Designer.cs

Det er lett å se likheten mellom denne klassen og det som lages i Java for å sette opp inholdet i en Frame. De som er kjent med NetBeans vil også kjenne igjen strategien med en metode, InitializeComponent(), som er generert og kan vedlikeholdes fra GUI-editoren.

namespace WHello
{
    partial class Form1
    {
        private System.ComponentModel.IContainer components = null;
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.buttonAway = new System.Windows.Forms.Button();
            this.labelMessage = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // 
            // buttonAway
            // 
            this.buttonAway.DialogResult = 
                System.Windows.Forms.DialogResult.Cancel;
            this.buttonAway.Location = new System.Drawing.Point(17, 74);
            this.buttonAway.Name = "buttonAway";
            this.buttonAway.Size = new System.Drawing.Size(194, 23);
            this.buttonAway.TabIndex = 0;
            this.buttonAway.Text = "Take it away";
            this.buttonAway.Click += 
                new System.EventHandler(this.buttonAway_Click);
            // 
            // labelMessage
            // 
            this.labelMessage.AutoSize = true;
            this.labelMessage.Font = 
                new System.Drawing.Font("Century Gothic", 27.75F, 
                    System.Drawing.FontStyle.Regular, 
                    System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.labelMessage.Location = new System.Drawing.Point(12, 9);
            this.labelMessage.Name = "labelMessage";
            this.labelMessage.Size = new System.Drawing.Size(211, 44);
            this.labelMessage.TabIndex = 1;
            this.labelMessage.Text = "Hello World";
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(246, 122);
            this.Controls.Add(this.labelMessage);
            this.Controls.Add(this.buttonAway);
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Name = "Form1";
            this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
            this.Text = "Hello world";
            this.ResumeLayout(false);
            this.PerformLayout();
        }
        #endregion
        private System.Windows.Forms.Button buttonAway;
        private System.Windows.Forms.Label labelMessage;
    }
}

Dersom vi ønsker å gjøre initielle korrigeringer, justeringer eller tillegg til det som GUI-editren generer, er det en grei og ryddig strategi å lage en metode: PostInt() som kalles etter InitializeComponent() i Form-konstruktøren. Dersom vi har behov for noe slikt kan det se slik ut:

...
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            PostInt();
        }

        private void PostInit()
        {
          // whatever we want to add to or adjust in the GUI-editors work
        }

        private void buttonAway_Click(object sender, EventArgs e)
        {
            // this is the only handcoded programline
            this.Dispose(true);
        }
    }
...
Referanser
  • Prosjektet:
    https://svn.hiof.no/svn/psource/Csharpspikes/winhello
Vedlikehold
B.Stenseth, august 2005
(Velkommen) Moduler>GUI-komponenter>WHello World (Lister)