[C#] Eigenschaften zu Controls hinzufügen



  • 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 VB 🙂

    mfg
    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 VB 🙂

    mfg
    Hellsgore

    hmm 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 🙂 👍


Anmelden zum Antworten