C# - Melyik Submit gombhoz tartozzon az Enter billentyű

forráskód letöltése
Adott egy ASP.NET-es alkalmazásban egy adatbeviteli Form. Ezen egyetlen gombot helyezünk el, mellyel a beírt adatok elküldhetők alkalmazásunk felé. Alkalmazásunkban a gombhoz tartozó Click eseménynél dolgozzuk fel az adatokat. Ekkor, ha a felhasználó egérrel kattint a gombon, akkor minden rendben van: létrejön a Click és elvégezhetjük a szükséges lépéseket. Abban az esetben, ha a felhasználó egy szövegbeviteli ablakban áll, mondjuk épp beírt egy szöveget egy TextBox-ba és lenyomja az Enter-t, akkor ugyan elindul egy új kérés az alkalmazásunk felé, viszont nem jön létre a gombunkhoz tartozó Click esemény, ahol feldolgoznánk az adatokat. Ettől kezdve alkalmazásunk hibásan működik, vagy mégsem?
Az Enter lenyomásakor nem jön létre a Click esemény, ami problémát jelenthet programunkban. Ennek oka a következő: egy Web Form-on több gomb is lehet, melyekhez különböző Click esemény tartozhat. Az Enter lenyomásakor felmerülhet a kérdés, hogy vajon melyik gomb Click eseménye kerüljön meghívásra? A programunk számára ez nyilván nem eldönthető kérdés. Ezért nekünk kell kijelölni egy gombot, melyet alapértelmezett gombként kezel a rendszer az Enter billentyű lenyomásakor és az ehhez tartozó Click esemény kerül lefutásra.
A mellékelt példában két WebForm-ot készítettünk. Az elsőnél a felmerülő probléma miatti hiba látható: ha az OK gombra kattintunk egérrel, akkor minden rendben, a TextBox-ba írt szöveg átkerül a Label-re. Ha azonban a fókusz a TextBox-on van és ekkor lenyomjuk az Enter billentyűt, akkor látható lesz, hogy a TextBox tartalma nem kerül át a Label-re, vagyis a gombhoz tartozó Click esemény nem fut le, annak ellenére, hogy megtörténik egy új kérés webes alkalmazásunk felé. Ez jól látható, hiszen a számláló a Page osztály Load eseményénél kerül növelésre, mely minden kéréskor le fog futni.
Lépjünk most át a WebForm2-re. Itt a Page Load eseményénél előírjuk, hogy melyik gomb legyen az alapértelmezett. Ehhez a RegisterRequiresRaiseEvent függvény hívására van szükségünk.
RegisterRequiresRaiseEvent(Button1);
Ennek paramétereként azt a gombot kell megadnunk, melyet az Enter billentyű lenyomásához rendelnénk.
A WebForm2-nél ha most a TextBox-on van a fókusz és lenyomjuk az Enter billentyűt, a Button1 gombnak Click eseménye akkor is lefut.
A problémát ezzel sikeresen megoldottuk.