VB.NET disable button wanneer textbox leeg is

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Daan5000
  • Registratie: September 2009
  • Laatst online: 25-11-2021
Hallo,

Mijn vraag is: hoe kun je een knop pas beschikbaar maken vanaf dat er iets in de textbox is getypt?
textbox ="" --> knop disabled
textbox ="a" --> knop enabled
je doet de a weer uit --> knop disabled

Ik heb wat gezocht op Google maar geen van de antwoorden kunnen mijn probleem oplossen.

code:
1
2
3
4
5
6
7
Private Sub txtLetter_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtLetter.TextChanged
        If txtLetter.Text = String.Empty Then
            btnLetterRaden.Enabled = False
        Else
            btnLetterRaden.Enabled = True
        End If
    End Sub


Bovenstaande code is denk ik het meest logisch maar werkt NIET. Er verandert niets in het programma.
Weet iemand een oplossing hiervoor? Gaat dit wel in vb?

Alvast bedankt

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Natuurlijk kan dat in VB. Ik denk dat je wat basic kennis mist om het goed te doen.
Allereerst zal de knop pas en/disablen wanneer je daadwerkelijk iets wijzigt in de textbox. Als je dus een paar letters typed en dan met backspace de tekst verwijdert zal er pas iets gebeuren. (Dit kun je makkelijk testen door even een breakpoint op je code te zetten).

Verder kan je code natuurlijk veel makkelijker:
Visual Basic .NET:
1
2
3
Private Sub txtLetter_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtLetter.TextChanged
    btnLetterRaden.Enabled = Not String.IsNullOrEmpty(txtLetter.Text)
End Sub


Als je met een lege textbox begint en je button meteen disabled wil hebben dan kun je beter je button vast in designmode (of beter; in het form's initialize/load event even in code) disablen.

[ Voor 15% gewijzigd door RobIII op 20-05-2010 22:45 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
Hoewel bovenstaande waar is vind ik het wel raar dat je code niet werkt. Het zou gewoon moeten werken hoor. Weet je zeker dat je niet een spatie getypt hebt ofzo? Je kunt misschien beter checken of "txtLetter.Text.Trim()" leeg is. De Trim functie haalt spaties (en tabs, newlines, etc) voor en achter de tekst weg.

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 13:21

Haan

dotnetter

De code van de TS zou inderdaad gewoon prima moeten werken. Net nog even getest, geen enkel probleem.
Wel met button Enabled = false in de designer uiteraard.
RobIII schreef op donderdag 20 mei 2010 @ 22:34:
Als je met een lege textbox begint en je button meteen disabled wil hebben dan kun je beter je button vast in designmode (of beter; in het form's initialize/load event even in code) disablen.
Wat is er beter aan het form's load event (bedoel je daar de constructor mee?) om een control te disablen, ipv dat in de form designer (waarbij de code gegenereerd wordt in InitializeComponent) te doen?

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • lier
  • Registratie: Januari 2004
  • Nu online

lier

MikroTik nerd

@TS: Heb je ook het event gekoppeld ? Alleen de methode is (uiteraard) niet genoeg...

@Roblll: Dit is een kwestie van voorkeur, ik vind het vooral prettig om code direct te kunnen doorgronden. Nou is dit voorbeeld niet echt rocket sience (denk dan bijvoorbeeld meer aan lambda expressies).

@Haan: Met name het expliciet maken is beter, daarnaast verwacht je (ik in ieder geval) dat deze settings bij de initialisatie gezet worden.

Eerst het probleem, dan de oplossing


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
lier schreef op vrijdag 21 mei 2010 @ 08:54:
@TS: Heb je ook het event gekoppeld ? Alleen de methode is (uiteraard) niet genoeg...
Er staat toch een Handles statement achter, dus het event is sowieso gekoppeld. In C# is het vaak niet duidelijk of een methode ook daadwerkelijk als event handler gebruikt wordt, maar in VB kun je het meestal (tenzij AddHandler gebruikt wordt) meteen zien.
lier schreef op vrijdag 21 mei 2010 @ 08:54:
@Haan: Met name het expliciet maken is beter, daarnaast verwacht je (ik in ieder geval) dat deze settings bij de initialisatie gezet worden.
Alles wat je in de designer zet komt in the InitializeComponent methode (in de designer file) zoals je vast wel weet. Dat is toch ook initialisatie? In mijn mening is dat zelfs meer initialisatie dan de Form_Load event...

Ik snap wel waarom mensen het liever in code (code die direct zichtbaar is dus niet in de designer code) hebben. Ik zou zelf ook niet zo gauw alle controls langs gaan en hun properties checken, dus als er iets belangrijks in de designer veranderd is zou ik dat waarschijnlijk ook missen. Als het in de code staat zie je het veel eerder.

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • lier
  • Registratie: Januari 2004
  • Nu online

lier

MikroTik nerd

Hehehe...val ik even door de mand (als C# ontwikkelaar).

Eerst het probleem, dan de oplossing


Acties:
  • 0 Henk 'm!

  • ControlFreak
  • Registratie: Januari 2004
  • Laatst online: 29-08 12:02
Kun je dit niet beter doen door een key_up af te vangen? volgens mij reageert hij dan op alle toetsaanslagen.

Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
ControlFreak schreef op vrijdag 21 mei 2010 @ 09:45:
Kun je dit niet beter doen door een key_up af te vangen? volgens mij reageert hij dan op alle toetsaanslagen.
Lijkt me niet.. Je wilt toch gewoon dat de button alleen enabled is als er tekst is? Dus handle je gewoon de TextChanged event, en als er geen tekst is disable je de button (en andersom). De TextChanged event wordt altijd aangeroepen, hoe je de tekst ook veranderd, ook met copy/paste bijvoorbeeld, dus dan heb je meteen alle mogelijke manieren gecovered.

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

Verwijderd

Gaat het hier om een winforms project, of is het misschien een web applicatie? Als het een web applicatie is moet je bij de textbox namelijk de property AutoPostback op true zetten om dit event af te vangen.
Pagina: 1