Hallo igjen
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);
}
}
...












