Eigene Tags können einfach verwendet werden:
/// <summary>
/// Hier Ein Text
/// </summary>
/// <EinEigenerTag>
/// Ein anderer Text
/// </EinEigenerTag>
public class MyClass {
//...
}
Diese Tags werden einfach von Visual Studio in die XML-Dokumentationsdatei übernommen.
Jetzt hätte ich für die eigenen Tags aber gerne IntelliSense...
powerbond007 hat es verstanden. Das mit den Tags funktioniert. Alle Tags, auch eigene, werden in die durch Visual Studio erzeugte xml-Datei kopiert und können daraus dann verwendet werden.
Ich hätte jetzt aber gerne noch IntelliSense für eigene Tags (wie z.B. <meinEigenerTag>), genauso wie es bereits für summary, remarks etc. unter VS 2005 bereits IntelliSense gibt.
Wir benötigen diese Tags für den innerbetrieblichen Dokumentationsprozess.
Vielen Dank für eure Antworten, aber leider Thema verfehlt 🙂
Ich möchte zu den bereits bestehenden Doku-Tags wie summary, remark etc. eigene Tags hinzufügen. Diese eigenen Tags sollen dann auch per IntelliSense unterstützt werden (so wie es für die bereits vorhandenen schon funktioniert.)
Hallo,
weiss jemand wie man IntelliSence für eigene Dokumentations-Tags (wie <summary> etc.) erstellen kann?
Gruß
Frank
Hallo,
weiss jemand wie die Standard-Doku-Tags (summary, remarks etc.) um eigene Tags erweitert werden können, die dann ebenso wie die bereits existierenden behandelt werden. D.h. IntelliScence steht zur Verfügung und die Tags werden ebenso in die Doku-Xml-Datei kopiert.
Vielen Dank für die Hilfe
Frank
Also, die einzigste Möglichkeit sehe ich selbst im Moment darin eine Wrapper Klasse in Verbindung mit einem explizieten benutzerdefinierten Cast zu verwenden.
public interface IInterfaceBase {
}
public interface IInterface2 : IInterfaceBase {
}
public class Class1<T> where T : IInterfaceBase {
T m_BusinessLogic;
public virtual T BusinessLogic {
get { return this.m_BusinessLogic; }
}
public class Class1Wrapper : Class1<IInterfaceBase> {
object m_ObjectToWrapp;
public override IInterfaceBase BusinessLogic {
get {
PropertyInfo oProp = this.m_ObjectToWrapp.GetType().GetProperty("BusinessLogic");
return (IInterfaceBase)oProp.GetValue(this.m_ObjectToWrapp, null);
}
}
public Class1Wrapper(object p_ObjectToWrapp) {
this.m_ObjectToWrapp = p_ObjectToWrapp;
}
}
public class Class2 : Class1<IInterfaceBase> {
}
public class Class3 : Class1<IInterface2> {
public static explicit operator Class1<IInterfaceBase>(Class3 c3) {
Class1Wrapper oWrapp = new Class1Wrapper(c3);
return oWrapp;
}
}
Dann funktioniert das einfügen in die Liste mit einem explizieten Cast.
List<Class1<IInterfaceBase>> lstClassList = new List<Class1<IInterfaceBase>>();
Class2 oClass2 = new Class2();
lstClassList.Add(oClass2);
Class3 oClass3 = new Class3();
lstClassList.Add((Class1<IInterfaceBase>)oClass3);
Hat jemand noch weitere Ideen?
Hallo,
existieren Klassen wie diese
public interface IInterfaceBase {
}
public interface IInterface2 : IInterfaceBase {
}
public class Class1<T> where T : IInterfaceBase {
public T BusinessLogic {
get { return default(T); }
}
}
public class Class2 : Class1<IInterfaceBase> {
}
public class Class3 : Class1<IInterface2> {
}
und wird dann soetwas versucht
List<Class1<IInterfaceBase>> lstClassList = new List<Class1<IInterfaceBase>>();
Class2 oClass2 = new Class2();
lstClassList.Add(oClass2);
Class3 oClass3 = new Class3();
lstClassList.Add(oClass3 as Class1<IInterfaceBase>);
kommt es zu einem Kompilerfehler, dass ein Class3-Objekt nicht in ein Class1<IInterfaceBase>-Objekt konvertiert werden kann. Weiß jemand, wie so ein Cast gemacht werden kann, oder wie ich soetwas mit einen benutzerdefinierten Cast erreichen kann?
Gruß
SlEasy
Nein, er redet davon, dass wenn ein Objekt die Schnittstelle IList implementiert, dieses nicht zwangsläufig die Schnittstelle IList<T> implementiert.
Das wäre zu kompliziert, das hier auszuführen.
Über Reflektion ist es auch nicht einfach möglich. Aufrufe wie
if(typeof(IList<>).IsAssignableFrom(oPropertyDescriptor.PropertyType.GetGenericTypeDefinition()) == true)
funktionieren zwar, aber nur, wenn oPropertyDescriptor.PropertyTypeGetGenericTypeDefinition() auch den Schnittstellen-Type IList<> zurückliefert. Sobals aber oPropertyDescriptor.PropertyTypeGetGenericTypeDefinition() nicht typeof(IList<>) sondern typeof(List<>) ist, funktioniert es nicht.
Wie kann ich überprüfen, ob ein bestimmtes Objekt die Schnittstelle IList<T> implementiert? Dabei soll egal sein, was T für ein Type ist.
Gibt es eine ähnliche Methode wie:
if(myObject is IList) { ... }
?
Danke.
Gruß
SlEasy
So gehts vielleicht einfacher:
public class ReadOnlyHashtable : System.Collections.Hashtable {
private System.Boolean m_blIsInitialized = false;
public override bool IsReadOnly {
get { return true; }
}
public ReadOnlyHashtable(IDictionary p_Dirctionary) : base(p_Dirctionary) {
this.m_blIsInitialized = true;
}
public override void Add(object p_oKey, object p_oValue) {
if(this.m_blIsInitialized == false)
base.Add(p_oKey, p_oValue);
else
throw new NotSupportedException("Diese Hashtable ist schreibgeschützt");
}
public override void Clear() {
throw new NotSupportedException("Diese Hashtable ist schreibgeschützt");
}
public override object Clone() {
return new ReadOnlyHashtable(this);
}
public override void Remove(object key) {
throw new NotSupportedException("Diese Hashtable ist schreibgeschützt");
}
public override object this[object key] {
get { return base[key]; }
set { throw new NotSupportedException("Diese Hashtable ist schreibgeschützt"); }
}
}
Gruß
SlEasy
Hallo,
eine Hashtable hat ja ein Property IsReadOnly. Aber wie bekomme ich eine schreibgeschützte Hashtable? Gibt es irgendeine Möglichkeit, vielleicht ähnlich ArrayList.ReadOnly?
Gruß
SlEasy
Herbivore vielen Dank für deinen Beitrag. Ich verstehe nur "Formular um die Controls herumzeichnen" nicht.
Gruß
SlEasy
Also irgendwie steh ich auf'm Schlauch. Bei mir wird die Funktion PreProcessMessage nie aufgerufen. Woran liegt denn das?
Hm... das verändert doch nur die Z-Order, was dazu führt, dass F2 gar nicht angezeigt wird, obwohl es TopMost = true ist.
Hallo,
weiß jemand, wie man verhindern kann, dass wenn ich in einem Formular (F1) ein anderes Formular (F2) öffne F1 nicht den Focus verliert, oder F2 den Focus nicht bekommt?
Den Focus nach Aufruf von F2.Show einfach wieder auf F1 zu setzen ist nicht akzeptabel, da dabei doch z.B. einige Ereignisse ausgelöst werden die nicht ausgelöst werden sollen, und dazu noch F1 kurz flackert.
Gruß
SlEasy
Hallo,
was gibt es für Möglichkeiten um in einem Formular über die darin enthaltenen Controls zu zeichnen.
Überschreibe ich OnPaint, oder verwende ich das Paint-Ereignis und zeichne darin via Graphics so wird dies stets hinter die Controls, die in dem Form enthalten sind gezeichnet.
Gruß
SlEasy
Sorry, habe noch nicht so viel mit WindowsMessages gearbeitet. Wie muss ich das genau machen? In WndProc das Click-Ereignis abfangen und überhaupt nichts machen? Oder muss ich der aufrufenden Klasse einen bestimmten Wert zurückliefern?
Gruß
SlEasy
Hallo,
weiß jemand wie z.B. ein Maus-Click der über einen Panel ausgeführt wird, nicht durch das Panel sondern durch ein unter dem Panel liegendes Control (z.B. das Formular) behandelt werden kann?
Gruß
SlEasy
Hallo,
wenn man über DirectoryEntry("WinNT:// ...") auf AD zugreift und der entsprechende Pfad (Hier also "WinNT:// ...") nicht korrektist, werden ComExceptions geworfen. Die ComExceptions enthalten einen HResult als ErrorCode. Doch leider finde ich zu den entsprechenden ErrorCodes keine Erklärung.
Hat jemand eine Ahnung wo es zu einem HResult einer ComException eine entsprechende Interpretation gibt, oder wie man sonst auf so eine Exception vernünftig reagieren kann?
Gruß
SlEasy
Hallo,
mit
DirectoryEntry oEntry = new DirectoryEntry("WinNT://myComputer,computer");
foreach(DirectoryEntry de in oEntry.Children) {
if(de.SchemaClassName.ToLower() == "user")
Console.WriteLine(de.Name);
}
können alle Benutzer eines bestimmten Computers oder einer Domain aufgelistet werden. Doch wie komme ich an alle Domains in einem Netzwerk, damit so etwas möglich ist?
DirectoryEntry oEntry = new DirectoryEntry("WinNT://,domain"); //<-- ???
foreach(DirectoryEntry domain in oEntry.Children) {
foreach(DirectoryEntry de in domain.Children) {
if(de.SchemaClassName.ToLower() == "user")
Console.WriteLine(de.Name);
}
}
Hallo,
wie bekomme ich ein XML-File in eine resx-Resource-Datei. Wie ich es als Manifestresource interlegen kann ist klar. Doch hätte ich sie gerne zugreifbar über den ResourceManager.
Gruß
SlEasy
Nein, diese beiden kannte ich noch nicht. Es gibt viele unterschiedliche Ansätze die auf ComponentModel.ICustomTypeDescriptor aufbauen.
Danke herbivore.
Gruß
SlEasy
ja, Sorry, habe auch erst im Nachhinein auf der Codeproject-Seite nachgeschaut. Trotzdem, danke für deine/eure Mühe.
Gruß SlEasy
das liegt daran, dass du
propertyGrid1.SelectedObject = this.PropertyName;
gesetzt hast.
this.PropertyName;
gibt ein String zurück. Das PropertyGrid erwartet aber ein Objekt, das Properties enthält.
Mache mal folgendes:
propertyGrid1.SelectedObject = this.textBox1;
Nun werden alles Properties mit [Browsable(true)] angezeigt. Und hier ist auch das Problem. Einfach kann der String, der für jedes Property eines Objektes angezeigt wird, nicht manipuliert werden. Eine Möglichkeit ist wohl ComponentModel.ICustomTypeDescriptor. Mithilfe dieses Interfaces können Type-Information eines Objektes manuel angepasst werden kann. Siehe www.codeproject.com unter PropertyGrid, da findet man einiges.
Naja, ich würde das PropertyGrid gerne als normales Steuerelement in einem Formular verwenden. Dann sehen das nicht Programmierer sondern Kunden. Da möchte ich schon andere Texte haben.
Gruß
SlEasy
Hallo,
das PropertyGrid zeigt als Text zu einem Property den Text des Properties an, das dies in der Klasse besitzt. Gibt es ein Attribut, oder eine andere Möglichkeit um hier andere Texte anzuzeigen?
Bsp.
public class Klasse {
[IrgendeinAttribut("TollerName")]
public string PropertyName {
/**/
}
}
Im Grid soll nun die Bezeichnung "TollerName" angezeigt werden und nicht "PropertyName".
Ideen?
Gruß
SlEasy
Hallo,
weiss jemand, wie man ermitteln kann welche FilePermission man auf ein bestimmtes File oder Directory besitzt?
Gruß
SlEasy
Alles klar, über FieldInfo und Attribute.GetCustomAttribute.
Hallo,
weiss jemand, ob man enums auch Attribute zuweisen kann, und wenn ja, wie man an die wieder ran kommt?
Bsp.
public enum Test {
[EinAttribute("EinWertA")]
A,
[EinAttribute("EinWertB")]
B,
[EinAttribute("EinWertC")]
C
}
Gruß
SlEasy
Für alle die noch nicht .Net 2.0 verwenden, es aber trotzdem brauchen:
[DllImport("user32.dll")]
private static extern uint GetSysColor(int p_ColorIndex);
Aber Vorsicht: Der zurückgelieferten Wert enthält keine Alpha-Komponente!!
Danke herbivore. Gibt es vielleicht eine Möglichkeit das aus der Regestry auszulesen?
Hallo,
gibt es im .Net-Framwork eine Funktion um eine RGB-Color aus HSB-Werten zu erzeugen?
Gruß
SlEasy
Auch da finde ich einen eintrag GradientActiveCaption nicht!. Hm...
Sorry herbivore, aber in meiner Enum KnownColor existiert kein Eintrag GradientActiveCaption. Sonst eine Idee?
Hallo,
weiss jemand, wie man an die 2. Farbe einer Systemfarbeneistellung (z.B. der Systemfarbe ActiveCaption) herankommt?
Gruß
SlEasy
Hier auch gleich die Lösung. Es ist ein Bug der Mikrosoft bekannt ist.
--> IntegralHeight = false setzen.
Gruß
SlEasy
Hallo,
VS2003:
Wird eine ListBox in ein Fomular gezogen und z.B. die Höhe auf eine bestimmten Wert eingestellt, so "schnappt" der Wert für Höhe auf eine diskreten Wert. z.B. steht die Höhe der ListBox auf 188. Stelle ich nun diese Höhe im Designer auf 190 und bestätige dies, so "schnappt" dieser Wert zurück auf 188. Erst bei einem Höheren Wert, z.B. 205 "schnappt" der Wert für Höhe auf den nächsten diskreten Wert.
Ist dieses Verhalten bekannt? Die folge ist, dass ich eine ListBox somit nicht pixelgenau einstellen kann. Bei anderen Controls, die nicht von ListBox erben (z.B. Label) funktioniert das pixelgenaue einstellen der Höhe und der Breite unabhängig davon, ob SnapToGrid false oder true ist.
Lösung?
Gruß
SlEasy
Hallo dr4g0n76,
danke für deine Antwort. Wenn ich es private mache, kann keine Control über den Designer in das Panel in UC2 eingefügt werden. Ist es public verhält es sich wie als protected.
Hallo Alle,
habe folgendes Problem:
Ich habe ein UserControl UC1. UC1 enthält ein protected Panel P1.
Jetzt erzeuge ich ein weiteres UserControl UC2, das von UC1 erbt. Wenn ich nun im Designer ein Control (z.B. ein Label) in das Panel P1 einfüge funktioniert das auch. Wenn ich das Label aber mit der Maus verschieben möchte geht das nicht. Weiss jemand warum?
Gruss
SlEasy
Also das ist mir zu blöde. Ich stell's unter Entwicklungsumgebung rein. herbivore hast du dann bitte auch eine Lösungsvorschlag!?
Gruß
SlEasy
Wieso soll es das sein? UserControls gehören zum Namesspace Forms
Hallo Alle,
habe folgendes Problem:
Ich habe ein UserControl UC1. UC1 enthält ein protected Panel P1.
Jetzt erzeuge ich ein weiteres UserControl UC2, das von UC1 erbt. Wenn ich nun im Designer ein Control (z.B. ein Label) in das Panel P1 einfüge funktioniert das auch. Wenn ich das Label aber mit der Maus verschieben möchte geht das nicht. Weiss jemand warum?
Gruss
SlEasy
Hallo herbivore,
da hast du natürlich recht. Ich habe mit "Sinn" eher gemeint, dass immer nur ein Control mit Dock Fill sichtbar sein kann (Innherhalb eines Control Containers natürlich).
Gruß
SlEasy
Danke für deine Antwort. Naja, es können schon mehrere Controls den Dock Fill haben, aber das macht keinen Sinn, da nur immer eines angezeigt werden kann und das andere dahinter zu liegen kommt.
In der Doku habe ich auch nichts darüber gefunden. Für mich stellt sich die Sache jetzt so dar. Der ChildIndex besagt einfach in welcher Reihenfolge die einzelnen Controls gezeichnet werden. Das mit dem größten Index wird als erstes gezeichnet und dann absteigend, wobei das Control mit Dock Fill immer zuletzt gezeichnet wird. Weiter werden die Elemente immer in den freien Raum angeordnet. Also Dock Right an die Rechte Seite des noch nicht besetzten Raumes. Also, wenn rechts schon ein Control ist, dann an dessen linke Seite.
Dies deckt sich mit der Beobachtung, dass die Funktion BringToFront nichts anderes tut, als den ChildIndex des entsprechenden Controls auf 0 zu setzen. Es wird als letztes, also über die anderen gezeichnet.
Gruß
SlEasy
Hallo,
kennt jemand die genauen Bedingungen oder den Algotihmus die beim Anzeigen von Controls verwendet werden. Mich interessiert vor allem den ChildIndex und die in der Doku erwähnte Z-Ordnung.
So viel habe ich bereits begriffen: das Control mit dem höchsten ChildIndex hat beim Anzeigen die oberste Priorität, das mit dem niedrigsten die 2letzte Prio. Die geringste Prio hat das Control mit Dockstyle.Fill.
Weiss jemand mehr?
Gruß
SlEasy
Hm... wie meinst du das? Beispiel?
Aber ich habe sowieso keinen Einfluß auf das Property. Gibt es evtl. andere Möglichkeiten?
Hallo an Alle,
weiss jemand ob und wenn ja, wie es möglich ist einen Delegaten auf ein Property zu bekommen?
Gruß
SlEasy
Hm, vielen Dank für den Ansatz. Allerdings sehe ich dabei ein Problem. Der HashCode ist nicht eindeutig. Es ist nicht sichergestellt, dass andere Strings denselben Hashcode erzeugen. Aber inwiefern dies eine Eischränkung wäre kann ich nicht beurteilen.
Hallo,
ich würde gerne die Passwörter aller Benutzer in die Datenbank schreiben, dies natürlich verschlüsselt. Ich würde hierfür den DES-Algorithmus bevorzugen. Doch muss ich ja irgendwo den Schlüssel und den Initialisierungsvektor speichern. Hat hier jemand einen Tip? In eine Datei? In die Datenbank? Aber wie schütze ich dann den Schlüssel und den I-Vektor?
Danke.
SlEasy