sub bedingt aufrufen Verfasst am: 11.05.2008, 16:44
ich will, dass wenn sub A sub B aufruft nichts passiert, aber wenn sub C sub B aufruft das passiert das passieren soll.
also ich hab ne textbox in der ich ab und zu was ersetze, und ich will, dass das textbox_change event NICHT aufgerufen wird wenn der text intern verändet wird zB durch replace. es soll nur aufgerufen werden wenn der user was eingibt _________________
Hamtaro Tutorial Leser
Anmeldedatum: 17.04.2008 Beiträge: 29
Verfasst am: 11.05.2008, 17:02
Ohne subclassing wohl nicht möglich und meiner Meinung nach auch unsinnig. Warum willst du das denn überprüfen, mit einer globalen Variable ist das bestimmt einfacher. Außerdem meinst du eine Klasse und keine Sub, oder?
Marduk Überflieger
Anmeldedatum: 16.04.2008 Beiträge: 374
Verfasst am: 11.05.2008, 17:09
Gib doch Sub B einen Parameter, der angibt von wo er aufgerufen wurde. Und wenn der Parameter zugelassen ist, wird dein Code ausgeführt.
Beispiel: Visual Basic: [code] Private Sub Button1_Click(...) 'ist zB jetzt Sub A B("Button1") End Sub
Sub C() B("Sub C") End Sub
Sub B(ByVal quelle As String) '... If quelle = "Button1" Then ElseIf quelle = "Sub C" Then
End If End Sub[/code]
sollniss Überflieger
Anmeldedatum: 01.05.2008 Beiträge: 699
Verfasst am: 11.05.2008, 17:23
Ne, ich hab ne Sub die die Textbox um ein Zeichen kürtzt (wie die Rücktaste), und dabei wird ja die Sub Textbox_Changed aufgerufen, was ich nicht will. Ich ruf die Sub ja nicht direkt auf (mit Call oder so).
The-God-of-all Tutorial Leser
Anmeldedatum: 01.05.2008 Beiträge: 35
Verfasst am: 11.05.2008, 17:27
Dann deklarier doch eine Globale Variable und setze sie bevor du das Zeichen löschst auf True und danach wieder auf False. In der Sub Textbox_Changed machst du dann eine If Abfrage ob die Variable True ist oder nicht.
Marduk Überflieger
Anmeldedatum: 16.04.2008 Beiträge: 374
Verfasst am: 11.05.2008, 17:28
Ja, dann mach das ganze doch wie hamataro gesagt hat mit ner globalen Variable und frage in der Textbox_changed ob die Variable gesetzt worden ist
//war einer schneller
sollniss Überflieger
Anmeldedatum: 01.05.2008 Beiträge: 699
Verfasst am: 11.05.2008, 17:34
janee wo soll ich die Variable wieder auf False setzen? Die Change Sub wird erst aufgerufen wenn die Andere Sub fertig ist.
Marduk Überflieger
Anmeldedatum: 16.04.2008 Beiträge: 374
Verfasst am: 11.05.2008, 17:45
Innerhalb des Textbox_changed Sub änderst du die Variable wieder
Hiermal ein Beispiel
Visual Basic: [code]Public Class Form1 Dim var As Boolean
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click var = True TextBox1.Text = TextBox1.Text.Replace("e", "") MsgBox("test") Dim i, s As Integer i = 5 s = 5 i = i + s i = i / s
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If var = True Then MsgBox("per Code") var = False Else MsgBox("per Hand") End If
End Sub End Class [/code]
Debugge dein Projekt mal durch, Textbox_changed wird bei mir aufgerufen direkt wenn ich die Textbox geändert habe, also hier Visual Basic: [code] TextBox1.Text = TextBox1.Text.Replace("e", "")[/code] Und zu der Zeit ist ja schon die Variable gesetzt, dass die Textbox per Code geändert worden ist. Im _changed Sub änderst du die Variable wieder auf true, damit sie Standardmäßig "Per Hand" ausgibt _________________
ZiG Überflieger
Anmeldedatum: 16.04.2008 Beiträge: 421
Verfasst am: 13.05.2008, 07:12
Btw. kannst du statt dem Change Event ja auch KeyPress, KeyDown oder KeyUp nutzen.
Selbes Problem gibt es nämlich auch bei Checkboxen und ich glaube bei Optionbuttens. Da wird wenn ich mich nicht täusche das Click Event ausgeführt wenn man die Value Eigenschaft per Code ändert. Da nimmt man dann halt MouseDown etc. Dann funktioniert das einwandfrei.