Laden...
O
onlinegurke myCSharp.de - Member
Student/Hilfswissenschaftler Dresdner in Karlsruhe Dabei seit 15.01.2007 778 Beiträge
Benutzerbeschreibung

Forenbeiträge von onlinegurke Ingesamt 778 Beiträge

27.04.2007 - 14:47 Uhr

Ich habe gerade ein Problem mit einem eigenen Attribut. Das Attribut hat das AttributUsageAttribute mit AttributUsage.Property und AllowMultiple=True, aber trotzdem wird bei jeder Eigenschaft meiner Testklasse nur ein Attribut erzeugt. Woran kann das liegen?

27.04.2007 - 13:42 Uhr

Wenn ich mit meinem Zivi fertig bin und nach Irland gehe werd ich mich wahrscheinlich mal etwas mehr mit Mehrsprachigkeit befassen und gegebenfalls mal einen Artikel schreiben, wenn sich genügend Leute dafür interessieren.

27.04.2007 - 13:40 Uhr

Ich kenn die Internals vom PropertyGrid nicht gut genug um dir das mit Sicherheit sagen zu können, aber ich denke, dass es auch nur ein Objekt anzeigt, nämlich eine Collections, deren TypeConverter offensichtlich die Attribute ignoriert. Die einzige Chance, die ich da sehe, wäre eine eigene Collection-Klasse zu implementieren und die mit einem TypeConverter auszustatten, der deine Bedürfnisse erfüllt (und da sind wirklich quasi keine Grenzen gesetzt, TypeConverter können, richtig eingesetzt, alles, was sich um Darstellung in einem PropertyGrid dreht).

27.04.2007 - 12:58 Uhr

Die Lösung ist eigentlich gar nicht so schwer, eigentlich sind es nur zwei Klassen die du brauchst:

  1. Einen TypeConverter
  2. (am besten generische) Eigene PropertyDescriptors
Public Class MyTypeConverter
   Inherits ExpandableObjectConverter

   Public Overrides GetProperties(...) as PropertyDescriptorCollection
    ...
   End Function

End Class

Und

Public Class MyPropertyDescriptor
   Inherits PropertyDescriptor

   (die ganzen zu überschreibenden Eigenschaften und Methoden)

   Public Overrides Property DisplayName as String (...)

   Public Overrides Property Category as String (...)

   Public Overrides Property Description as String (...)

End Class

Setz am besten gleich eine Import-Direktive auf System.ComponentModel...

Wenn du die hast kannst du dir in GetProperties irgendwelche Eigenschaften ausdenken und mit Werten füllen, unabhängig davon, was das Objekt eigentlich für Eigenschaften hatte. Ich hab noch nicht recherchiert, welche Eigenschaften man umstellen muss, um auch einen normalen TypeConverter nehmen zu können, aber die Performance von der Lösung halte ich für völlig ausreichend.

27.04.2007 - 07:47 Uhr

Wenn du die XML-Datei nur schreibst würde ich dir sowieso den XMLWriter empfehlen, der ist zwar nicht objektorientiert wie XMLDocument, aber schneller, weil nicht alles erst gecacht wird. Für das schreiben einer solchen Struktur ist der Code auch denkbar einfach:

XMLSettings sett=new XMLSettings();
sett.Indent=True;
XMLWriter xw=XMLWriter.Create(fs,sett);
xw.WriteStartDocument();
xw.WriteStartElement("Fahrzeuge");
xw.WriteStartElement("Fahrzeug");
xw.WriteElementString("Kennzeichen",<Kennzeichen>);
...

26.04.2007 - 15:59 Uhr

Das Dockingverhalten kannst du notfalls auch mit Anchor simulieren, auch wenn das etwas mehr Arbeit macht. Lösen tust du das Problem zwar nicht wirklich, aber du kriegst ganz brauchbare Ergebnisse...

26.04.2007 - 14:50 Uhr

Machs doch darüber, dass du nicht die Typbezeichnungen in die ComboBox tust, sondern schon die fertigen Type-Objekte. Dann wird dir der Name meiner Meinung nach ohne Namespace gezeigt und kannst alle Typen einwandfrei laden.

Bei deiner Variante mit GetCallingAssembly muss der Typ auch in der Assembly stehen, die die Methode aufgerufen hat, das scheint mir doch ziemlich unsicher zu sein. Wenn überhaupt so, dann frag wenigstens alle in der momentanen AppDomain vorhandenen Assemblys ab...

26.04.2007 - 12:51 Uhr

Das bedeuted, dass du in der Klasse X in nicht einer einzigen Variable, geschweige denn in einem Feld, die Klasse Y erwähnst, sprich, wenn du die Klasse Y versuchsweise löschst, darf kein Fehler in der Klasse X entstehen.

26.04.2007 - 12:47 Uhr

varbinary(), aber speichere nie unverschlüsselt sensible Daten wie Kennwörter. Wenn du die Passwörter selber abfragst, dann hashe sie (z.B. mit SHA1-512), ansonsten verschlüssle sie. Offen liegen lassen würde ich solche Daten nicht...

26.04.2007 - 08:12 Uhr

hallo dr4g0n76,

ich würde einen Artikel über PostSharp sehr begrüßen, gerade nachdem ich den Artikel von herbivore gelesen hab. Aber gerade weil ich diesen Artikel gelesen hab würde mich auch die Performance interessieren, weil der Faktor 100 ja doch irgendwo bedeutend ist.

25.04.2007 - 14:46 Uhr

(SQL Server 2005)

Hallo,

Beim SQL Server 2005 besteht ja die Möglichkeit, ein bereits gehashtes Passwort bei der Erstellung eines Logins anzugeben, ich hab aber nix dazu gefunden, welcher Hashalgorithmus dazu verwendet werden muss. Wie kriegt man das raus?

Danke schon mal im vorraus

25.04.2007 - 14:42 Uhr

Gehen auch abgeleitete Klassen davon?

25.04.2007 - 14:41 Uhr

Da fehlt m.E. nach das AllowPartiallyTrustedCallersAttribute, wenn du das noch hinzufügst, da du ja nu offensichtlich den Quellcode besitzt, sollte es klappen...

25.04.2007 - 12:16 Uhr

Das kann durchaus mit den Administratorrechten zu tun haben, reflektier mal die GIOS und guck dir die Attribute der Assembly an (und poste sie), ich würd das Problem da vermuten...

25.04.2007 - 12:12 Uhr

Ja, das hab ich auch schon hinter mir (als ich HP5 und HP6 auf Englisch gelesen habe, damals hatte ich mit SW Dev noch nix am Hut). Warum aber auch nicht, irgendein römischer Kaiser hat mal zwei Kinder einer Sklavin eingesperrt und von der Außenwelt abgeschnitten, um zu sehen, ob sie nach einer gewissen Zeit Latein beherrschen (mit Sklaven kann man's ja machen). Ergebnis: Die Kinder sind verblödet und konnten schlicht gar nix. Das heißt aber, dass Sprache nix ist, was dir angeboren ist, sondern etwas, dass du erlernst. Du kannst eine Begabung dafür haben, aber alleine lernen kannst du eine Sprache nicht. Das bedeuted aber auch, dass man eine Sprache auch umlernen kann und dann träumt man eben auch in der neuen Sprache, bzw., wenn man zweisprachig lebt kann ich mir durchaus vorstellen, dass die Sprachen sich abwechseln...

25.04.2007 - 11:05 Uhr

sry, ich meinte die ChildCollection<ChildTable>...

25.04.2007 - 09:20 Uhr

Wie muss ChildTableCollection dann aussehen? Ich vermute mal, es muss ICollection<ChildTable> implementieren, oder? Aber sonst noch welche Einschränkungen?

24.04.2007 - 16:32 Uhr

Was sind das für Klassen? Du musst doch wenigstens ein paar Informationen über die Klassen haben, wenn du die Objekte vergleichen willst, ansonsten kannst du auch gleich obj.Equals(other) benutzen...

24.04.2007 - 16:29 Uhr

Wenn du zwei Klassen miteinander vergleichst, dann macht es glaub ich mehr Sinn, wenn du den Inhalt der Felder vergleichst, weil, nur weil alle Eigenschaften zweier Objekte gleich sind muss nicht auch gleich der ganze Inhalt gleich sein.

24.04.2007 - 15:54 Uhr

Wie kann man ForeignKeys erstellen, ich hab jetzt das ForeignKeyAttribute gefunden und ich denk mir, es wird wohl darüber gehn 🙂, aber wie? Was ist dann ChildField und was ParentField? Die Referenz für einen ForeignKey sollte doch für gewöhnlich in einer anderen Tabelle sein...

24.04.2007 - 15:04 Uhr
  1. Was heißt ungefär, ist das nun eine List<MyClass> oder nicht?
  2. Die meisten Listen implemenentieren die IEnumerable-Schnittstelle, wenn die Liste das auch tut, dann caste doch darauf, wenn sie das nicht tut hättest du auch keine Chance, wenn du den Typ schon zur Entwurfszeit kennen würdest (das würde dann auch sehr stark auf ein sehr schlechtes Klassendesign der Liste hindeuten)
24.04.2007 - 13:50 Uhr

Gehe ich richtig in der Annahme, dass Retina nur die Felder mappt (wird wahrscheinlich mit Reflection arbeiten, deshalb wird der Zugriffsmodifizierer egal sein), die mit den entsprechenden Attributen ausgestattet sind?

24.04.2007 - 10:33 Uhr

@FZelle:
Du hattest ja schon mal ein Beispiel gepostet, wo du eine Datenstruktur für Retina aufgearbeitet hast, was ich ziemlich einleuchtend fand, aber so die Art und Weise wie man etwas komplexere Abfragen als ein 'hole mir das Objekt mit dem angegebenen Schlüssel' mit Retina macht, das erschließt sich mir nicht.

Das nächste Problem ist, dass ich gerne Wissen möchte, was Retina kann, unterstützt es Vererbung von Entitys, usw.

Vor allem, hab ich aber die Frage gestellt, weil mir immer unwohl dabei ist, mir Funktionen damit anzueignen, den Quellcode zu reflektieren und mir zu überlegen, das müsste so sein. Gerade bei sowas komplexem wie Retina find ich das schon ziemlich schwer...

24.04.2007 - 09:42 Uhr

Naja, einem Array kannst du auch Elemente hinzufügen, wenn du es vorher neu dimensionierst, aber das macht nur in absoluten Ausnahmefällen Sinn

24.04.2007 - 09:33 Uhr

Über Attribute. Das Attribut, das das steuert heißt System.Reflection.NeutralResourcesLanguageAttribute. Wenn du mit VS arbeitest, sollte es dazu in den Projekteinstellungen einen Designer geben, aber du kannst das auch so machen, irgendwo in der Assembly...

24.04.2007 - 09:17 Uhr

1000 Funktionen brauchst du aber trotzdem nicht, eine reicht, die kannst du irgendwo (z.B. in eine nicht instanzierbare Klasse) stecken, statisch machen und das UserControl mit übergeben.

Die Funktion zu UserControl hinzuzufügen geht auch, aber nur mit dynamischem Code zur Laufzeit, was dir zur Entwurfszeit nichts bringt...

24.04.2007 - 09:08 Uhr

Die neutrale Sprache der Assembly hast du richtig eingestellt, oder?

24.04.2007 - 09:06 Uhr

(alle von Retina unterstützten Datenbanksysteme)

Hallo,

Gibt es irgendwo gute Tutorials für Retina.NET? Oder ist es mittlerweile veraltet (auf der Website sind die letzten "News" von 2005 und im Internet findet sich nix), sind da andere schon leistungsfähiger (z.B. NHibernate)?

Danke schon mal im voraus

23.04.2007 - 12:37 Uhr

Naja, bei komplexer Software wie z.B. Visual Studio oder Office kann ich mir persönlich nicht vorstellen, dass sich da in absehbarer Zeit was von Desktopanwendungen wegbewegt. Die Sache ist halt die, das Desktopanwendungen prinzipiell viel leistungsfähiger sein können und das in den meisten Fällen auch sind, weil sie nicht immer Http laufen müssen, sondern manche Dinge sehr viel direkter machen können. Ich kann mir vorstellen, dass Daten für den täglichen Umgang sehr bald ins Internet wandern und die Festplatten nur noch (was die Daten angeht) Archivfunktionen haben. Aber die Anwendungen selbst werden wohl zum Großteil noch einige Zeit auf dem PC bleiben...

(gut, ich bin parteiisch, weil Desktopsoftwareentwickler und möchte das auch bleiben)

23.04.2007 - 12:23 Uhr

NDoc gibts aber mittlerweile auch als Alpha für .NET 2.0. Mich persönlich hat's mehr überzeugt als Sandcastle...

23.04.2007 - 10:00 Uhr

Auf http://www.codeproject.com hab ich meinen Einstieg gefunden. Da gibts gleich mehrere Artikel dazu, aber immer nur Beispielhaft. Am weitesten kommst du, wenn du dir Beispielcode schreibst und dir den ILCode zeigen lässt. Die MSDN-Doku zu System.Reflection.Emit.OpCodes hilft aber auch erstmal sehr viel weiter.

23.04.2007 - 09:51 Uhr

Hallo,

da mich das Thema auch interessiert (auch wenn nur für zukünftige Projekte), wollte ich da auch mal gleich eine Frage zum Thema stellen (geht in genau die gleiche Richtung, deswegen auch in diesem Thread): kann man eigentlich auch Bibliotheken von MS.NET, die keinen UI-Code enthalten unter Linux oder MacOS benutzen? Beziehungsweise, was müsste man tun, damit die Bibliotheken unter allen Plattformen verfügbar sind?

23.04.2007 - 09:03 Uhr

@gespannter_Bogen:
Das ist nicht zwingend so. Komplexe Gedanken kannst du am besten in der Sprache denken, in der der dir zur Verfügung stehende Wortschatz am größten ist. Das ist i.d.R. die Muttersprache, kann aber auch eine andere Sprache sein. Bei uns in der TUD gibts an den physikalischen Instituten ein paar Russen, die schon so lange in Deutschland leben, dass sie kein Russisch mehr können, aber noch nicht lange genug, um perfekt deutsch zu können (arme Schweine). Bei denen gibts aber glaub' ich viele, die in Deutsch mittlerweile einen größeren Wortschatz haben, als in Russisch...

23.04.2007 - 08:52 Uhr

Ich schätze mal, du wirst auf diese Eigenschaften aber noch öfter zugreifen (müssen), und irgendwann wird Reflection sehr sehr teuer...

Da du ja sicher .NET mind. 2.0 programmierst kannst du auch gleich auf Dynamische Methoden zurückgreiefen (System.Reflection.DynamicMethod oder so...)

23.04.2007 - 08:48 Uhr

Ich bin konsequenter Nichtraucher, Trinken auch eher selten (ein Glas Wein die Woche, wenn's hoch kommt). Sport jeden Tag mit dem Fahrrad zum Zivi (2x8km) und mindestens einmal die Woche rennen...

20.04.2007 - 15:17 Uhr

Aber verlass dich nicht drauf, dass die Info stimmt, die du so rausgekriegt hast, weil das Array kann immernoch tatsächlich ein ObjectArray sein, im ersten Element ein String steht und im zweiten ein int...

20.04.2007 - 13:31 Uhr

Naja, einfach mal die Probe aufs Exempel, oder? Wenn das Array leer ist, kann's dir ja eigentlich auch egal sein, ansonsten einfach das erste Element auslesen und da den Typen feststellen...

20.04.2007 - 11:22 Uhr

Rein aus Interesse wie generiert man ein Programm in den Arbeitsspeicher und startet es??

kommt darauf an, wie du das Programm erstellst, .NET liefert da ja mehrere Mittelchen, bei der ersten Variante (langsam, aber eindeutig objektorientiert) mit CodeDom stellt du einfach die CompilerSettings um, bei der zweiten Variante (einfach, aber noch langsamer) mit literalem Code genauso (basiert intern ja auf CodeDom, glaub ich zumindest sowas mal gehört zu haben), und bei der dritten Variante (schnell, aber sehr kompliziert) mit Reflection.Emit gibts da auch ne Option im ILGenerator dafür...

20.04.2007 - 10:45 Uhr

_Original von AndiBar_aber bei Grammatik eigentlich nicht. Meine Meinung.

Das Problem ist, dass die deutsche Grammatik, wenn du sie zu 100% ernst nehmen willst, so komplex ist, dass da die meisten Menschen aussteigen, da müsste quasi jeder erstmal Germanistik studieren, bevor er (deiner Meinung nach) Umgangssprache beherrschen würde. Das Problem ist, diese Umgangssprache ist dann aber keine Umgangssprache mehr, weil sie ja so gut wie niemand spricht. Mindestens kleine Abstriche musst du in der Grammatik machen, oder du suchst dir eine andere Sprache aus.

Und wenn du sowieso Abstriche machen musst, dann könnnen die meiner Meinung nach auch etwas größer sein, solange sichergestellt ist, dass dich die Anderen noch verstehen.

Das nächste Problem ist, dass die Grammatik alles andere als Intuitiv ist, und ich will nicht immer erst eine Minute über die grammatische Richtigkeit eines Satzes nachdenken, bevor ich ihn ausspreche, das können die Dichter und Schriftsteller und sonstige Leute, die meinen das tun zu müssen, gerne tun, aber sie sollen nicht erwarten, dass ich mich danach richte.

20.04.2007 - 10:31 Uhr

Ahhh! DES Genitivs Tod heißt das! Von wegen korrekt!

"Des Genitivs Tod" ist grammatisch genau das, wozu der Genitiv eigentlich da ist, aber "dem Genitiv sein Tod" ist grammatisch auch möglich. Aber die Tatsache ist ja, das die Leute zunehmend zu der zweiten Variante tendieren. Grammatik wird halt nicht so ernst genommen (siehe das Bsp. mit den Römern).

20.04.2007 - 10:23 Uhr

Manche Datenbanksysteme bieten sowas als Serverfunktion an (z.B. SQL Server 2005), guck da mal in der Doku...

20.04.2007 - 09:56 Uhr

Das ein Programm sich selbst löscht geht nicht. Was aber gehen würde, ist, dass dein Programm ein neues Programm generiert (und zwar komplett im Arbeitsspeicher. Das beim Beenden aufruft und das neu erschaffene Programm das Ursprüngliche Prgramm löscht. Das ist aber äußerst kompliziert, zumal das neu erstellte Prgramm auch erstmal warten muss, bis sich das Ursprungsprogramm beendet hat.

19.04.2007 - 14:39 Uhr

@herbivore: Du meinst sicher www.codeproject.com

19.04.2007 - 14:28 Uhr

Die Freiheit haben wir alle, die sollte aber eher im Geist als auf dem Papier herrschen.

Ein Forum ist aber elektronisch, und das macht m.E. nach schon einen deutlichen Unterschied, weil das (nach meiner Auffassung) mehr schriftliche Diskussionen als Nachlass ist. Und es wird nunmal umgangssprachlich diskutiert, von den alten Römern konnte fast keiner gutes Latein, und die paar, die es konnten sind Politiker geworden. Sprache verändert sich halt. Das Wort 'Standard' wird nur allzu bald schon 'Standart' heißen und dass der Dativ dem Genitiv sein Tod ist (was ja grammatisch korrekt ist) wissen wir auch spätestens seit Zwiebelfisch.

19.04.2007 - 12:09 Uhr

Ich versteh das Proble glaub ich immer noch nicht so ganz. Wenn du <Hotkey> + M gedrückt hast kannst du ja das ToolStripMenuItem per ShowDropDown oder so öffnen, und bei erneutem Drücken von M PerformClick ausführen...

19.04.2007 - 11:19 Uhr

Original von onlinegurke
Die Sache ist auch die, dass das in VB.NET möglich ist, also muss es ja in C# gehen.

Wieso?

Weil VB.NET genau wie C# in Grunde genommen nur Eingabehilfen sind, und die eigentliche Programmiersprache doch IL ist.

Original von onlinegurke
Man kann ja in .NET Eigenschaften vzu Defaulteigenschaften machen

Ganz korrekt ist diese Beschreibung nicht. Der Indexer ist eine Art Property ohne Namen, welcher Index-Zugriff erlaubt.

Im IL Code steht das anders. Da gibt es (ich beziehe mich wie immer in diesem Thread auf die IList<T>-Schnittstelle) eine Eigenschaft, die Item heißt und ein Attribut, das besagt, dass Item die Defaulteigenschaft ist (System.Reflection.DefaultMemberAttribute)

VB.NET kennt keine Indexer. Dort gibt es aber aber parametrierbare Properties.

Die man per Default-Schlüsselwort zu Indexern machen kann.

19.04.2007 - 10:30 Uhr

Wenn du auf jeden Fall warten willst, und die GUI blockieren soll führt glaub ich kaum ein Weg an Formularen vorbei. Du kannst dir ja auch eins definieren ohne Rand und dort die ToolStripItems nachbilden, oder so...

19.04.2007 - 10:10 Uhr

(abgeleitet von ArrayFelder in Interfaces definieren)

Nur mal so interessehalber

Man kann ja in .NET Eigenschaften vzu Defaulteigenschaften machen

T this[int index] { get; set; }

über die man dann bequem per Indexer zugreifen kann.
Was mich wundert ist aber, dass da nirgendwo steht, wie die Eigenschaft dann heißen soll.

Der ILCode

.property instance !T Item
{
    .get instance !T System.Collections.Generic.IList`1::get_Item(int32)
    .set instance void System.Collections.Generic.IList`1::set_Item(int32, !T)
}

enthält ja aber den Namen der Eigenschaft. Heißen alle Defaulteigenschaften in C# immer Item? Die Sache ist auch die, dass das in VB.NET möglich ist, also muss es ja in C# gehen. Nur wie?

Default Property Item(ByVal index As Integer) As T
    Get
    Set(ByVal value As T)
End Property
 

19.04.2007 - 09:55 Uhr

@roddy:
Ich würde aber an deiner Stelle lieber eine System.Collections.ObjectModel.KeyedCollection<String,MyClass> nehmen (d.h., eine Klasse davon ableiten weil KeyedCollection abstrakt ist), dann ersparst du dir die für meine Begriffe hässlichen KeyValuePairs. Intern basiert diese Lösung auch auf Dictionarys, Aber mit dem Unterschied, dass du die zu IDictionary-Methoden auch überschreiben kannst.

18.04.2007 - 16:23 Uhr

So?

private void ModalesMenu()
{
    menuresult = null;
    ContextMenuStrip mnu = new ContextMenuStrip();
    mnu.Closed += new ToolStripDropDownClosedEventHandler(PopupMenu_Closed);
    mnu.Items.Add("Menüeintrag 1");
    mnu.Items.Add("Menüeintrag 2");
    mnu.Items[0].Click += new EventHandler(PopupMenu_Click);
    mnu.Items[1].Click += new EventHandler(PopupMenu_Click);

    mnu.Show(this,100,100);
}

private void ModalesMenuTeil2(String menuresult)
{
MessageBox.Show("Gewählter Menüpunkt : " + menuresult);
}

private void PopupMenu_Click(object sender, EventArgs e)
{
    ModalesMenuTeil2(sender.ToString());
}

private void PopupMenu_Closed(object sender, EventArgs e)
{
    ModalesMenuTeil2("");
}