Methode2 aus Methode1 aufrufen
-
Freitag, 15. März 2013 14:41
Hallo Leute,
ich bin mal wieder an einem Punkt an dem ich eure Hilfe brauche. Ich habe folgendes Problem:
Ich möchte durch einen TextBoxeintrag die Variable "side" ändern und dann die Seite neu aufrufen.
Den TextBoxeintrag habe ich hinbekommen, aber um die Seite neu aufrufen zu können müsste ich entweder etliche Zeilen Code mit Copy&Paste einfügen, oder aber (und das möchte ich gerne tun) die entsprechende Methode aufrufen.
Daher jetzt meine Frage: Wie kann ich aus Methode2 die Methode1 aufrufen?
Mein bisheriger Code:
private void actualsidebox1_TextChanged(object sender, EventArgs e) { int sidebefore = side; string sideboxtext = actualsidebox1.Text; sideboxtextcon = Convert.ToInt32(sideboxtext); side = sideboxtextcon; if (side < sidebefore) { lastsidebutton1_Click.methode(); //parameter fehlen und der der Name lastsidebutton1_Click ist angeblich im aktuellen Kontext nicht enthalten. } else if (side > sidebefore) { nextsidebutton1_Click.methode(); //parameter fehlen und der der Name lastsidebutton1_Click ist angeblich im aktuellen Kontext nicht enthalten. } }Ich habe irgendwo gelesen, dass man die entsprechenden Methoden auf public umstellen muss. Das habe ich auch getan.
mfg
Timo
Greetings Timo
Alle Antworten
-
Freitag, 15. März 2013 14:52Moderator
Hallo,
Soweit ich deinen Code verstehe, hast du einen Eventhandler namens nextsidebutton1_Click und lastsidebutton1_Click. Das einfachste wäre 2 Methoden zu erstellen die das selbe ausführen wie die Eventhandler. Aus den Eventhandlern heraus rufst du dann die beiden Methoden auf. Aus deinem gezeigtem Code ebenfalls. Dadurch sparrst du dir die Parameter. Was man auch machen kann ist als Paramater einfach null zu übergeben, das sollte man allerdings nur machen wenn man ide Parameter garantiert nicht benötigt.
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets -
Freitag, 15. März 2013 15:15Beantworter
Hallo Timo,
Buttons kennen die PerformClick Methode, damit wird die Ereignis-Behandlung für das Click-Ereignis aufgerufen. Das dürfte in Deinem Falle der einfachste Weg sein:
lastsidebutton1.PerformClick();
Dabei brauch die Ereignisroutine selbst nicht mehr public (oder internal) sein.
Alternativ kann man für den Eventhandler auch Argumente bereitstellen, z. B.:
lastsidebutton1_Click(sender, EventArgs.Empty);
sender wäre hier die TextBox - normalerweise wäre es der Button selbst (lastsideButton1), was man ggf. ausnutzen könnte.
Gruß Elmar
-
Freitag, 15. März 2013 15:18
Also Eventhandler habe ich keine. Ich habe lediglich zwei weitere Methoden:
public void button1_Click(object sender, EventArgs e) //das ist der lastsidebutton. Der IDE lässt mich aber aus unbekannten Gründen den Namen nicht ändern. Ich kann ihn zwar im Entwurf ändern, er wird hier jedoch nicht übernommen. { } public void nextsidebutton1_Click(object sender, EventArgs e) { }@Elmar
Ok danke für den Tipp. Ich weis aber immer noch nicht wie ich jetzt aus dieser Methode heraus eine andere aufrufen kann.
Greetings Timo
- Bearbeitet Timo Sö Freitag, 15. März 2013 15:22
-
Freitag, 15. März 2013 15:25Moderator
Abgesehen davon das PerformClick sicherlich einfacher ist,
die jetzt von dir gezeigten Methoden bezeichnet man als Eventhandler, da diese ein Event handlen. Diese werden also aufgerufen, wenn das Event ausgelöst wird. Nochmal als Beipiel, wie ich das meinte:
public void button1_Click(object sender, EventArgs e) //das ist der lastsidebutton. Der IDE lässt mich aber aus unbekannten Gründen den Namen nicht ändern. Ich kann ihn zwar im Entwurf ändern, er wird hier jedoch nicht übernommen. { LastSide(); } public void nextsidebutton1_Click(object sender, EventArgs e) { NextSide(); } private void actualsidebox1_TextChanged(object sender, EventArgs e) { int sidebefore = side; string sideboxtext = actualsidebox1.Text; sideboxtextcon = Convert.ToInt32(sideboxtext); side = sideboxtextcon; if (side < sidebefore) { LastSide(); } else if (side > sidebefore) { NextSide(); } }Die Methoden NextSide und LastSide enthalten dann den Code des Eventhandlers. So kann man es immer machen, wenn man nicht gerade so etwas wie PerformClick zur verfügung hat.
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets -
Freitag, 15. März 2013 15:30
Danke für die Erklärung.
Ich verstehe nur nicht, wie ich das dann mit LastSide() / NextSide() machen soll. Ich muss die schließlich irgendwie definieren.
Greetings Timo
- Bearbeitet Timo Sö Freitag, 15. März 2013 15:39 Rechtschreibfehler
-
Freitag, 15. März 2013 15:46Moderator
Einfach eine Methode:private void LastSide() { //Code aus dem Eventhandler } private void NextSide() { //Code aus dem Eventhandler }Dort muss dann der Code aus den Eventhandlern (nextsidebutton1_Click und button1_Click) rein.<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets- Als Antwort markiert Timo Sö Freitag, 15. März 2013 15:56
-
Freitag, 15. März 2013 15:56
Ah, vielen Dank!
Jetzt verstehe ich es und jetzt kalppt es auch.
Nochmal so nebenbei, gibt es eine Möglichkeit zu verhindern das in einer TextBox etwas anderes als eine Zahl eingegeben wird?
Greetings Timo
-
Freitag, 15. März 2013 15:59ModeratorJa gibt es. Man könnte beispielsweise TextChanged abfangen und die User-Eingabe validieren. Siehe Regex. Wenn es allerdings speziell um Zahlen geht, dann ist das NumericUpDown bestimmt besser geeignet. Dieses akzeptiert nur Zahlen nach deiner Vorgabe.
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets -
Freitag, 15. März 2013 16:02
Danke für deine Antwort und die Links.
Ich blicke bei Microsofts "Erklärungen" aber nie richti durch. Anstatt einen Beispielcode zu geben klatschen die einem sowas um die Ohren.
[DefaultBindingPropertyAttribute("Value")] [ComVisibleAttribute(true)] [ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)] public class NumericUpDown : UpDownBase, ISupportInitializeEinem Profi mag das was sagen, aber einem Neuling nicht. Naja, ich google dann einfach mal NumericUpDown.
Greetings Timo
-
Freitag, 15. März 2013 16:06Moderator
Naja, das ist die Deklaration der Klasse. Da kann man als "Profi" ein paar sachen draus erkennen. Für dich ist eigentlich nur Interesannt das es ein Steuerelement für WinForms ist. Du findest es in der ToolBox und kannst entsprechen die Eigenschaften usw. wie bei jedem Anderen Control über das Eigenschaftenfenster (F4) ändern.
Die Beispiele sind, wenn es welche gibt, immer ganz unten im MSDN-Artikel. Ansonten lohnt es sich fast immer auch mal auf CodeProject vorbei zu schauen, da gibt es oftmals auch hilfreiche Tutorials o.ä.:
http://www.codeproject.com/search.aspx?q=numericupdown+tag%3aC%23&doctypeid=1%3b2%3b3<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets -
Freitag, 15. März 2013 16:09
Ah, ok Danke.
Ich habe mich entschlossen Regex zu nehmen. Ich möchte nämlich meine eigenen Buttons anstatt der in NumericUpDown benutzen. Daher fällt diese Möglichkeit leider flach.
Greetings Timo
-
Freitag, 15. März 2013 16:14Moderator
Ehe du lange suchst, ein einfacher Regex zum überprüfen ob nur Zahlen enthalten sind ist folgender:if(!Regex.IsMatch(textBox1.Text, @"^\d+$")) { //Irgendwas stimmt nicht... }Dabei darf der String nur Zahlen enthalten . Von Anfang (^) bis Ende ($). \d ist eine Zahl von 0 bis 9. Das + steht dafür, dass mindestens eine oder mehr Zahlen enthalten sein müssen.
Auf Wikipedia gibt es eine große Liste von funktionierenden Syntaxelementen: http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck
Auf meiner Webseite habe ich nochmal speziel Syntaxelemente für .NET aufgelistet: http://code-13.net/Tutorials/Regex/Syntax.aspx<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets- Als Antwort markiert Timo Sö Freitag, 15. März 2013 16:27
-
Freitag, 15. März 2013 16:27
Vielen Dank. Jetzt funktioniert alles wunderbar.
Übrigens, auf deiner Wevsite ist bei dem Stichpunkt "Zeichengrenzen" ein Teil der Codebeispiele abgeschnitten.
mfg
Timo
Greetings Timo
-
Freitag, 15. März 2013 16:48ModeratorDanke für den Hinweis :)
Habe es jetzt etwas abgeändert, so das es jetzt gehen müsste.<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets -
Freitag, 15. März 2013 17:36
Kein Problem.
Aber jetzt gibt es das selbe Problem bei "Spezielle Zeichen & Operatoren".
Greetings Timo
-
Freitag, 15. März 2013 17:45Moderator
Soweit ich das sehe nicht, wenn man auf die Überschriften klickt öffnet sich der Inhalt, so ähnlich wie in den MSDN Artikeln. Ich habe das jetzt erstmal alles zusammen geklappt, da es sonst das von dir beschriebene Problem gibt.
Ich fange gerade erst an etwas mit ASP.NET herum zu probieren, ansonsten werde ich den Fehler bestimmt demnächst vollkommen entfernen, sodass man das nicht erst alles wieder aufklappen muss.
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets -
Freitag, 15. März 2013 19:24
Hi,
Nur mal so am Rande Regex ist dafür eigentlich nicht nötig. (Overhead) ein einfaches:
int intVal; if (int.TryParse("-14", out intVal))tut bereits das Gewünschte.
Gruß, Ulf
-
Samstag, 16. März 2013 11:36Danke für den Tipp.
Greetings Timo

