Zum Inhalt springen

[VB 2008] "Enable" bedingt setzen


Empfohlene Beiträge

Geschrieben

Na Servus!

Ich versuch gerade ein "Anmeldeformular" zu erstellen.

Enthalten sind Name, Nachname, Spitzname und Telefonnummer.Meine doch eher beschränkten Kenntnisse erlauben mir nicht einen Code zu schreiben wonach erst nach vollständigem ausfüllen der Maske der OK_Buton auf enabled=true gesetzt wird.

Diverse versuche mit schleifen und If-anweisungen ergaben bei mir nur kauderwelsch!

Falls mir noch einer erklähren kann, wie ich das ganze da oben in eine Datenbank verfrachte wäre ich unendlich dankbar!

Letzteres ist klein muss... Learning By Dooing bringts da hoff ich auch! Oder?

Danke euch!

Geschrieben
Ich versuch gerade ein "Anmeldeformular" zu erstellen.

wir sprechen hier von einer forms-anwendung?

einen Code zu schreiben wonach erst nach vollständigem ausfüllen der Maske der OK_Buton auf enabled=true gesetzt wird.

beim Form_Load den OK-botton auf disabled setzen, und nach jedem Changed-event in einzelnen formularelementen auf dessen inhalt prüfen und bei erfüllen der kriterien den OK-button auf enabled setzen.

Diverse versuche mit schleifen und If-anweisungen ergaben bei mir nur kauderwelsch!

hellsehen kann der geneigte forumsleser aber nicht, was du denn nun genau versucht hast.

Falls mir noch einer erklähren kann, wie ich das ganze da oben in eine Datenbank verfrachte wäre ich unendlich dankbar!

verrätst du auch, welche datenbank? oder darf ich mir eine aussuchen?

s'Amstel

Geschrieben

Naaa... als hätt ich es nicht geahnt... :)

Danke erstmal für die antwort! Also stell ich erstmal mein Ziel und mein Projekt vor:

Ich will mir selber beibringen, kleine Programme zu schreiben und besitze absolut keine Vorkenntnisse... letzteres bekämpfe ich seit geraumer Zeit mit den netten Tutorials von MSDN, dem Buch "Programmieren lernen mit VisualBasic2005" von Microsoft Press (9€ Kaufpreis haben mich von der aktuellen 08´er Version abgebrach) und Einem Buch von "Markt und Technik": "Visual Basic 2008"

Aufgrund der Tatsache, das mich das nicht wiklich weiter bringt, da ich eher einer bin der was macht anstatt zu lesen versuche ich mich momentan an einer Art kleinem "Kassenbuch" für einen Jugendklub bei mir um die ecke.

Dazu soll es eine Datenbank geben, die Waren und die dazugehörigen Preise speichert, wenn möglich aus dem Programm heraus editierbar, denn noch eine, die die Mitglieder mit den Parametern: Name, Nachname, Spitzname, und Telefon speichert.

verrätst du auch, welche datenbank? oder darf ich mir eine aussuchen?

Hab ich damit auch abgehandelt, ich möchte mich datrum aber erst kümmern, wenn es so weit ist, dass die funktionalität innerhalb des Programms gegeben ist.

Das ganze soll in einer Windows-Forms-Anwendung passieren.

wir sprechen hier von einer forms-anwendung?

wäre damit hoff ich geklärt.

Ich habe folgendes in meiner verzweiflung versucht:

IF Textbox1.text = "" then 

OK_Button.enabled = not OK_button enabled

else OK_Button enabled = true

End If
Damit wollte ich erreichen, das der wert für enabled auf true gesetzt bleibt und vom Programm beim Start des Formulares auf false und nur dann true gesetzt wird wenn der Text in Textbox1 eben nicht "nichts" ist... Ich hoff das war verständlich. Das ganze habe ich dann noch etwas umformuliert für eine while-Schleife, was auch nicht den gewünschten Erfolg hatte!
hellsehen kann der geneigte forumsleser aber nicht, was du denn nun genau versucht hast.
hätten wir auch... bei meinen kontrollhäkchen funktioniert es aber anstandslos über folgenden code:
 Private Sub AFrei_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AFrei.CheckedChanged

        AFreiEingabe.Enabled = Not AFreiEingabe.Enabled

    End Sub

Hier habe ich ein häckchen, was gesetzt werden muss um die menge an ausgegebenem A-Frei getränken eintragen und dann buchen zu können.

Meinst du vieleicht sowas?

Dank dir erstmal!

Gruß Roller

Geschrieben

IF Textbox1.text = "" then 

OK_Button.enabled = not OK_button enabled

else OK_Button enabled = true

End If
Damit wollte ich erreichen, das der wert für enabled auf true gesetzt bleibt und vom Programm beim Start des Formulares auf false und nur dann true gesetzt wird wenn der Text in Textbox1 eben nicht "nichts" ist... Ich hoff das war verständlich. Das ganze habe ich dann noch etwas umformuliert für eine while-Schleife, was auch nicht den gewünschten Erfolg hatte!
Wie wärs mit:
OK_Button.Enabled = NOT string.IstNullOrEmpty(Textbox1.text)

Ansonsten: Wo steht die Abfrage denn drin?

Beim TextChangedEvent der TextBox?

Geschrieben

ich weiß ich werde hier gleich wieder als teufel bezichtigt, aber warum machst du das nicht einfach über nen timer und schreibst im timer :


dim str1 as String = textbox1.text

dim str2 as String = textbox2.text

IF not st1 = "" and not str2 = "" (etc. je nachdem wieviele felder du prüfen willst) Then

OK_button.enable = True 

else

...

end if

Sofern dir der Timer nicht gefällt kannst dir ja mal das Mouse Hover event beim Button zurecht legen, jedoch wird eben dann erst überprüft, wenn die maus über den Button schweift. Alternativ kannst du dir ja auch mal die events deines formulars anschaun. Da gibts auch massig events die bei einer mausreaktion eintreten. Aber wie gesagt der Timer wäre für sowas wie geschaffen.

Und wenn du die eingaben auf nen bestimmten inhalt überprüfen willst kannst auch nocht beispielsweise str1.contains("Zeichenkette nach dem hier anzugebenden Zeichen durchsuchen")

lg

simon

Geschrieben

es macht allerdings kaum sinn, einen timer zu verwenden, noch mausevents abzufragen, wenn events wie Changed ohnehin bei jedem verlassen des controls ausgelöst werden.

dim str1 as String = textbox1.text

ebenso sind variablen zum zwischenspeichern von zeichenketteninhalten aus controls nur umwege zur lösung.

s'Amstel

Geschrieben (bearbeitet)
Wie wärs mit:

OK_Button.Enabled = NOT string.IstNullOrEmpty(Textbox1.text)

Ansonsten: Wo steht die Abfrage denn drin? Beim TextChangedEvent der TextBox?
Habe dadurch einen Teilerfolg erungen: In mein Programm eingebaut und den Wert für OK_Button.enabled=false gesetzt, ergibt sich erst nach der eingabe im Phone-Feld, das der OK-Button enabled=true ist. Der Code sieht folgendermaßen bisher aus:
Imports System.Windows.Forms


Public Class NeuerKontakt

    '

    ''Aktiviert den OK_Button erst bei einer eingabe in das Phone-Textfeld

    Private Sub Phone_textChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Phone.TextChanged

        OK_Button.Enabled = Not String.IsNullOrEmpty(Phone.Text)

    End Sub


    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click

        Me.DialogResult = System.Windows.Forms.DialogResult.OK

        Me.Close()

    End Sub


    Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click

        Me.DialogResult = System.Windows.Forms.DialogResult.Cancel

        Me.Close()

    End Sub


End Class

Gibt es eventuell eine galantere lösung? Dann bitte her damit! :) Kann ich das auch noch irgendwie davon abhängig machen, dass zwingend bei Phone eine Zahl eingegeben wird? Kann es mir jemand anhand des obigen Codeschnipsels erklären? Ich danke euch auf jedenfall für eure schnelle und umfassende Hilfe! Sehr lustig ist in dem Zusammenhang folgende konstelation:
Private Sub phone_textChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Phone.textChanged

        OK_Button.Enabled = Not OK_Button.Enabled

    End Sub

Das bewirkt, das nach jedem Tastendruck der OK_Butten seinen enabled wert ändert... Äußerst neckich! :)

Bearbeitet von Rollermann
Ich hätte Deutsch nicht abwählen dürfen! :)
Geschrieben
Kann ich das auch noch irgendwie davon abhängig machen, dass zwingend bei Phone eine Zahl eingegeben wird? Kann es mir jemand anhand des obigen Codeschnipsels erklären?


    Private Sub Phone_textChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Phone.TextChanged

        OK_Button.Enabled = ((Not String.IsNullOrEmpty(Phone.Text)) ANDALSO (IsNumeric(Phone.Text)))

    End Sub

Prüft ab, ob der Text in eine Zahl konvertiert werden kann (wenn er nicht leer ist).

Geschrieben

Habe Heute versucht, Das so umzuformulieren, das Alle Textboxen abgefragt werden:

    '

    ''Aktiviert den OK_Button erst nach ausfüllen aller Textfelder

    Private Sub Phone_textChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Phone.TextChanged

        OK_Button.Enabled = _

       (Not String.IsNullOrEmpty(Prename.Text)) AndAlso _

       (Not String.IsNullOrEmpty(Lastname.Text)) AndAlso _

       (Not String.IsNullOrEmpty(Nicname.Text)) AndAlso _

       (Not String.IsNullOrEmpty(Phone.Text)) AndAlso _

       (IsNumeric(Phone.Text))

    End Sub

Das bewirkt dummer weise, dass nur wenn ich Phone.text als letztes bearbeite OK_button "true" erhält... Das ist nicht wirklich Benutzerfreundlich, ich mach mich mal auf die suche nach ner lösung und poste sie noch, gemäß dem fall ich find was... :)

Gruß Roller

Geschrieben

Simpelste Möglichkeit:

Private Sub Prename_textChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Prename.TextChanged

        OK_Button.Enabled = checkOkButtonEnable()

    End Sub


Private Sub Lastname_textChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Lastname.TextChanged

        OK_Button.Enabled = checkOkButtonEnable()

    End Sub


Private Sub Nicname_textChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Nicname.TextChanged

        OK_Button.Enabled = checkOkButtonEnable()

    End Sub


Private Sub Phone_textChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Phone.TextChanged

        OK_Button.Enabled = checkOkButtonEnable()

    End Sub


Private Function checkOkButtonEnable () as Boolean

    return ((Not String.IsNullOrEmpty(Prename.Text)) AndAlso _

       (Not String.IsNullOrEmpty(Lastname.Text)) AndAlso _

       (Not String.IsNullOrEmpty(Nicname.Text)) AndAlso _

       (Not String.IsNullOrEmpty(Phone.Text)) AndAlso _

       (IsNumeric(Phone.Text)))

end function

bzw:



Private Sub Phone_textChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Prename.TextChanged, Lastname.TextChanged, Nicname.TextChanged, Phone.TextChanged

        OK_Button.Enabled = checkOkButtonEnable()

    End Sub


Private Function checkOkButtonEnable () as Boolean

    return ((Not String.IsNullOrEmpty(Prename.Text)) AndAlso _

       (Not String.IsNullOrEmpty(Lastname.Text)) AndAlso _

       (Not String.IsNullOrEmpty(Nicname.Text)) AndAlso _

       (Not String.IsNullOrEmpty(Phone.Text)) AndAlso _

       (IsNumeric(Phone.Text)))

end function

Geschrieben
es macht allerdings kaum sinn, einen timer zu verwenden, noch mausevents abzufragen, wenn events wie Changed ohnehin bei jedem verlassen des controls ausgelöst werden.

ebenso sind variablen zum zwischenspeichern von zeichenketteninhalten aus controls nur umwege zur lösung.

s'Amstel

um das verlassen des controls zu bewirken muss jedoch außerhalb der textbox geklickt werden was unsinn ist. Ich meine wer klick den ins form wenn er sein text in die Textbox eingegeben hat?

beim timer must du gar nichts machen nur warte je nachdem wie du dein intervall eingsellt hast.

das zweitere argument ist in manchen fällen ein zwingender umweg, wenn du nicht willst das man beispielsweise deine datebank durchvorstet (sql injektion), wenn du dein control direkt ins command einfügst.

Geschrieben
um das verlassen des controls zu bewirken muss jedoch außerhalb der textbox geklickt werden was unsinn ist.

Man kann auch einfach auf die Key-/Focus-Events horchen, dann wars das mit dem Problem.

Ich meine wer klick den ins form wenn er sein text in die Textbox eingegeben hat?

Wenn ich bei einer Textbox den Text eingegeben hab, drückt man logischerweise wo anders hin (oder Tab). :rolleyes:

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...