[C#] Eigenschaften zu Controls hinzufügen
-
hmm wartmal aber die tooltip - Komponente die Du meinst könnte nen Container sein
bei der du jed Komponente registrierst gleichzeitig mit dem "Tooltip"
hmm es is schon spät jetzt sehe ich das Ding auch auf meiner Idde wart ich guck mal in meinem Projekt wie man das macht mit dem Ding
-
ne Quatsch is kein Container was rede ich es is ganau das Ding was ich auch
in den vorangegangen Postings habe.
Wie soll das zur Entwurfszeit schon funzen wenn dus da als komponente erst mit der
Maus auf deine Form zihst!Bau nen String - Array wo deine Tooltips drin sind!
Innerhalb ner Schleife gehste durch das String - tooltip - Array
und dann benutzt Du im Schleifenkoerper besagten Code etwas abgewandelt
(um an alle Controls deiner Form was dranzupabben):this.ToolTip1.AutoPopDelay = 5000; this.ToolTip1.InitialDelay = 1000; this.ToolTip1.ReshowDelay = 500; this.ToolTip1.ShowAlways = True; this.ToolTip1.S(...);
hmm da könnte man sich auch wie nennt man das Wrapper - Klassebauen
die nen TooltipStringArray bekommt
desweiteren gibt man der noch ne ControlCollection!
Und dann stempelt einen diese Klasse alle Schildchen (Tooltipps)
off alle Controls in der Collection!
-
jede Komponente hat doch die
(DynamicProperties) drunter is nen Feld hiesst (Advenced)
klick drauf es is egal alle haben dies Teil jetzt geht nen KontextMenu
auf dort drin scrollst du runter bis Tooltip mach dort nen Hacken in das Kästchen besagtes Schlüsselwort kannste so lassen oder wählst selbst eines!Jetzt der Klou es gibt in deinem Projekt im Projektmappenexplorer ne Datei
heisst irgendwie was mit config klick dort doppelt anHier wird in dieser XML - Datei jeder Schlüssel der druch die
DuynamicPropeties ---> ToolTip gewählt wurde abgelegt!Jetzt brauchst du dort nur das leere XML - Element editieren und du hast deine
ToolTip
-
dies ist eine Konfigurationsdatei die bei mir etw so aussieht (ist XML)
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <!-- Benutzeranwendung und konfigurierte Eigenschafteneinstellungen hier einfügen.--> <!-- Beispiel: <add key="settingName" value="settingValue"/> --> <add key="btnStartBrowser.ToolTip" value="Startet den Browser" /> <add key="TextBox1.ToolTip" value="zeigt die Daten deines OPW - Accounts" /> </appSettings> </configuration>
Dort werden die Schüssel der DynamicProperties in unserem Fall ToolTip abgelegt, der Entwickler muss nur hierhinSteuern und das value - Attribut selbst einsetzten weil das der ToolTipp ist der angezeigt werden soll!
-
Such/Guck in der MSDN mal direkt unter Dynamische Eigenschaften
also ich weiss jetzt wies geht! Gut ich muss sagen das hat Microsoft
nen bisschen versteckt, jedoch ist es übers Eigenschaftsfenster erreichbar
(DynamicProperties) bei Tooltip Hacken machen (eventuell dort noch Schlüsselwert selbstdefinieren/am besten so lassen)dann zu besagter config - Datei im Projektexplorer steuern!
Und diese XML - Datei zu editieren.Die Schlüsselwerte sind dort unter den jeweiligen XML - Attribut key
zu finden und das XML - Attribut value is leer das musst du editieren!Dann klappts auch mit den Tooltips, habs eben mal kompiliert läuft super!
mfg sclearscreen
-
Die ToolTip - komponente muss aber drin sein im Projekt die steuert dann global das Ansprechverhalten der "Hints"!
Sowie du kannst während der Laufzeit die "hints" verändern.also denn dein Problem ist von meiner Warte her gelöst, ich hoffe ich war verständlich, auch wenn ich nenn bissl gebraucht habe! Sorry.
-
Servus,
erstmal, wow... soviel Mühe wäre das nicht Wert gewesen
. Ich bedanke mich aufjedenfall bei dir, für deine geopferte Zeit. Aber leider waren deine Ausführung nicht direkt das worauf ich hinauswollte. Die Lösung für das ganze Spektakel ist:
using System; using System.Windows.Forms; using System.ComponentModel; namespace TestComponent { [ProvideProperty("MyProperty", typeof(Control))] public class MyClass : Component, IExtenderProvider { protected bool ciMine = false; // Provides the Get portion of MyProperty. public bool GetMyProperty(Control myControl) { // Insert code here. return ciMine; } // Provides the Set portion of MyProperty. public void SetMyProperty(Control myControl, string value) { // Insert code here. } /* When you inherit from IExtenderProvider, you must implement the * CanExtend method. */ public bool CanExtend(Object target) { return(target is Control); } // Insert additional code here. } }
Das Stichwort ist hierbei "ProvideProperty" / "ProvidePropertyAttribute". Wenn man dieses Attribute bentutzt, benötigt man nur noch Get und Set Methoden für die Eigenschaft und die CanExtend Methode um herauszufinden ob das vorliegende Object vom Typ Control ist, damit man diese Eigenschaft daran pappen kann.
[ProvideProperty("MyProperty", typeof(Control))]
"MyProperty": Der Individuelle Name der Eigenschaft, wobei die Get und Set Methoden dem gleichen Namen entsprechen sollen.
typeof(Control): Der Vergleich für welchen Typ von Controls die Eigenschaft hinzugefügt werden soll. Trägt man hier TextBox ein, werden logischerweise nur Controls vom Typ TextBox zur Designzeit mit der Eigenschaft versehen.
Wenn man das alles in eine Klassenbibliothek packt und aus der Klasse selbst noch eine schöne Komponente "public class MyClass : Component, IExtenderProvider " macht, dann kann man das ganze richtig fein nutzen.
Nocheinmal ein dickes Dankeschön an sclearscreen, denn ohne ihn wäre ich nicht auf diese Fährte gekommen.
mfg
Hellsgore
-
Danke jetzt bin ich aber stolz!
Soviel Ehre jetzt bin ich ganz verlegen...
Ich opfere hier gern Zeit sitze gerade wieder bei meiner Weiterbildung,
momentan ist Selbststudium angesagt. Na denn, ach was Zeit schliesslich lernt man nie aus bei der Sache.mfg aus Erfurt
-
ich hoffe Du bist mir nicht böse habe mir den Code mit Cut/Paste mal geholt
und nach VB. Net umgeschreiben sieht sehr interessant aus[b]Imports[/b] System [b]Imports[/b] System.Windows.Forms [b]Imports[/b] System.ComponentModel <ProvideProperty("MyProperty", "Control")> _ [b]Public Class[/b] DynamicPropertyExtenderForComponents [b]Inherits[/b] Component [b]Implements[/b] IExtenderProvider [b]Protected[/b] ciMine [b]As Boolean[/b] = [b]False[/b] ' Provides the Get portion of MyProperty. [b]Public Function[/b] GetMyProperty([b]ByVal[/b] myControl [b]As[/b] Control) [b]As Boolean[/b] ' Insert code here. [b]Return[/b] ciMine [b]End Function[/b] ' Provides the Set portion of MyProperty. [b]Public Sub[/b] SetMyProperty([b]ByRef[/b] myControl [b]As[/b] Control, [b]ByVal[/b] value [b]As[/b] String) ' Insert code here. [b]End Sub[/b] ' When you inherit from IExtenderProvider, you must implement the ' CanExtend method. [b]Public Function[/b] CanExtend([b]ByVal[/b] target [b]As Object[/b]) [b]As Boolean Implements[/b] IExtenderProvider.CanExtend ' aha da du diese Klasse in nem Projekt instanzieren kannst ' bekommt man dort dan zur Entwurfszeit die Instanz dieser Klasse ' im Editor der IDE auswählen um CanExtend - Methode zu überschreiben ' um dort den Tooltip zu setzen, hmm schön dann kann ich in dieser ' Überschrieben Methode im Projekt das ganz Tooltip - Gedönse abhandeln ' schhönes Ding dies ist [b]End Function[/b] ' Insert additional code here [b]End Class[/b]
Ich hoffe Du hast nischt dagegen sowas kann man immermal irgendwo gebrauchen!
mfg sclearscreen
-
goil Du bekomst beim Überladen sogar alle Kommentare mit rein
durch diese Anweisung die der Klasse vorangestellt ist:<ProvideProperty("MyProperty", "Control")> _ [b]Public Class[/b] ToolTipSticker .... [b]end Class[/b]
-
sclearscreen schrieb:
goil Du bekomst beim Überladen sogar alle Kommentare mit rein
durch diese Anweisung die der Klasse vorangestellt ist:<ProvideProperty("MyProperty", "Control")> _ [b]Public Class[/b] ToolTipSticker .... [b]end Class[/b]
Man sollte ich denke ich diese Klasse so nennen:
***DynamicPropertyExtenderForComponents
ich editiers mal gleich in meinem vorherigen Beitrag bin gleich wieder hier ....
mfg sclearscreen
-
hmm also ich denke man könnte diesen Beitrag als nützlich betrachten
Vielleicht schiebt den dann bitte von Euch einer in den FAQ zu
.NET - Angelegenheiten. Hmm gibts eigentlich schon nenspezielles FAQ
für .NET? *grübel*
-
Servus,
nene, kein Problem dafür ist er ja auch da.
Du kannst dem Ding auch noch das Attribute "Description" verpassen. Dann bekommste du im Designer noch eine schöne Erklärung dazu *g*. Das Beispiel steht so ähnlich in der MSDN und dort gibts das auch direkt in VBmfg
Hellsgore
-
Hellsgore schrieb:
Servus,
nene, kein Problem dafür ist er ja auch da.
Du kannst dem Ding auch noch das Attribute "Description" verpassen. Dann bekommste du im Designer noch eine schöne Erklärung dazu *g*. Das Beispiel steht so ähnlich in der MSDN und dort gibts das auch direkt in VBmfg
Hellsgorehmm und ich mach mir die arbeit es umzuschreiben
egal das bringt Praxis für später. Jedenfalls hätte ich das Ding nicht gefunden
och ich mag dieses Forum gemeinsamer Gehirnschmalz bringt echt was