Prosta aplikacja okienkowa
Opublikowano: 14 stycznia 2005 r. | Zaktualizowano: 14 stycznia 2005 r.
W przykładzie tym omówiono tworzenie w Visual Studio .NET prostej aplikacji okienkowej, wyświetlającej w oknie dialogowym tekst wprowadzony przez użytkownika w polu tekstowym.
Aby w Visual Studio utworzyć nowy projekt aplikacji internetowej, w menu File wybieramy pozycję New, a następnie Project. Wyświetlone zostanie okno dialogowe z szablonami projektów. W lewej części okna wybieramy język programowania (Visual Basic lub Visual C#), a w prawej — typ projektu, jaki chcemy utworzyć (Windows Application). W polu Name podajemy nazwę projektu, a w polu Location — folder, w którym projekt ma zostać zapisany.
Visual Studio automatycznie utworzy i skonfiguruje projekt składający cię z dwóch plików — pliku zawierającego opis podzespołu tworzonego przez wszystkie pliki aplikacji oraz pliku zawierającego projekt formularza aplikacji. Jeśli podczas tworzenia projektu wybrano język C#, pliki te będą miały nazwy odpowiednio AssemblyInfo.cs i Form1.cs. Jeśli wybrano Visual Basic — AssemblyInfo.vb i Form1.vb.
Plik Form1 jest już otwarty w widoku projektu (jeśli nie jest, otwieramy go klikając dwukrotnie jego nazwę w oknie eksploratora rozwiązania — Solution Explorer). Z palety Toolbox, znajdującej się w lewej części okna Visual Studio, przeciągamy na projektowany formularz kontrolki TextBox i Button. Zostaną one dopisane do klasy okna jako składowe textBox1 i button1 (w VB: TextBox1 i Button1). Okno Properties (właściwości) pozwala modyfikować właściwości kontrolek i formularza. Aby na przykład zmienić tekst wyświetlany na przycisku, należy zmodyfikować właściwość Text tej kontrolki.
Mamy już formę, potrzebna jest jeszcze treść. Musimy napisać kod obsługi zdarzenia kliknięcia przycisku. Klikamy przycisk dwukrotnie. Visual Studio .NET otworzy okno z kodem źródłowym i automatycznie przygotuje strukturę funkcji obsługi zdarzenia kliknięcia przycisku. Wpisujemy kod obsługi zdarzenia:
[C#]
private void button1_Click(object sender, System.EventArgs e)
{
if (textBox1.Text.Length >0)
MessageBox.Show("Wpisano tekst: " + textBox1.Text);
else
MessageBox.Show("Wpisz jakiś tekst");
}
[Visual Basic]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
If (TextBox1.Text.Length > 0) Then
MessageBox.Show("Wpisano tekst: " + TextBox1.Text)
Else
MessageBox.Show("Wpisz jakiś tekst")
End If
End Sub
Aplikacja jest gotowa. Napisaliśmy tylko treść funkcji obsługi zdarzenia kliknięcia przycisku. Całą resztę kodu program Visual Studio .NET wygenerował za nas.
Tworzone okno reprezentowane jest w kodzie źródłowym aplikacji przez klasę dziedziczącą po klasie System.Windows.Forms.Form. W widoku projektu możemy zmieniać rozmiary okna, dodawać nowe kontrolki, zmieniać właściwości. Wszystkie wprowadzone zmiany są automatycznie odzwierciedlane w kodzie. Kontrolki dodane do okna aplikacji stają się składowymi klasy reprezentującej okno. Część wygenerowanego kodu ukryta jest poprzez zastosowanie dyrektywy #region. Znajdują się tam między innymi definicje składowych utworzonych przez przeciągnięcie kontrolek, kod inicjujący kontrolki i pozycjonujący je w oknie dokładnie w tych miejscach, w których zostały umieszczone w projekcie, kod ustawiający wszystkie właściwości, a także kod rejestrujący w aplikacji napisane przez nas procedury obsługi zdarzeń. Visual Studio opisuje wygenerowany kod komentarzami ułatwiającymi jego zrozumienie. Wygenerowany kod możemy modyfikować, dostosowując go do własnych potrzeb.
Poniżej zamieszczono pełny kod aplikacji z przykładu. Kod został opatrzony dodatkowymi komentarzami:
[C#]
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication1
{
/// <summary>
/// Summary description for Form1.
/// <summary>
public class Form1 : System.Windows.Forms.Form
{
// kontrolki są składowymi klasy reprezentującej okno aplikacji
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
/// <summary>
/// Required designer variable.
/// <summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// <summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
/* kod wygenerowany przez Visual Studio został ukryty z wykorzystaniem
dyrektywy #region, której zawartość domyślnie nie jest wyświetlana.
*/
#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()
{
// inicjalizacja kontrolek i ustawienie właściwości.
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(8, 8);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(168, 20);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "";
//
// button1
//
this.button1.Location = new System.Drawing.Point(96, 32);
this.button1.Name = "button1";
this.button1.TabIndex = 1;
this.button1.Text = "Kliknij!";
// rejestracja procedury obsługi zdarzenia
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(184, 126);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
// dyrektywa #endregion wskazuje koniec obszaru ukrytego kodu.
/// <summary>
/// The main entry point for the application.
/// <summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, System.EventArgs e)
{
if (textBox1.Text.Length >0)
MessageBox.Show("Wpisano tekst: " + textBox1.Text);
else
MessageBox.Show("Wpisz jakiś tekst");
}
}
}
[Visual Basic]
Public Class Form1
Inherits System.Windows.Forms.Form
' kod wygenerowany przez Visual Studio został ukryty z wykorzystaniem
' dyrektywy #region, której zawartość domyślnie nie jest wyświetlana.
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
' definicja kontrolek, a poniżej funkcja składowa inicjująca
' podczas uruchamiania aplikacji wszystkie kontrolki
' i właściwości formularza
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents Button1 As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.Button1 = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(8, 8)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.TabIndex = 0
Me.TextBox1.Text = ""
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(32, 32)
Me.Button1.Name = "Button1"
Me.Button1.TabIndex = 1
Me.Button1.Text = "Kliknij"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(292, 266)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.TextBox1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
#End Region
' dyrektywa #End Region wskazuje koniec obszaru ukrytego kodu.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
If (TextBox1.Text.Length > 0) Then
MessageBox.Show("Wpisano tekst: " + TextBox1.Text)
Else
MessageBox.Show("Wpisz jakiś tekst")
End If
End Sub
End Class
Aby skompilować naszą aplikację, z menu Build wybieramy polecenie Build. Aby uruchomić aplikację, z menu Debug wybieramy polecenie Start without Debugging lub naciskamy kombinację klawiszy Ctrl+F5.
Uruchamianie aplikacji w programie debugującym odbywa się tak samo, jak zostało to opisane w rozdziale
Praca w środowisku programistycznym.