C# - Dialógusablak használata konzolalkalmazásokban

forráskód letöltése
A Visual Studio.NET-ben is van lehetőségünk konzolalkalmazásokat készíteni, hiszen még napjainkban is írunk kis méretű, felhasználói felülettel nem rendelkező, gyorsan végrehajtódó programokat. Vannak bizonyos funkciók, melyek esetében nincs értelme információkat bekérni a felhasználótól, vagy ha igen, akkor azokat megadhatjuk parancssori argumentumok segítségével is. Lehetséges azonban olyan konzolalkalmazásokat is írni, melyek használhatnak felhasználói felületet az információ-bekérésre. Az ilyen alkalmazások írásakor néhány apróságot figyelembe kell venni. Cikkünkben bemutatjuk melyek ezek, és hogyan készíthetünk egy ilyen programot könnyedén.
A programok többségénél nem szükséges ilyen felhasználói interfész megjelenítése, azonban néhány mozdulattal képesek vagyunk ezt is megvalósítani.
Ha a konzolalkalmazásban adott egy menü néhány választási lehetőséggel, akkor megtehetjük, hogy az egyik menüpont kiválasztásakor megjelenítünk egy dialógusablakot, és az információkat egy felhasználóbarát felület segítségével kérjük be. Ennek végeztével bezárjuk az ablakot, és a program futhat tovább, a konzolon megjelenítve az eredményt.
Ennek érdekében készítsünk egy Windows-os alkalmazást, majd futtassuk úgy, mintha konzolalkalmazás lenne. Első lépésként gondoskodjunk arról, hogy a kód konzolalkalmazásként generálódjon.
A projekt gyorsmenüjében válasszuk a Properties menüpontot, majd a felbukkanó ablakban a Common Properties – General ablakban az Output Type értékét cseréljük Console Application-re.
Ezt követően már csak el kell helyezni a szükséges adatbeviteli vezérlőket. A mellékelt példában a program indulása után megjelenik egy utasítás sor, mely felhívja a figyelmet arra, hogy a „d” billentyű leütésére felbukkan a dialógus ablak.
A kódot a Main metódusban kell elhelyezni.
static void Main(string[] args) 
{
  Console.WriteLine("Nyomja meg a \"D\" billentyűt a dátumválasztáshoz!");
A lenyomott karaktert egy hátul tesztelő ciklusban ellenőrizzük.
do
{
  s = Console.ReadLine();        
}
while(s.ToLower() != "d");
Amennyiben a „d” karaktert nyomjuk le, akkor a dialógusablak megjelenik. Ezt az Application objektum Run metódusának meghívásával érhetjük el. Ez csak abban az esetben működik jól, ha az alkalmazást konzolalkalmazásként fordítjuk le, egyéb esetben nem.
Application.Run(new Form1());
Amennyiben nem választunk dátumot, vagyis a dátumválasztó MonthCalendar kontrol DataChanged eseménye nem fut le, akkor a dialógusablak bezárásakor a kimentre írjuk ennek tényét.
protected override void OnClosing(CancelEventArgs e)
{
  if (choose == 0)
  {
    Console.WriteLine("Nem választott dátumot!");            
  }
}
Amennyiben viszont az esemény elkapható, a kezelőmetódusban oldjuk meg, hogy a dialógusablak bezáródása után megjelenjen a választott dátum a konzolon.
private void monthCalendar1_DateChanged(object sender, System.Windows.Forms.DateRangeEventArgs e)
{
  Console.WriteLine("A választott dátum: " + monthCalendar1.SelectionStart.ToString("yyyy.MM.dd. hh:mm:ss"));
  choose = 1;
  Close();
}