Avatar billede Slettet bruger
21. maj 2008 - 21:07 Der er 9 kommentarer

Gøre knap aktiv på baggrund af ErrorProvider

Kære Eksperter

Jeg har lavet en validering på en masse TextBox felter med den indbyggede ErrorProvider control. Jeg har så en knap, der submitter alle disse data til en sql database, men er det muligt kun at gøre knappen aktiv, såfremt at der ikke er nogen indtastingsfejl?
Avatar billede skov_p Praktikant
21. maj 2008 - 21:29 #1
Noget i den retning

button1.Enabled = CheckErrors();

private bool CheckErrors(){
string[] textboxes = new string[]{"textbox1","textbox2"};
string s = "";
foreach(string str in textboxes){
  s = errorProvider.GetError(Controls[str]);
  if(s!="")
    return false;
  }
}
Avatar billede skov_p Praktikant
21. maj 2008 - 21:41 #2
Testet

private void textBox1_Validating(object sender, CancelEventArgs e) {
      if(textBox1.Text == "T1")
        errorProvider1.SetError( textBox1, "" );
      else
        errorProvider1.SetError( textBox1, "Error" );
      CheckErrors(); 
    }

    private void textBox2_Validating(object sender, CancelEventArgs e) {
      if( textBox2.Text == "T2" )
        errorProvider1.SetError( textBox2, "" );
      else
        errorProvider1.SetError( textBox2, "Error" );
      CheckErrors(); 
    }

    private void CheckErrors() {
      string[] textboxes = new string[] { "textbox1", "textbox2" };
      string s = "";
      foreach( string str in textboxes ) {
        s = errorProvider1.GetError( Controls[str] );
        if( s != "" ) {
          button1.Enabled = false;
          return;
        }
        button1.Enabled = true;
      }
    }
Avatar billede Slettet bruger
21. maj 2008 - 21:55 #3
Tak for svaret, har fået det til at virke, men kan se at det alligevel ikke var helt gennemtænkt af mig. For når man har skrevet rigtigt i textbox1, og sætter cursoren i textbox2, så er button1 aktiv.

Dvs. at button1, skal ikke være aktiv, såfremt at:

1) Der er fejl i form af ErrorProvider.
2) Hvis der er tomme textbox felter
Avatar billede skov_p Praktikant
21. maj 2008 - 22:14 #4
Hvis din knap er disabled som default vil mit kode virke som du forspørger
Avatar billede Slettet bruger
21. maj 2008 - 22:39 #5
Det fungerer nogenlunde efter hensigten. Problemet med ErrorProvider'en er tilsyneladende, at den kun validerer når man trykker hen i et andet textbox felt.

Dvs. hvis man f.eks. laver en fejl i den sidste tekstbox og dernæst retter den, så bliver man nødt til at trykke hen i en anden textbox før knappen bliver aktiv...
Avatar billede skov_p Praktikant
21. maj 2008 - 22:53 #6
Der valideres når du forlader tekstboksen

Kontroller evt. ved tryk på knappen i stedet for at enable/disable

private void button1_Click(object sender, EventArgs e) {
  if(!CheckErrors()) return;
  ...
}

private bool CheckErrors() {
      string[] textboxes = new string[] { "textbox1", "textbox2" };
      string s = "";
      foreach( string str in textboxes ) {
        s = errorProvider1.GetError( Controls[str] );
        if( s != "" ) {
          return false;
        }
        return true;
      }
    }
Avatar billede Slettet bruger
21. maj 2008 - 23:09 #7
Først så det her ud til at virke rigtig godt, men (ja, jeg er ked af det) hvis man kun indtaster det korrekte i textbox1, så vil knappen virke. Det skulle den helst ikke, da der intet står i textbox2.
Avatar billede skov_p Praktikant
22. maj 2008 - 09:26 #8
Vil du bare se efter tomme textboxe?
Så vil jeg anbefale at kontrollere det ved tryk på knappen.

Du kan evt. fjerne "return" fra CheckErrors, så bliver alle tomme textboxse markeret ved tryk på knappen

private void CheckErrors() {
      string[] textboxes = new string[] { "textbox1", "textbox2" };
      foreach( string str in textboxes ) {
        if( Controls[str].Text == "" ) {
          errorProvider1.SetError( Controls[str], "Empty field" );
          return;
        }
        else
          errorProvider1.SetError( Controls[str], "" );
      }
    }

    private void button1_Click(object sender, EventArgs e) {
      CheckErrors(  );
    }
Avatar billede Slettet bruger
22. maj 2008 - 10:22 #9
Nej, vi snakker vist forbi hinanden.

Jeg vil både tjekke for tomme textboxes og tjekke for errors via ErrorProvider.

Den sidste kodestump tjekker kun for tomme textboxes, og ikke om der er fejl. Jeg er ikke interesseret i at smide data ind i min database, som ikke overholder de kriterier jeg har fastsat med ErrorProvideren.
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