Häufig werden Attribute zur Entwurfszeit oder Entwicklungsreporter gebraucht also in der Visual Studio IDE, wenn man ein Fenster desgined (?).
In deinem Besipiel beinhalten diese Attribute Angaben womit (EnumTypeEditor) und wie (EnumItem-Parameter) diese Enumeration in dem PropertyGrid (Eigenschaftenfenster) angezeigt wird.
EDIT: Rechtschreibung
witte schrieb:
Dravere schrieb:
DANKE!
Mein Leben als Programmierer in C# hat sich gerade um einiges erleichtert
Grüssli
...biste mitbekommst dass der Designer jetzt immer ewig zum Starten braucht. Oder ist das jetzt schneller geworden?
Mir ist bis jetzt kein Unterschied aufgefallen. Allerdings hatte die Toolbox/Designer schon früher immer noch zusätzliche Ladezeit benötigt.
Aber ich würde sogar noch mehr Ladezeit opfern, damit ich dies benutzen kann. Das ist sowas von erleichternd! Wenn es weitere zusätzliche Ladezeit haben sollte, hole ich diese an anderen Stellen locker wieder raus
Grüssli
Firefighter schrieb:
Ja sowas nennt man tatsächlich Methodenüberladung
Ich erinnere mich grau daran, diesen Begriff schonmal irgendwo gehört zu haben... Danke!
Mach nen Incident bei MS auf
Oder warte bis du nach Datenbanken rüber verschoben wirst, vielleicht kann dir dort jmd. helfen.
p.S.: was ganz klar nicht helfen würde, und daher gut ist dass du es nicht gemacht hast: genauere Daten angeben. Welche Version von SQL Server Compact Edition, welche Version von Visual Studio etc. Vollkommen wertlose Informationen, also bloss nicht angeben.
Einself.
Wichtig ist dann das Hinzufügen zum Parent-Control (bei dir dann TabControl):
Button button = new Button();
// ... Eigenschaften des Buttons setzen (Position, Name, Text, Click-Event etc.
tabControl.Controls.Add(button); // erst hierdurch wird der Button auch angezeigt
Am besten, du schaust dir mal eine entsprechende .Designer.cs-Datei an und orientierst dich daran.
Direkt nicht, aber dazu kannst du die WinAPI-Funktionen mittels PInvoke benutzen, z.B. SendMessage: http://www.pinvoke.net/default.aspx/user32/SendMessage.html
Die entsprechenden Messages (z.B. WM_MOUSEMOVE) und deren Parameter solltest du dir bei MSDN raussuchen.
Mir fällt gerade auf...
rikyho schrieb:
class Test2
{
List<int> list;
public List<int> List { get { return list; }}
}
Das ist schlecht. Der Aufrufer bekommt eine Referenz auf das Feld l und kann dieses darüber manipulieren, obwohl es eigentlich private ist.[/quote]
Ich denke hier liegt der Denkfehler. Der Aufrufer kann das Feld list _nicht_ ändern, sondenr nur dessen Inhalt. Privat bedeutet hier, das man von ausserhalb der Klasse das eigendliche Listenobjekt nicht austauschen kann. Also sowas wie List = new List<int>() geht nicht.
Wohl aber kann man den Inhalt der Liste verändern, was man wiederum dadurch unterbinden kann indem man eine ReadOnly-Liste nach aussen verwendet.
Anders war das bei den C++ Referenzen. Beispiel:
class Test
{
char* data;
char*& GetData() { return data; }
};
in dem Beispiel wäre es jetzt folgendes möglich:
t.GetData() = new char[128];
was zu beliebigen Seiteneffekten führen kann je nachdem was die Klasse intern macht.
Die WeakReference kannte ich noch nicht, aber leider nicht das, was ich suche. Aber ich merke es mir für später, das kann man sicher noch gut verwenden.
Naja, ich überdenke vielleicht auch nochmals mein Design. Es sollte eigentlich eine Optimierung werden. Aktuell habe ich Formeln, welche Variablen beinhalten. Diese Variablen haben einen Namen gespeichert und gehen bei jeder Berechnung von neuem ihren Wert in einem Dictionary holen. Ich könnte grundsätzlich diese Beziehung bereits beim Parsen auflösen und genau festlegen, welches Objekt zu welcher Variable gehört. Das Problem wäre dann halt nur, dass man das ursprüngliche Objekt nicht mehr verändern darf, sonst verweisen die Variablen Objekte in den Formeln auf falsche Objekte und der Fehler fällt nicht auf.
Daher wollte ich einfach eine Sicherheitsprüfung einbauen, falls man ein Objekt rauslöschen möchte, welches noch in einer Formel verwendet wird.
Caching oder ähnliches geht hier leider nur sehr schwer, werde aber dies auch nochmals in Betracht ziehen. Wobei ... moment ...
Mit einer WeakReference wäre etwas in Richtung von Caching vielleicht möglich. Hmmm ...
Naja, ich überlege mir das dann nochmals nach einer Runde gesundem Schlaf
Grüssli
Halt jetz verstehe ich etwas nicht mehr:
Die Datenbankdatei wird in das Debug-Verzeichnis kopiert und dort werden, wie ich mit dem SQL Server Management Studio herausfinden konnte, die Datensätze richtig eingefügt. Nur wenn ich wieder das Programm starte wird die Datenbank aus dem Projektverzeichnis erneut ins Debug kopiert und überschreibt die andere.
Ist das so üblich?
Ich fragte mich ohnehin wie die Datenbank dann beim Deployment verteilt wird, die sollte ja auch ins Anwendungsverzeichnis oder dasjenige des SQL-Servers und die können sich ja immer unterscheiden.
In einem typisierten DataSet kannst Du jedenfalls die Werte als Parameter übergeben (z.B.
customersDataSet.AddCustomerRow("DerName", "SeineAdresse"...)
oder wie meinst Du? Da sind die Spalten zwar festgelegt, Du vergibst ihr ja gar keinen Namen?
Moin!
Mit der GetSchema Methode des Connection Objekts kann ich mir Informationen über die in einer Datenbank enthaltenen Tabellen/Views etc besorgen. Kann es sein, das diese Daten gar nicht "genormt" sind? Das Ergebnis des "Tables" Schema z.B. sieht unter Oracle anders aus als unter Interbase, die Spaltenbezeichner sind anders und es gibt auf beiden Seiten Spalten die der Andere nicht zurückliefert Ist es nicht gerade Sinn und Zweck von GetSchema diese Informationen einheitlich abfragen zu können? Anscheinend backt da doch wieder jeder seine eigenen Brötchen
die idee, ein transparentes panel oder aehnliches drauf zu legen und das dann auszuwerten hatte ich auch schon, allerdings schiebt sich dsa bloede videopanel immer in den vordergrund!