Avatar billede farfar5 Nybegynder
18. februar 2004 - 14:00 Der er 18 kommentarer

Focus til Button Control

Hej!
Jag har problem !

Jeg vil gerne kunne lave en Focus på en Button Control når jeg markerer en TextBox.
Jeg går udfra at denne Focus metode skal kaldes i min TextChanged event som hører til TextBox controllere.
Jeg arbejder i en WebForm og ikke en WindowsForm.
Det grundlæggende problem er at jeg skal kunne trykke på "return" og på denne måde aktivere min knap når jeg befinder mig i en given TextBox

På forhånd tak !
Avatar billede burningice Nybegynder
18. februar 2004 - 14:12 #1
du har ikke tænkt på, at man aldrig vil kunne skrive i textboxen hvis det bliver gjort på den måde du beskriver?
Avatar billede finger Nybegynder
18. februar 2004 - 14:17 #2
du kunne også tilknytte en eventhandler på keyDown på din textbox.
Test om det er enter det bliver trykket på, og hvis det er kan du udføre et klik på din knap i koden derfra.
Avatar billede muppet Nybegynder
18. februar 2004 - 14:20 #3
MyButton.Attributes.Add( "ScriptKey", "OnKeyUpHandler();" );

I din HTML laver du så:
<script>
function onKeyUpHandler() {
  if( window.event.keyCode == 13 ) { //Mener '13' er enter/return
    //Set focus her
    document.all.MyButton.focus();
  }
}
</script>

Eller laver det med Page.RegisterStartupScript( "KeyUpHandler", strScript );
Hvor strScript er = ovenstående script i HTML (incl. tag's)
Avatar billede farfar5 Nybegynder
18. februar 2004 - 14:28 #4
Er dette ikke til VB script da det ligner en funktion og ikke C#
Avatar billede burningice Nybegynder
18. februar 2004 - 14:31 #5
farfar5>> har du tænkt dig at siden skal lave postback hver gang man skriver et tegn i textboxen?!?!

nej, det er ikke c#.. og ja, det skal udføres på klienten
Avatar billede muppet Nybegynder
18. februar 2004 - 14:33 #6
Forstår ikke helt ... Vi er i en 'C#' tråd ?

selve script'et er JavaScript (det i <script></script>) og det andet er C#
Avatar billede farfar5 Nybegynder
18. februar 2004 - 14:49 #7
>> Muppet prøv at se kommentar, hvor skal java scriptet sættes ind henne ?? er det i body eller headen??

MyButton.Attributes.Add( "ScriptKey", "OnKeyUpHandler();" ); // HVAD BETYDER ScriptKey

I din HTML laver du så:
<script>
function onKeyUpHandler() {
  if( window.event.keyCode == 13 ) { //Mener '13' er enter/return
    //Set focus her
    document.all.MyButton.focus(); // HVAD betyder mybutton ??
  }
}
</script>

Eller laver det med Page.RegisterStartupScript( "KeyUpHandler", strScript );
Hvor strScript er = ovenstående script i HTML (incl. tag's)
Avatar billede muppet Nybegynder
18. februar 2004 - 14:55 #8
ScriptKey er det du vil kalde scriptet ... En nøgle om man vil. Det har ingen større betydning hvad du kalder den. Ved faktisk ikke om den skal være unik...
ScriptKey kan altså være = ScriptKey eller KeyUpHandler eller HvadSomHelst...

JavaScript'et indsætter du i mellem <head> og </head>, medmindre du benytter dig af det sidste eksempel jeg viste. Det kan være en fordel hvis det er en 'ascx' side, da man så er sikker på at scriptet følger med siden der benytter det :o)
Avatar billede farfar5 Nybegynder
18. februar 2004 - 15:25 #9
>> Muppet

Kan ikke få det til at virke!! Prøv at se kommentar


if( window.event.keyCode == 13 ) // DER STÅR WINDOW.EVENT // MEN DETTE ER EN WEBFORM I ASPX SIDE

document.all.MyButton.focus(); // denne linie forstår jeg ikke helt

MyButton.Attributes.Add( "ScriptKey", "OnKeyUpHandler();" ); // DENNE klase skal vel ind i controller.
Avatar billede muppet Nybegynder
18. februar 2004 - 15:41 #10
I din HTML:
<script>
function onKeyUpHandler() {
  if( window.event.keyCode == 13 ) { //Mener '13' er enter/return
    //Set focus her
    document.all.MyButton.focus(); // MyButton er det ID du har givet din <asp:Button>
  }
}
</script>

Dvs.
<HTML>
<HEAD>

Indsæt script her

</HEAD>
<BODY>
</BODY>
</HTML>

I din OnPageLoad i din aspx.cs side, skriver du så

MyButton.Attributes.Add( "EtEllerAndet", "DetDuHarKaldtFunktionenPlusParenteserPlusSemikolon" );
Hvor MyButton = Dit <asp:button> ID
Avatar billede farfar5 Nybegynder
19. februar 2004 - 11:07 #11
>> Muppet, Hej igen, jeg kan dog stadig ikke få det til at virke, synes ellers det burde virke, mener selv det er gjort rigtig. Men jeg vil lige prøve at plukke lidt ud fra min PageLoad, og min html så ved jeg ikke om du kan se om der er noget galt.

Først HTML:
<HEAD>
        <title>WebForm1</title>
        <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
        <meta content="C#" name="CODE_LANGUAGE">
        <meta content="JavaScript" name="vs_defaultClientScript">
        <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
        <script>
       
        function onKeyUpHandler() {
          if( window.event.keyCode == 13 )
          {    
            document.all.OpretGrundPakkeButton.focus();  
        }
        }
       
        </script>
    </HEAD>

Så page load:
private void Page_Load(object sender, System.EventArgs e)
        {
           
           
           
            OpretGrundPakkeButton.Attributes.Add("scriptkey","onKeyUpHandler()");
            // Put user code to initialize the page here
            if(!IsPostBack)
            {
                Session["bruger"] = new Controller();
                Controller = (Controller)Session["bruger"];
                StartUp();
            }
            else
            {
                Controller = (Controller)Session["bruger"];
            }
           
        }

På forhånd tak
Avatar billede muppet Nybegynder
19. februar 2004 - 12:46 #12
Rundstyk' ... ;o)

Det er jo også mig der har ledt dig lidt på vildspor ...

Det er jo meningen at når du 'forlader' en textbox med 'return' at fokus så skal være på OpretGrundPakkeButton.

Dvs. du skal oprette en textbox, f.eks. TextBox1
I din PageLoad sætter du dennes attribut.
Eks:
TextBox1.Attributes.Add( "scriptkey", "onKeyUpHandler();" );

I selve scriptet (i din HTML) skal du ikke ændre noget...
Avatar billede muppet Nybegynder
19. februar 2004 - 12:48 #13
argh ...

Den skal se sådan her ud...

TextBox1.Attributes.Add( "onkeyup", "onKeyUpHandler();" );

Det der tidligere hed scriptkey er lig den event i HTML du vil "overloade", dvs. i dette tilfælde onkeyup event'en...
Avatar billede farfar5 Nybegynder
19. februar 2004 - 14:20 #14
>> Muppet
Hej igen
Jeg har lejet lidt med, og jeg kan delvist få det til  at virke:

Tekstbox1 _______ Button1

TekstBox2 _______ Button2

Hvis du prøver at se på det lille eksempel: to tekstboxe ovenover hinanden, og ligeledes to knapper oven på hinanden.

Når jeg starter webformen op starter focus rigtig i Button1, så man kan se den er markeret, men så snart jeg klikker i tekstbox2 feltet FLYTTER focus sig til Button2. Men når jeg så skriver noget i Tekstbox1, og trykker ENTER én gang flytter focus sig til Button1, og når jeg så trykker ENTER én gang til registrere den det der er i tekstbox1. MÆRKELIGT jeg har ingen event på tekstbox1, JEg ander ikke hvad der får til focus til at flytte sig til button2 når jeg klikker i tekstbox1 KAN DU HJÆKPE MIG????
På forhånd tak
Avatar billede muppet Nybegynder
19. februar 2004 - 14:43 #15
Må jeg se koden du har lavet ?
Avatar billede farfar5 Nybegynder
19. februar 2004 - 15:31 #16
>> Muppet
Har fået det til at virke, tak for hjælpen, eller lille slå fejl
Hvordan giver jeg dig point synes kun jeg kan give dig karme crap??
Avatar billede muppet Nybegynder
20. februar 2004 - 13:25 #17
Sådan her :o)

Velbekomme
Avatar billede dj Nybegynder
20. februar 2004 - 16:31 #18
Hejsa

Jeg har lavet en lille metode engang som jeg da gerne deler med andre, den benytter sig dog lidt af samme trick som andre henviser til her i tråden, men nogen vil måske finde den lidt simplere at benytte.

protected void SetDefaultButton(System.Web.UI.WebControls.WebControl AWebControl, System.Web.UI.WebControls.Button ADefaultButton) {
  AWebControl.Attributes.Add("onkeydown", @"if (event.keyCode == 13) {document.getElementById('" + ADefaultButton.ClientID + "').click(); return false;} else return true;");
}

Så er det simpelthen bare at kalde f.eks:

SetDefaultButton(TextBox1, Button1);
SetDefaultButton(TextBox2, Button2);

osv. i sin Page_Load metode.

Så bliver det vel ikke meget nemmere ? :)

Det kan btw. anbefales at nedarve Page controllen (og UserControl'en) og så placere funktioner ala ovenstående i denne, så kan du nemt udbrede funktionaliteten til alle dine sider.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester