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