AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Herkunft von Methoden/Properties ermitteln

Ein Thema von MathiasSimmack · begonnen am 11. Sep 2005 · letzter Beitrag vom 11. Sep 2005
Antwort Antwort
MathiasSimmack
(Gast)

n/a Beiträge
 
#1

Herkunft von Methoden/Properties ermitteln

  Alt 11. Sep 2005, 09:56
Hallo. Ihr wisst ja, dass ich nebenbei immer noch ein bisschen an der Hilfe von SharpDevelop schraube. Zurzeit ist das die dynamische Hilfe von SharpDevelop 2.0.
Wenn man im Form-Designer von #d ein Objekt anklickt, etwa eine TextBox, dann sucht sich die dynamische Hilfe die passenden Themen dazu heraus. Zusätzlich bietet sich auch eine Hilfe zu dem im Objektinspektor aktiven Punkt an. Im Beispiel (s. Bild im Anhang) wäre das etwa die Text-Eigenschaft.
Dazu hänge ich einfach an den ermittelten Namen der Klasse (System.Windows.Forms.TextBox) den Namen der Methode an (*.Text). Einige Klassen erben aber solche Sachen von ihren übergeordneten Klassen. Und deshalb gibt es bspw. beim Button kein Thema zu System.Windows.Forms.Button.Text, sondern da müsste ich auf *.ButtonBase.Text ausweichen.

Tja, wie mache ich das am elegantesten? Momentan "schleife" ich mich durch die Klasse durch, bis ich bei der Top-Klasse angelangt bin und übergebe alle so ermittelten Suchbegriffe an die Hilfe. Ich weiß ja zu diesem Zeitpunkt noch nicht, wann die Hilfe fündig werden wird, also kann ich leider auch nicht vorher aufhören:
Code:
Type myObject = selectedObject.GetType();
if(selectedItem != null)
{
  this.AddToStringCollection(String.Format("!{0}.{1}", myObject.FullName, selectedItem.Label));

  while(myObject.BaseType != null)
  {
    myObject = myObject.BaseType;
    this.AddToStringCollection(String.Format("!{0}.{1}", myObject.FullName, selectedItem.Label));
  }
}
"selectedObject" und "selectedItem" kommen quasi aus dem PropertyGrid von SharpDevelop. Das Ausrufungszeichen setze ich absichtlich davor, damit die Hilfefunktion später weiß, dass sie die Anzeige weiterer Themen mit ! am Anfang unterdrücken soll, wenn bereits zum ersten Begriff in der Liste was gefunden wurde.

Da muss es doch was Einfacheres/Eleganteres geben.
Miniaturansicht angehängter Grafiken
textbox_194.png  
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Herkunft von Methoden/Properties ermitteln

  Alt 11. Sep 2005, 11:27
Du bist aber auch ungeduldig...

Da ich nicht weiß, ob du notfalls auch überladene/reintroduced Meber haben willst, habe ich es in einen Iterator gepackt.
Er läuft durch die gefundenen Member und gibt dir den Typen, in dem er deklariert/überschrieben wurde.

Code:
public static class TypeHandling
{
   public static IEnumerable<Type> FindDeclaringType(Type type, string memberName)
   {
      MemberInfo[] memberInfos = type.GetMember(memberName);


      foreach (MemberInfo memberInfo in memberInfos)
      {
         yield return memberInfo.DeclaringType;
      }
   }
}
Oder um es mit einem Hauch von Syntax Highlighting zu zeigen:
Delphi-Quellcode:
uses
   System.Collections.Generic,
   System.Reflection;

type
  TypeHandling = public static class
  public
      class method FindDeclaringType(&type : System.Type; memberName : String) : IEnumerable<System.Type>; iterator;
  end;
  
implementation

class method TypeHandling.FindDeclaringType(&type : System.Type; memberName : String) : IEnumerable<System.Type>;
begin
      var memberInfos := &type.GetMember(memberName);

      for memberInfo : MemberInfo in memberInfos do
         yield (memberInfo.DeclaringType);
end;

Kleines Beispiel:
Code:
TextBox myObject = new TextBox();

foreach (Type type in TypeHandling.FindDeclaringType(myObject.GetType(),
                                                     "Name"))
{
   Console.WriteLine(type.Name);
}

foreach (Type type in TypeHandling.FindDeclaringType(myObject.GetType(),
                                                     "Text"))
{
   Console.WriteLine(type.Name);
}

Console.ReadLine();
Output
Control
TextBox
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: Herkunft von Methoden/Properties ermitteln

  Alt 11. Sep 2005, 13:51
Na, das kommt doch heute noch in das Repository. Am besten mit dem Originalzitat aus der PM .
Herzlichen Dank.


Zitat:
Du bist aber auch ungeduldig...
Ja. Schließlich ist Zeit dein Geld.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Herkunft von Methoden/Properties ermitteln

  Alt 11. Sep 2005, 17:28
Auf Wunsch von Mathias habe ich den Thread aufgeteilt.

Hier ist der folge Thread.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz