Nias Geschrieben 4. Dezember 2008 Teilen Geschrieben 4. Dezember 2008 Hallo, kurze Frage; wie kann ich eigene Komponenten herstellen. Ich denke dabei an so etwas wie die Dialogs oder Timerkomponente, die man aus der Toolbox in den Designer zieht und UNTEN in einer zusätzlich erscheinenden Leiste auftauchen. Hintergrund ist, dass ich mir ein eigenes Infofenster zusammenbastel', dass ich überall und jederzeit einbinden kann und den Rest von selbst erledigt. Bin für Antworten sehr dankbar, vielleicht suche ich aber auch einfach unter dem falschen Begriff... -.- Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
words_of_silence Geschrieben 5. Dezember 2008 Teilen Geschrieben 5. Dezember 2008 In .NET ist das recht einfach, wenn du beispielsweise einfach ein vorhandenes Control erweitern oder anpassen möchtest. Dazu erstellst du dir eine Klasse "bla", welche von dem entsprechenden Control erbt. Bsp: (hier wird ein dateTimePicker mit einem DoubleClick - Event ausgestattet): Public Class clsDTPExtended Inherits DateTimePicker Private m_LastClickPosition As Point Private m_LastClickTime As Long Private m_LastClickRaisedDoubleClick As Boolean Public Shadows Event DoubleClick( _ ByVal sender As Object, _ ByVal e As EventArgs _ ) Protected Overrides Sub OnDoubleClick(ByVal e As EventArgs) RaiseEvent DoubleClick(Me, e) End Sub Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs) If e.Button = MouseButtons.Left Then If _ Not m_LastClickRaisedDoubleClick AndAlso _ Now.Ticks - m_LastClickTime <= _ SystemInformation.DoubleClickTime * 10000 AndAlso _ IsInDoubleClickArea(m_LastClickPosition, Cursor.Position) _ Then OnDoubleClick(EventArgs.Empty) m_LastClickRaisedDoubleClick = True Else m_LastClickRaisedDoubleClick = False End If m_LastClickPosition = Cursor.Position m_LastClickTime = Now.Ticks End If MyBase.OnMouseDown(e) End Sub Private Function IsInDoubleClickArea( _ ByVal Point1 As Point, _ ByVal Point2 As Point _ ) As Boolean Return _ Math.Abs(Point1.X - Point2.X) <= SystemInformation.DoubleClickSize.Width AndAlso _ Math.Abs(Point1.Y - Point2.Y) <= SystemInformation.DoubleClickSize.Height End Function End Class Im Form kannste dann ganz normal über "New" das Control erzeugen bzw. du ziehst dir dann ein DTP auf das Formular und passt in der Designerdatei die Klasse des Objekts an. Wenn du komplett ein eigenes Control erstellen willst, dann schau dir mal folgendes Tutorial an: Creating Custom .NET Controls with C# | O'Reilly Media So long, wos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xk4fu Geschrieben 8. Dezember 2008 Teilen Geschrieben 8. Dezember 2008 also kurz gesagt, musst du nur im control, wo du ein neues control adden willst control.add(neues control) machen... vom neuen control kannst du dann auch den dockstyle, die coordinaten usw setzen das einfachste ist mal, du guggst in die region "Windows Form Designer generated code" so, wie hier der code automatisch generiert wird, wenn du ein label zeichnest, machst du das dann auch Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Nias Geschrieben 31. Dezember 2008 Autor Teilen Geschrieben 31. Dezember 2008 Sorry, ich war in der letzten Zeit ein wenig zu beschäftigt... Erstmal danke für die Antworten, aber (ja leider), ich möchte keine Komponenten gestalten, die ausschließlich für WinForms gedacht sind und man sich auf die Form ziehen kann, das ist nicht das Problem. Es gibt da aber diese Dialoge und ähnliche andere "Dinge" (wie gesagt, vermutlich benutze ich den falschen Begriff), die man sich auch in den Designer zieht und seperat eingezeigt werden. Ein ColorDialog wird ja auch nicht in seiner ganzen Pracht im Designer angezeigt, sondern nur durch ein stellvertretendes Icon in einer seperaten Leiste. Wie man sowas anstellt, interessiert mich. Andernfalls muss ich wohl dahergehen und die um IDE ein eigenes ProjektItemTemplate erweitern... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Faustenator Geschrieben 5. Januar 2009 Teilen Geschrieben 5. Januar 2009 Ich hab zwar grad keine Zeit dir nen Beispiel zu geben, aber nen Tip für die nächsten Schreiber hätte ich trotzdem... Ihr werft hier grad fleißig "Controls" und "Components" aus den Namespaces "System.Windows.Forms" und "System.ComponentModel" in einen Topf. Aber das mit den Komponenten, funktioniert ähnlich wie das bereits angegebene Beispiel für die Abgeleitete DateTimePicker-Klasse (für Komponenten wäre das z.B. der BackgroundWorker). Willst Du hingegen eine komplett neue Komponente erstellen muss Du diese eben von "System.ComponentModel.Component" ableiten. Viel Erfolg noch (und ein schönes neues Jahr) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.