Dialogbokser
Standard meldinger
Vi her ofte behov for korte avklaringer med brukere av typen: Vil du virkelig slette..., Sikker på at du vil slutte.., Spare endringene først.., osv. Slik korte standardiserte dialogfragmenter realiserer vi lettest med standardiserte meldingsbokser, "message box". For eksempel:
if (MessageBox.Show(this, "vil du virkelig slette ?","melding", MessageBoxButtons.YesNo) == DialogResult.Yes) { ... }
detaljene i dette er beskrevet i dokumenstasjonen. Det vi skal merke oss er imidlertid DialogResult som definerere et sette med standard "resultater" som vi kan plukke fra en dialog, en enumeration. Dette er ikke resultater i form av noe vi har spesifisert, det angir hvordan vi avsluttet dialogen. Verdier er: Abort, Cancel, Ignore , No, OK, Retry, Yes.
Standard dialoger
For å gjøre verden litt letter for oss tilbyr Visual studio noen ferdiglagde dialogbokser med litt mer innhold. Disse er default: ColorDialog, FontDialog, OpenFileDialog, SaveFileDialog, FolderBrowserDialog. Vi vil sikkert finne mange flere som vi kan importere. Typisk bruk:
folderBrowserDialog1.SelectedPath=Application.StartupPath; if (folderBrowserDialog1.ShowDialog(this) == DialogResult.OK) { textBox1.Text = folderBrowserDialog1.SelectedPath; }
Merk at vi kan sette egenskaper før vi setter opp dialogboksen og vi kan lese egenskaper etter at boksen har avsluttet.
Egen dialogboks
Vi lager et enkelt program som neppe bringer verden særlig framover, men som fanger opp de viktigste prinsippene vi har nevnt ovenfor. For sammenligningens skyld lager vi et program som både bruker en standard dialog, ColorPicker, og vår hjemmesnekrede dialogboks.
Vi lager en ny solution og får opp en stanardform, Form1. Så lager vi en ny Form, Add Windows Form. Vi kaller denne myDialog. Den skiller seg i utgangspunktet ikke fra andre former. Det første vi gjør er at møblere vår nye form med to knapper og et tekstfelt. Tekstfeltet er der vi skal skrive inn teksten som er hele dialogboksen hensikt og de to knappene skal tjene som "OK" og "CANCEL".
Vi ønsker via de egenskapene vi kan manipulere i Visual Studio å får den til å oppføre seg som en dialogboks. Det vil si at:
- den skal automatisk forsvinne når vi klikker på en "avslutningsknapp", i vårt tilfelle OK eller CANCEL.
- den skal returnere en indikasjon på hva som avsluttet den, i vårt tilfelle ok eller cancel.
- vi skal kunne lese ut vilke settinger som er gjort i boksen, etter at dialogboksen er forsvunnet, i vårt tilfelle den teksten som er skrevet inn.
- vi skal kjøre dialogboksen slik at vi kan avslutte med return og escape i stedet for å klikke på henholdsvis ok og cancel.
OK-knappens DialogResult-egenskap får verdien OK, og Cancel knappen får egenskapen Cancel. Vi kan velge mellom: OK, Cancel, Abort, Retry, Yes og NO. Dette ivaretar kravene 1 og 2 ovenfor.
Vi definerer en property, theText, som vi kan sette fra hovedvinduet før vi kjører dialogen og hente etter at vi har avsluttet dialogen. Dette ivaretar det tredje kravet ovenfor.
Dersom vi vil realisere krav 4, så endrer vi Formens egenskaper: AcceptButton og CancelButton ved å kople til våre to respektive buttons. Merk at her må vi være litt forsiktige dersom dialogboksen inneholder tekstfelter for input med flere linjer (Multiline=true). Vi må da passe på å sette AcceptReturns =true i tekstfeltet.
Dialogboksen

Koden er slik:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace dialogtest { public partial class myDialog : Form { public String theText { get { return textBox1.Text; } set { textBox1.Text = value; } } public myDialog() { InitializeComponent(); } } }
Hovedvinduet

Koden er slik:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace dialogtest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void buttonColor_Click(object sender, EventArgs e) { // the colordialog is already generated colorDialog1.Color = label1.ForeColor; DialogResult dr=colorDialog1.ShowDialog(this); if (dr == DialogResult.OK) { label1.ForeColor =colorDialog1.Color; } } private void buttonMyDialog_Click(object sender, EventArgs e) { // we make a new dialog each time we need one myDialog f = new myDialog(); f.theText = label1.Text; DialogResult dr = f.ShowDialog(this); if (dr == DialogResult.OK) { label1.Text=f.theText; } f.Dispose(); } } }