Button optionen ( Panel visible = true/false )

Diskutiere Button optionen ( Panel visible = true/false ) im Developer Network Forum im Bereich Hardware & Software Forum; Also ich möchte das ein panal mit Rechenergebnissen erscheint wenn ich den button klicke Kurzfassung: Public Class Form1 Private Sub...
  • Button optionen ( Panel visible = true/false ) Beitrag #1
Bruder_B

Bruder_B

Aktives Mitglied
Dabei seit
06.03.2008
Beiträge
38
Reaktionspunkte
0
Also ich möchte das ein panal mit Rechenergebnissen erscheint wenn ich den button klicke

Kurzfassung:
Code:
Public Class Form1
    Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
        Panel1.Visible = False
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If [COLOR="Lime"]Button1.Enabled[/COLOR] Then
            Panel1.Visible = True
        End If
    End Sub
End Class

brauch einen anderen Befehl (grün)
 
  • Button optionen ( Panel visible = true/false ) Beitrag #2
WhiskeyCola16

WhiskeyCola16

Bekanntes Mitglied
Dabei seit
22.12.2001
Beiträge
971
Reaktionspunkte
1
Ort
Österreich
Das "grüne" ist ein Property, kein Befehl.
Die if Abfrage ist unnötig. Ein Button reagiert nämlich gar nicht auf ein click-event, wenn er disabled ist. Lass die Abfrage weg, dann passt's ja.
 
  • Button optionen ( Panel visible = true/false ) Beitrag #3
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Visible im Paint-Ereignis auf False zu setzen scheint mir keine gute Idee zu sein. Dann verschwindet das nämlich vermutlich immer, sobald du irgendein Fenster oder sonstwas drüberschiebst. Wenn es einfach nur beim Start unsichtbar sein soll, dann setzt du am besten direkt im Editor Visible auf False, und im Click-Ereignis des Buttons auf True.
 
  • Button optionen ( Panel visible = true/false ) Beitrag #4
Bruder_B

Bruder_B

Aktives Mitglied
Dabei seit
06.03.2008
Beiträge
38
Reaktionspunkte
0
Visible im Paint-Ereignis auf False zu setzen scheint mir keine gute Idee zu sein. Dann verschwindet das nämlich vermutlich immer, sobald du irgendein Fenster oder sonstwas drüberschiebst. Wenn es einfach nur beim Start unsichtbar sein soll, dann setzt du am besten direkt im Editor Visible auf False, und im Click-Ereignis des Buttons auf True.

Korrekt!!
so funktionierts dankeschön
 
  • Button optionen ( Panel visible = true/false ) Beitrag #5
Bruder_B

Bruder_B

Aktives Mitglied
Dabei seit
06.03.2008
Beiträge
38
Reaktionspunkte
0
Warum kann ich AND nicht zweimal benutzen???
 
  • Button optionen ( Panel visible = true/false ) Beitrag #6
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Wo steht, dass man das nicht kann?
 
  • Button optionen ( Panel visible = true/false ) Beitrag #7
Bruder_B

Bruder_B

Aktives Mitglied
Dabei seit
06.03.2008
Beiträge
38
Reaktionspunkte
0
hab den fehler gefunden

so ists richtig
Code:
Public Class Form1

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        If TextBox1.Text <> "" And TextBox3.Text <> "" And TextBox5.Text <> "" Then

            Button1.Enabled = True
        Else
            Button1.Enabled = False
        End If
    End Sub

    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
        If TextBox2.Text <> "" And TextBox4.Text <> "" Then

            Button1.Enabled = True
        Else
            Button1.Enabled = False
        End If
    End Sub

    Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
        If TextBox1.Text <> "" And TextBox3.Text <> "" And TextBox5.Text <> "" Then

            Button1.Enabled = True
        Else
            Button1.Enabled = False
        End If
    End Sub

    Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged
        If TextBox2.Text <> "" And TextBox4.Text <> "" Then

            Button1.Enabled = True
        Else
            Button1.Enabled = False
        End If
    End Sub

    Private Sub TextBox5_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox5.TextChanged
        If TextBox1.Text <> "" And TextBox3.Text <> "" And TextBox5.Text <> "" Then

            Button1.Enabled = True
        Else
            Button1.Enabled = False
        End If
    End Sub


End Class

Ich wusste nicht das man die befehle für jede Textbox wiederholen muss.
oder gibt es eine kürzere variante??
 
  • Button optionen ( Panel visible = true/false ) Beitrag #8
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Die einfachste Variante ist, eine eigene Prozedur zu schreiben, die die Bedingungen für Freigaben/Sperren prüft und alle Bedienelemente entsprechend aktualisiert. Die brauchst du dann nur noch in jedem relevanten Ereignis aufrufen.
 
  • Button optionen ( Panel visible = true/false ) Beitrag #9
Bruder_B

Bruder_B

Aktives Mitglied
Dabei seit
06.03.2008
Beiträge
38
Reaktionspunkte
0
Ich hab mir jetz ma das Thema Prozeduren angesehen weiß jetz nur nich wie ich das darauf umsetzen soll:confused::confused::confused::confused:
 
  • Button optionen ( Panel visible = true/false ) Beitrag #10
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Einfach in der Klasse sowas in der Art machen:
z.B. als Beispiel, dass eine Addition automatisch bei der Eingabe berechnet wird, aber nur, wenn in beiden Textfeldern Zahlen eingeben sind.
Code:
Public Class Form1
    Private Sub UpdateControls()
        If IsNumeric(TextBox1.Text) And IsNumeric(TextBox2.Text) Then
            TextBox3.Text = Convert.ToDouble(TextBox1.Text) + Convert.ToDouble(TextBox2.Text)
        Else
            TextBox3.Text = "Werte eingeben!"
        End If
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        UpdateControls()
    End Sub

    Private Sub TextBox2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
        UpdateControls()
    End Sub
End Class

In dieser Funktion kann man natürlich alle möglichen Anzeigen aktualisieren, Buttons sperren/freigeben, Dinge anzeigen/verstecken, ...

Man könnte das natürlich ohne der expliziten Prüfung mit IsNumeric auch mit einem Try-Catch-Block machen, und damit einfach den Fehler, den Convert.ToDouble erzeugt, wenn der String keine Zahl darstellt, abfangen.
 
  • Button optionen ( Panel visible = true/false ) Beitrag #11
Bruder_B

Bruder_B

Aktives Mitglied
Dabei seit
06.03.2008
Beiträge
38
Reaktionspunkte
0
Dankeschön!!:goil::goil:

bin ja noch anfänger und brauch immer noch nen Schlag auf den Hinterkopf:ja:

MfG Bruder B
 
  • Button optionen ( Panel visible = true/false ) Beitrag #12
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Kein Problem. :)
Wobei mir gerade aufgefallen ist, dass die Berechnung nicht ganz sauber ist. Eigentlich sollte die Summe in Klammern stehen und mit Convert.ToString explizit in einen String umgewandelt werden. Geht aber auch so.
 
  • Button optionen ( Panel visible = true/false ) Beitrag #13
Bruder_B

Bruder_B

Aktives Mitglied
Dabei seit
06.03.2008
Beiträge
38
Reaktionspunkte
0
Bei folgendem script/code

Code:
ublic Class Form1
    Sub UpdateTextbox()
        If TextBox1.Text <> "" And TextBox2.Text <> "" _
        Or TextBox1.Text <> "" And TextBox3.Text <> "" _
        Or TextBox2.Text <> "" And TextBox3.Text <> "" Then
            Button1.Enabled = True
        Else
            Button1.Enabled = False
        End If
    End Sub
    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        UpdateTextbox()
    End Sub

    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
        UpdateTextbox()
    End Sub

    Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
        UpdateTextbox()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim A As Integer
        Dim B As Integer
        Dim C As Integer

        A = TextBox1.Text
        B = TextBox2.Text
        [COLOR="Red"]C = TextBox3.Text[/COLOR]

        Dim F As Integer
        Dim G As Integer
        Dim H As Integer

        If TextBox1.Text <> "" And TextBox2.Text <> "" Then
            F = A + B
        ElseIf TextBox1.Text <> "" And TextBox3.Text <> "" Then
            G = A - C
        ElseIf TextBox2.Text <> "" And TextBox3.Text <> "" Then
            H = B * C
        End If

        Label1.Text = F
        Label2.Text = G
        Label3.Text = H

    End Sub
End Class
verinfachte form des eigentlichen scripts/code

macht er mir an der roten (bzw an der stelle wo ich beim debuggen die Textbox frei lasse) stelle, beim debuggen, folgende Fehlermeldung:

"Ungültige Konvertierung von der Zeichenfolge in Typ Integer."
 
Zuletzt bearbeitet:
  • Button optionen ( Panel visible = true/false ) Beitrag #14
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
A, B, und C sind Variablen für Ganzzahl-Werte (Integer). In TextBox3 wird zu diesem Zeitpunkt vermutlich etwas stehen, was sich nicht automatisch in eine solche Ganzzahl konvertieren lässt. Generell ist es sauberer, solche Konvertierungen explizit anzugeben, um dem Compiler zu sagen, was man vor hat. In dem Fall wäre das dann C = Convert.ToInt32(TextBox3.Text). Convert hat dabei Funktion für mehrere Datentypen, diverse Integer (32 Bit, 64 Bit, ...), Double, usw.
Wenn dann allerdings wiederum in der Textbox was steht, was keine Zahl des entsprechenden Typs darstellt, gibts eine Fehlermeldung. Das kannst du verhindern, in dem du vorher prüfst, ob es sich um den gewünschten Typ handelt (so wie ich oben mit IsNumeric), oder mittels eines Try-Catch-Blocks, der den Fehler abfängt. Dann kannst du z.B. eine MessageBox anzeigen, dass man eine Zahl eingeben muss.
 
  • Button optionen ( Panel visible = true/false ) Beitrag #15
Bruder_B

Bruder_B

Aktives Mitglied
Dabei seit
06.03.2008
Beiträge
38
Reaktionspunkte
0
Danke

mach ich gleich mal.
 
Thema:

Button optionen ( Panel visible = true/false )

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben