2016-03-25 3 views
0

Der Übergang von VB.NET zu C# 2008. Ich habe wirklich viel gelernt, möchte aber ein paar Fragen stellen.Wie füge ich eine neue Funktion (Methode) in die Klasse ein?

Wenn ich dynamische Steuerelemente erstellen, muss ich ihnen Ereignisse hinzufügen. Also muss ich diese Ereignisse in meine Programme einfügen. IE ...

Erstellen Sie eine TextBox, dann müssen Sie eine KeyUp Ereignis hinzufügen. Was ich jetzt mache, ist ein Textfeld auf meinem Formular, gehen Sie zu seinen Ereignissen, doppelklicken Sie auf das gewünschte Ereignis, benennen Sie die Funktion um, was ich will, und löschen Sie das Textfeld aus dem Formular.

Gibt es keine neue Funktion einfügen (per Menü oder Rechtsklickmenü?) Oder ist es möglich, alle Parameter zu lernen? Objekt Absender ziemlich einfach, aber die EventArgs ändert sich.

TIA:} DPRoberts

+0

Ist dies WebForms oder WinForms? Kennst du auch Delegierte? – onefootswill

+0

F12 Schlüssel ist dein Freund. Bitte zögern Sie nicht, es zu drücken. –

+0

@DiligentKeyPresser F1 ist eine andere Alternative (auch RTFM ist nicht wirklich akzeptable Ansatz mehr, also vielleicht ist Ihre Route von graben durch Metadaten/dekompilierten Code moderner). –

Antwort

0

Sie könnten über delegates und lambda expressions dafür lernen.

Hier ist ein Beispiel, das könnte helfen.

 for(int k = 0; k < 5; k++) 
     { 
      TextBox tb = new TextBox(); 
      tb.Name = "tb1"; 
      tb.Click += (obj, evntArgs) => 
      { 
       //This is your click event code for this text 
      }; 
     } 

Hoffe, das hilft!

+0

In der Zeile tb.Click + = (obj, evntArgs) => woher wussten Sie, evntArgs (sp?) Zu verwenden. Hast du das auswendig gelernt oder gibt es eine Liste? :} DPRoberts – DPRoberts

+0

@DPRoberts tatsächlich, wird das IntelliSense Ihnen helfen, Ihren Event-Handler zu erstellen, wenn Sie Tab nach + = [Leerzeichen] drücken, für welche Ereignisse verfügbar sind, sobald Sie "tb." Dann beginnt das IntelliSense auch für Sie zu füllen. Also Speicher Arbeit ist Minimum ... Dies gilt für mindestens VS2010 mindestens .. – Ian

+0

@DPRoberts der Löwenanteil der Ereignisse haben die Delegate-Typ EventHandler, die einen EventArgs-Typ für die Ereignisargumente. Ein Beispiel für etwas, das einen anderen Typ verwendet, finden Sie unter [CellValueChanged] (https://msdn.microsoft.com/de-de/library/system.windows.forms.datagridview.cellvaluechanged (v = vs.110). aspx) Ereignis. Beachten Sie, dass der Delegattyp für dieses Ereignis DataGridViewCellEventHandler und nicht der Standard-EventHandler ist. Und so hat es die benutzerdefinierte DataGridViewCellEventArgs, die offensichtlich einige Metadaten enthält. Sie müssen nicht alle Argumente lernen. Der Doco hat alles angelegt. – onefootswill

0

Ich hoffe, ich mache das richtig, ich benutze Foren und dergleichen sehr oft nicht. Aber meine Antwort war zu kompliziert als Kommentar.

Die letzten paar Kommentare waren zumindest nahe an dem, was ich brauche. Ich werde hier einen Code einfügen, um die Erklärung zu erklären. ABER!!! Das ist keine Coding-Frage, also wird mir das Reden nicht helfen! Dies ist eine IDE Frage ich suche einen Menüpunkt oder Symbolleiste auf die Schaltfläche, die mir erlauben, eine neue Funktion zum Einfügen OK hier ist ein anschauliches Beispiel (die bereits die richtigen params für eine Veranstaltung kennt.):

TextBox txtTemp = new TextBox(); 
txtTemp.KeyUp += fnKeyUp_txtQtySent; 

txtTemp.Font = fArial10; 
txtTemp.Location = new Point(nXPos, nYPos); 
txtTemp.Tag = sTag; 
txtTemp.Text = dbRDR.GetInt32(1).ToString(); 
txtTemp.TextAlign = HorizontalAlignment.Center; 
txtTemp.Width = 48; 
pnlContracts_Open.Controls.Add(txtTemp); 

Jetzt Der nächste Schritt ist das Erstellen/Einfügen einer FnKeyUp_txtQtySent Funktion/Methode. Ich mache es derzeit auf eine von zwei Arten, cut/paste von einem anderen KeyUp-Ereignis oder dem 5-6-Schritt-Weg, den ich oben erklärt habe. Gibt es einen Menüpfad, der IE tut (Einfügen> Ereignis> TextBox> KeyUp. Dann wird ein leeres KeyUp-Ereignis eingefügt, das umbenannt und codiert werden kann.

Dank ALL für die Bemühungen, ich war ein VB 3,4 , 5,6 Programmierer seit Jahren und nahm eine Auszeit, vor .NET ca. 6 Jahren wieder kommen So ist dies einer der wenigen Dinge, die ich habe nicht gelernt, wie man richtig tun

:..} DPR

+0

Die Sache, die Sie wahrscheinlich sollten (und bitte versuchen Sie, dies als freundlicher Rat zu nehmen, ich versuche nicht, gemein aber konstruktiv zu sein) "lernen" .net, nicht versuchen, kleine Bits unabhängig zu lernen . Nach 6 Jahren .net sollten Sie keine Probleme mit Ereignissen haben, da dies eine der Grundfunktionen der Sprache ist. Ich empfehle Ihnen dringend, ein Buch über .net zu lesen und es von vorne nach hinten zu lesen (ich empfehle pro C# 5.0 und .net 4.5 Framework, es ist groß, aber erschöpfend und wenn Sie bereits wissen, wie Sie die meisten Dinge tun, die Sie brauchen, können Sie einfach den Sprachteil lesen und das Ende des Buches auslassen) –

+0

Wie für eine einfache Möglichkeit, diese Methode zu erstellen, don ' t tun es von Hand, sobald Sie txtTemp.KeyUp + eingegeben haben = Sie sollten in der Lage sein, zweimal auf den Tab zu drücken und am Ende mit der von Ihnen benötigten Methode zu enden. Auch wenn Sie vom Code aus gehen, wie er jetzt ist, sollten Sie in der Lage sein, mit der rechten Maustaste auf fnKeyUp_txtQtySent zu klicken und die Methode generate zu wählen. Visual Studio wird die Parameter für Sie herausfinden. –

+0

Danke Ronan, du hast es endlich in deinen letzten Worten verstanden, OK, jetzt sieht es so aus als hätte ich eine Verbindung in meiner IDE, ich benutze 2008 Express. Ich sehe keine Option zum Generieren von Methoden. Ist das nur in der PRO-Ausgabe? Weiß jemand? :} DPR – DPRoberts

0

Ich hoffe, damit zu helfen Wenn ich richtig verstehe, möchten Sie einen Handler "automatisch" erstellen, damit Sie die richtigen Event-Argumente erhalten können.

Wenn Sie Typ sind ing den Namen des Objekts und dann den Namen des Ereignisses, gefolgt von +=:

TextBox.KeyUp +=TabTab

Press Register zweimal, sobald Sie den += Teil beenden. Dadurch wird eine Handlermethode mit den richtigen Argumenttypen erstellt.

Ein weiterer Trick o zu geben, sagen:

TextBox.KeyUp += (a, b) => { //this is an empty function block } 

Und dann setzen Sie die Maus über a und/oder b ihre Tooltips mit ihren abgeleiteten Typen zu sehen. Normalerweise a ist object (der Absender des Ereignisses) und b ist eine Unterklasse von EventArgs, aber oft müssen Sie nicht einmal die Argumente sowieso verwenden.

Und here you have a step-by-step Leitfaden zur Implementierung des Ereignisses und der Handler, falls Sie benötigen.

+0

Vielen Dank Helton, Ihr Link ist eine Menge, was zu tun ist, muss ich tun. Ich mag den Trick, den du erwähnt hast, ich denke, das wäre ein dritter Weg. Aber es muss einen Weg geben, es in der IDE zu tun. Ich denke, dass ich Ronins Kommentar oben sehr nahe bin. Können Sie bitte einen Blick darauf werfen und sehen, ob Sie diese Frage beantworten können. :} DPR – DPRoberts

+0

"tun Sie es in der IDE" bedeutet "+ =" nach dem Ereignisnamen eingeben und Registerkarte zweimal drücken. Hast du es schon probiert? Es wird eine Code-Vorlage der Methode für Sie erstellen! So wird es gemacht, so macht das jeder in Visual Studio! – heltonbiker

0

Vielen Dank für den Versuch, besonderen Dank an Ronan! Mit den Keywords "Generate Method" von Ronan fand ich, was ich brauchte. Es scheint, dass VS 2008 nicht die Shortcuts-Tasten Strg + K + M oder ein Rechtsklick-Menü hat, um dies zu tun. Ich habe VS 2012 installiert und sie waren beide da.

Da ich die Sprachen VB zu C# ändere, wird es auch die Versionen wechseln. Es war erstaunlich, dass es nach Jahren des Schneidens/Einfügens funktioniert. Ich habe eine Webseite mit einer Liste von Verknüpfungen gefunden, und die oben erwähnte wird nicht nur in den Jahren 2015, 2012 und 2013 angezeigt.

Danke nochmal, und ich dachte über die Frage nach.

:} DPRoberts

Verwandte Themen