Ah ja, das ist doch ein netter Ansatz. Danke, Elvis. Im Prinzip kann ich also ein in der Klasse enthaltenes Interface nutzen und von dem die Daten abgreifen. Rein technisch könnte ich mir dann aber auch die Ableitung von
IHxRegNamespace sparen, oder? Also einfach nur
Code:
public class Help2Namespace
anstelle von
Code:
public class Help2Namespace : IHxRegNamespace
denn das Interface würde in dem Fall "nur" dafür sorgen, dass meine Klasse die entsprechenden 3 Methoden (Name, GetProperty, IsTitle) enthält. Ich habe gerade mal ein wenig experimentiert:
Code:
public class Help2Namespace : IHxRegNamespace
{
readonly IHxRegNamespace innerInstance;
internal Help2Namespace(IHxRegNamespace factory)
{
this.innerInstance = factory;
}
public string Name
{
get { return this.innerInstance.Name; }
}
public bool IsTitle(string bstrTitle)
{
return this.innerInstance.IsTitle(bstrTitle);
}
public object GetProperty(HxRegNamespacePropId propid)
{
return this.innerInstance.GetProperty(propid);
}
// weitere Dinge, die man einbauen könnte ...
}
public class Help2Namespaces : CollectionBase
{
public Help2Namespaces()
{
HxRegistryWalkerClass registryWalker = new HxRegistryWalkerClass();
IHxRegNamespaceList namespaceList =
registryWalker.get_RegisteredNamespaceList("");
foreach (IHxRegNamespace helpNamespace in namespaceList)
{
this.Add(new Help2Namespace(helpNamespace));
}
}
public Help2Namespace this[int index]
{
get { return ((Help2Namespace)(List[index])); }
set { List[index] = value; }
}
public int Add(Help2Namespace help2Namespace)
{
return this.List.Add(help2Namespace);
}
// mehr ...
}
und
wuppdi hat man alle vorhandenen Namespaces im Tree-View
Code:
Help2Namespaces help2Namespaces = new Help2Namespaces();
try
{
foreach (Help2Namespace help2Namespace in help2Namespaces)
{
TreeNode treeNode = new TreeNode(help2Namespace.Name);
treeView1.Nodes.Add(treeNode);
}
}
catch (
Exception ex)
{
MessageBox.Show(ex.ToString());
}
Das geht sicher auch in ähnlicher Form, wenn man direkt auf die Interfaces zugreift, aber so wirkt es konsistenter.
@Frickeldrecktuxer_TM: Es geht ums Help 2.0-
API, das eigentlich eine normale
Win32-Bibliothek ist. Mit Hilfe des AxImp-Tools kannst du aus der Hauptbibliothek zwei .NET-Wrapper generieren, die ein paar Klassen und haufenweise Interfaces enthalten. Das Zeug verfolgt mich schon eine ganze Weile. Na ja, ich habe eben kein anderes Hobby...