Laden...

Forenbeiträge von winSharp93 Ingesamt 5.742 Beiträge

14.03.2012 - 18:42 Uhr

Ich versteh nicht was du meinst ich seh die PicktureBox / Labels hinter meinem UserControl

So macht man es aber trotzdem nicht.

14.03.2012 - 16:42 Uhr

Hallo jojo123,

herzlich willkommen hier auf myCSharp.de!

Ist dies ok, oder würdet ihr sagen, dass hier der Einsatz einer Vererbung ein schlechter Stil ist?

Das kommt darauf an - pauschal lässt sich so etwas immer schlecht sagen 😉

Evtl. ist ein Adapter geeigneter (insbesondere, wenn die Klassen eigentlich nichts miteinander zu tun haben und jede in ihrem eigenen Kontext existiert).

Ansonsten ist vielleicht auch die Verwendung eines Interfaces statt einer Basisklasse eine gute Lösung.

14.03.2012 - 16:40 Uhr

Ich will die ID eines Tasks als Indexer für Task-spezifische Array-Zugriffe benutzen.

Schlechte Idee - löse das besser anders.

14.03.2012 - 16:15 Uhr

Wobei da natürlich die Frage nach dem Sinn im Vergleich zum Nutzen aufkommt - was stört es, wenn jemand das Event abonniert?

Du kannst ja in der Dokumentation vermerken, dass man es nicht benutzen soll.

14.03.2012 - 14:12 Uhr

Was besagt denn die Message der Exception bzw. eine evtl. vorhandene InnerException?

14.03.2012 - 11:21 Uhr

würde ich es aus der RunWorkerCompleted-Methode heraus erlauben, die nächste Form aufzurufen, hätte ich keinen Vorteil dazu, die CSV-Datei erst bei Arbeitsbeginn zu laden.

Das war ja auch nur ein Beispiel - du sollst einfach das, was du "nach dem Warten" machen willst, in RunWorkerCompleted machen.

14.03.2012 - 11:12 Uhr

Hallo dRei,

du musst natürlich eine Transformation erstellen, auf dein Control anwenden und dann diese animieren.

14.03.2012 - 10:33 Uhr

Könntest du vielleicht noch einmal auf meinen Beitrag von gestern (13.03. um 19:42) einegehen?

Bin ich doch 😉
Ich habe versucht, dir das auszureden.

Ansonsten hat MrSparkle ja schon mit RelativeSource die Antwort gegeben (ungetestet):


<Label Content="{Binding Path=MyProperty, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" Width="200" Height="50"/>

Gibt aber wie gesagt bessere Lösungen.

14.03.2012 - 10:28 Uhr

Nun muss ich also sicherstellen, dass das Objekt bereits erstellt ist, wenn es abgerufen wird.

Baue deine Anwendung lieber so um, dass der Abruf erst aufgrund von RunWorkerCompleted erfolgt (indem die Form z.B. erst dort geöffnet wird).

Thread.Sleep deutet in 99% der Fälle auf eine sehr suboptimale Lösung hin.

14.03.2012 - 08:45 Uhr

dafür aber keine Windowsupdates 😕

Und das vermutlich auch noch wegen der Sicherheit, weil Updates ja dafür bekannt sind, Sicherheitslücken zu enthalten?^^ 😁

14.03.2012 - 08:42 Uhr

Hallo devil1993,

herzlich willkommen hier auf myCSharp.de!

Ich vermute stark, dass das Problem bei VS liegt

D.h. wenn du ohne VS kompilierst und startest, läuft es?

bei mir jedoch kommt er nicht über das instanzieren des DBInterface hinaus meldet aber auch keinen Fehler.

Das Programm blockiert also?

Deaktiviere mal testweise deinen Virenscanner (nach einem Systemneustart bevor du VS startest) und probiere es erneut.

13.03.2012 - 22:03 Uhr

Hallo t27b8d_DE,

wenn ich dich in etwa verstanden habe, ist ein Dictionary<int, Action> wohl eher das richtige für dich - dann kannst du die Keys quasi beliebig vergeben (und musst die "Lücken" nicht auffüllen).

13.03.2012 - 22:01 Uhr

Gibt es vielleicht auch irgendeine Möglichkeit das Plugin ohne große Probleme zu verteilen o.ä., mit dem man vielleicht bei der IT punkten kann?

Google mal nach "Silverlight unattended install" bzw. "Silverlight deployment Guide" - siehe u.a.:
Silverlight Deployment Guide v4 is available for Download
Silverlight Deployment Guide

Anonsten kann SL IMHO auch über WSUS deployt werden - via Windows Update ist es jedenfalls als optionales Update verfügbar.

Zur Not: Erstelle eine Anwendung, die SL bei der Installation mitinstalliert und lege einen Screenshot auf die Adresse deiner Anwendung auf dem Desktop an.
Dann verlangt halt deine Anwendung quasi eine "Installation" - wenn das der IT Abteilung lieber ist...

13.03.2012 - 21:54 Uhr

Hallo RStorm,

ich wende mich hier an euch, weil ich jetzt schon seit über 2 Wochen mir die Finger Wund tippe und probiere und keine Lösung finde.

Die folgenden Lösungen hast du gefunden und probiert?
Error 80040154 retreiving COM Class factory
The Crazy 80040154 COM Class Factory Error
How to fix Class not registered or 80040154 error

Versuche ansonsten einmal, das Problem wie in [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden beschrieben, einzugrenzen.

Ich glaube fast, dass es weniger mit WPF als mit der Neuerstellung des Projektes zu tun hat (daher verschoben).
Achte insbesondere einmal auf die gewählte Zielplattform (x86 vs. x64 / AnyCPU) wie auch in dem zweiten Link beschrieben.

//EDIT: Dacht' ich mir's doch 😉

13.03.2012 - 20:20 Uhr

da ich das UserControl öfter einsetze, und die Property im ViewModel auch einmal anders heißen kann.

Da würde ich dann entweder a) ein CustomControl verwenden (wenn es sich um ein allgemein verwendbares Control handelt; z.B. ein spezieller Button, ...) oder b) immer das gleiche bzw. ein ViewModel gleicher Basisklasse verwenden, das du als Property bereitstellst.

Die Beziehung ViewModel - View sollte immer 1:1 sein (evtl. auch mal 1:n für kleine ns - aber persönliche Präferenz), jedoch IMHO nie n:1 (oder gar n:m).

13.03.2012 - 19:26 Uhr

Ich habe es nun so umgebaut, wie du sagtest, allerings weiterhin ohne Erfolg.

Ich meinte es so:


<!-- UserControl -->
<Label Content="{Binding Path=MyPropertyInTheMainViewModel}" Width="200" Height="50"/>

<!-- Window -->
<my:MyUserControl HorizontalAlignment="Left" Margin="102,72,0,0" x:Name="myUserControl1" VerticalAlignment="Top" /> <!-- (Keine Angabe der Property) -->

Bei Verwendung von ViewModels ist es üblich, pro UserControl auch einen ViewModel-Typ vorzusehen; insofern braucht man keine zusätzlichen DependencyProperties.

13.03.2012 - 18:41 Uhr

Hallo TM_87,

verwende Tasks (aus System.Threading.Tasks) und du kriegst ein sehr komfortables Exception-Handling.

13.03.2012 - 18:38 Uhr

Hallo webdesign-wild,

du begehst zwei elementare Fehler:1.Du implementierst INotifyPropertyChanged in einem DependecyObject (in deinem Fall Window). 1.Du versuchst per "normalem" Binding an das Control selbst zu binden: Ein Binding ohne Angabe von "Source" bzw. "RelativeSource" bindet immer an DataContext

Abhilfe schafft Folgendes:1.Lagere den Code aus dem Window in eine eigene Klasse aus (schon hast du ein sogenanntes ViewModel) 1.Setzte dieses ViewModel als DataContext im UserControl (bzw. als DataContext im Window; das wird dann automatisch an das UserControl weitergereicht).

13.03.2012 - 16:18 Uhr

Ok - dann musst du die Daten wohl manuell an die URL anhängen; der "data"-Parameter scheint wohl generell als Content gepostet zu werden (auch wenn das an manchen Stellen anders steht):


$.post("http://localhost/WCFServiceTest/Personenverwaltung.svc/setperson?" + $.param({id: 12}))
   .success(function(result) {            
        alert(result);
    });

13.03.2012 - 16:01 Uhr

Hallo Console32,

zeichne besser alles in einem Control (also Hintergrund + Vordergrund).
Dann ersparst du dir einiges an Ärger.

Ansonsten könnte an dem das Auskommentieren des Aufrufs von "base.OnPaintBackground" Schuld sein.

13.03.2012 - 15:29 Uhr

Kannst du mal (z.B. mit Firebug) schauen, welchen Request der Browser absetzt?

13.03.2012 - 14:49 Uhr

Hallo Beppo98,

Egal wie ich den String im Attribut "data" hinbiege,

Soweit ich weiß, solltest du hier ein Objekt übergeben, d.h.:

data: {id: 12},
12.03.2012 - 20:45 Uhr

Firma hat nur eine Niederlassung und entscheidet das bei der Installation.

Mit einer kleinen Ergänzung: In der Niederlassung befindet sich nur ein Rechner, der auf die Daten zugreift.

Die Firma hat zwei Niederlassungen und möchte auf beide Bestände zugreifen. Also installieren wir den SQL Server Express auf einem Server auf den beide Standorte zugreifen können und auf beide Clients. Der Server könnte im ungünstigsten Fall sogar einer der Clients sein.

Genau (wobei der "ungünstige" Fall natürlich wirklich sehr ungünstig wäre 😉 ).

Die Firma hat zwei Niederlassungen und möchte separat auf Bestände in getrennten Datenbanken zugreifen. Also installieren wir den SQL Server Express auf beide Clients und greifen ggf. wechselseitig darauf zu

...wobei das vermutlich langfristig darauf hinaufläuft, dass man die Daten in einer DB vereint, um das ständige Geswitche zu vermeiden.

Die Firma hat eine Niederlassungen und möchte mittels Notebook (Außendienst) die Kundenbestände mitnehmen. Also installieren wir den SQL Server Express in der FIrma und aufs Notebook und synchronisieren die Daten, wenn der Außendienstmitarbeiter wieder in die Firma kommt

Durch das "Mitnehmen" kommt man recht schnell zu einer anderen Problematik: Replikation bzw. Synchronisierung von Datenbanken, sodass diese auch offline verfügbar sind und Änderunegn entsprechend übernommen werden.
Hier besteht eine mögliche Lösung in einem SQL Server auf einem Server und pro Client eine Compact Edition.
Siehe hierzu auch: Datensynchronisation verteilter Anwendungen sowie 2 Datenbanken synchron halten

12.03.2012 - 15:03 Uhr

Object.Equals(o1, o2) sollte jedoch weiterhin true ergeben.

12.03.2012 - 14:18 Uhr

Hallo inflames2k,

mit einem Memory Profiler solltest du recht schnell erkennen können, welche Objekte nicht freigegeben werden können und wo noch Referenzen darauf existieren.

12.03.2012 - 13:13 Uhr

Tipp: Schau dir mal den StringBuilder an, dann kannst Du die die Literal Concatenation (+) sparen.

Dann von mir der Verweis auf: [Artikelserie] SQL: Parameter von Befehlen

12.03.2012 - 12:59 Uhr

Da hat man zu wenig Kontrolle über einzelnen Aktionen.
Ich habe da vor allem bei Objekten mit Relationen, die zum Teil bereits in der DB sind
und teilweise nicht, gerade beim Speichern erhebliche Probleme gehabt.

Vielleicht solltest du dann eher die Datenbank in Ordnung bringen bzw. fragen, wie du diese Probleme mit dem EF löst 😉

12.03.2012 - 10:24 Uhr

Wenn überhaupt, musst du dich also in den Build-Prozess einklinken und dabei aus den Attributen Code generieren, der dann zeitgleich compiliert und referenziert wird

IMHO spricht auch nichts dagegen, das nach dem Build der entsprechenden Klassen zu machen und den DB-Zugriffscode in eine zweite Assembly zu packen.

12.03.2012 - 08:33 Uhr

ich arbeite derzeit an einem kleinen Projekt mit Objektrelationalen Mapper in Verbindung mit C# und SQLite.

Wozu? Es gibt doch schon das Entity Framework, NHibernate und einige andere.

Ansonsten ist wohl eher ein Codegenerator, was du suchst.

11.03.2012 - 21:29 Uhr

Hallo Cannon,

gehe da am besten nach folgendem Schema vor:


public sealed class FooViewModel //...
{
   //...
   public MenuViewModel Menu //Returnt null, wenn keine Buttons vorhanden
   //...
}

public sealed class MenuViewModel
{
   //...
   public ObservableCollection<CommandViewModel> Commands
   //...
}


<!-- Datatemplate für FooViewModel -->
<DataTemplate ...>
  <!-- ... -->
  <ContentPresenter Content="{Binding Path=Menu}" />
</DataTemplate>

<!-- Datatemplate für MenuViewModel -->
<DataTemplate ...>
  <ItemsControl ItemsSource="{Binding Path=Commands}" />
</DataTemplate>

<!-- Datatemplate für CommandViewModel-->
<DataTemplate ...>
   <Button Command="{Binding Path=.}" Content="{Binding Path=Text}" />
</DataTemplate>

11.03.2012 - 15:27 Uhr

Hallo Cannon,

Bei den großen Versionen, die mit größeren Datenbanken und mehr unterstützten CPU-Kernen trumpfen, kann ich den Unterschied noch verstehen.

Genau - da geht's hauptsächlich darum, wie gut die DB skaliert.
Das wird aber nur interessant, wenn riesige Datenbanken von vielen Usern gleichzeitig verwendet werden sollen.

Sind die Unterschiede darin begründet, ob ich eine Datenbank lokal oder im Netzwerk verwende?

Ja - der SQL Server Express ist eine "echte" Datenbank.
Beim SQL Server Compact Edition handelt es hingegen um eine embedded Datenbank.
So lange nur ein User bzw. eine Anwendung gleichzeitig auf die Datenbank zugreift (und sich die Größe der DB in Grenzen hält), macht es quasi kaum einen Unterschied, welche SQL-Server Version du verwendest - meist greift man hier aber zu Comapct Edition, um den SQL Server nicht installieren zu müssen (der "echte" Server bringt ja einen eigenen Dienst etc. mit, während die Compact Edition hauptsächlich aus ein paar DLLs besteht).

Wie verwende ich überhaupt eine Datenbank im Netzwerk? Liegt die auf einem Server und wird für alle Nutzer freigegeben? Das ginge doch dann mit einer Compact genauso wie mit einer Express oder?

Nein, eine einfache Freigabe erlaubt keinen gleichzeitigen Zugriff - da kann dann immer nur ein User gleichzeitig Änderungen vornehmen bzw. lesen.

Der "echte" SQL-Server hingegen erlaubt es auch, dass mehrere Benutzer gleichzeitig Transaktionen auf die Datenbank offen haben können und ermöglicht somit wirklich gleichzeitigen Zugriff (es muss nicht erst gewartet werden, bis die DB wieder "frei" ist, bevor sie verwendet werden kann).
Dabei erfolgt der Zugriff aber nicht direkt "auf die Datenbankdatei", sondern z.B. via TCP/IP auf den Sefrverdienst, der die Koordination übernimmt.

Und was ist, wenn meine Anwendung (WPF) plötzlich mit Silverlight arbeiten soll, liegt die Datenbank dann irgendwo in einer Cloud oder wie funktioniert das? Die Frage ist also, wie komme ich aus dem Browser an meine Datenbank?

Aus SL direkt auf eine Datenbank zuzugreifen ist eher nicht zu empfehlen (u.a. auch wegen Sicherheitsaspekten).
Besser ist da die Verwendung eines Webservice (z.B. mit WCF oder SL RIA).

09.03.2012 - 15:38 Uhr

Wenn ich es so schreibe kann es passieren, dass wenn zwei dies gleichzeitig versuchen eine Variante gewinnt und die andere ist weg

Zwei was? User? Programminstanzen? Prozesse? Threads? Programmierer?
Und was genau meinst du mit "gewinnen" und "weg" sein?

09.03.2012 - 11:57 Uhr

Hallo moelski,

LINQ to XML kommt dem recht nahe.

Siehe ansonsten z.B. Dynamic XML Reader with C# and .Net 4.0.

09.03.2012 - 11:12 Uhr

Hallo InSiDeR,

generell kannst du ohne gültigen Account auf einem fremden PC nicht einfach Software ausführen (es sei denn, dieser ist so konfiguriert, dass dies explizit zugelassen ist).

Alles andere fällt in den Bereich der Schadsoftware bzw. des Eindringens in IT-Systeme.

Und diese Bereiche möchten wir - zumindest nicht in der Form, wie du danach fragst - nicht hier im Forum diskutieren (unter anderem auch wegen rechtlichen Aspekten).

==> Geschlossen

08.03.2012 - 20:51 Uhr

Der arme Hacker müsste dann vor jedem erneuten Hack das File wieder und wieder kopieren ...

Oder anders ausgedrückt: Als reine Softwarelösung ist so etwas unmöglich.

Wenn du einen Server (oder ein Stück andere Hardware 😉 ) hast, welche du wirklich gegen Zugriffe direkt auf Dateien "sichern" kannst, ist das möglich:

Du löschst einfach die Datei (bzw. nur den tatsächlichen Entschlüsselungskey - die verschlüsselte Datei kann ja weiterhin auf dem Clienten liegen), wenn zu oft ein falsches Passwort gesendet wurde.
Das setzt aber wie gesagt voraus, dass die verschlüsselte Datei (bzw. der Entschlüsselungskey) den Server ohne korrektes Passwort nie direkt verlässt.

Zudem wäre da natürlich das Problem, dass jemand die Übertragung zwischen Server und Client abfängt...

08.03.2012 - 14:49 Uhr

Hallo GG71,

mir ist ehrlich gesagt schleierhaft, nach welchem Schema du deine Zahlen "zerlegt" hast.

Suchst du evtl. [Artikel] Regex-Tutorial

08.03.2012 - 14:09 Uhr

Hallo Beathoven,

wechsel mal testweise zwischen x86 / x64?

08.03.2012 - 09:14 Uhr

Da die Rechtestruktur auf der Datenbank sehr "kompliziert" ist. [...] Daher dauert ein Login immer "recht" lang bis er alle Rechte überprüft und abgefragt hat.

Dann solltest du die Struktur ein wenig vereinfachen 😉

Wie sieht die denn bisher aus? Bzw.: Welche Anfoderungen gibt es?
Ich kann mir vorstellen, dass sich die soweit vereinfachen lässt, dass man mit einer SQL-Abfrage letztlich alle Rechte eines Benutzers erhält und diese während einem Request auswerten kann.
Das Caching des SQL-Servers sollte dann den Rest übernehmen.

Ansonsten könntest du dir mal die Cache Class anschauen.

07.03.2012 - 17:32 Uhr

Hallo Coooder,

siehe die "Falle" in [FAQ] Warum blockiert mein GUI?

BTW: Verwende besser die Task Parallel Library (z.B. System.Threading.Tasks.Factory.StartNew) oder den ThreadPool statt manuell Threads zu erzeugen.
Dann kannst du auch gleich die TPL dazu verwenden, um den GUI-Code zu synchronisieren, siehe Parallel Programming: Task Schedulers and Synchronization Context.

@DeZio: Nein, damit wird lediglich ein Delegat erstellt.

07.03.2012 - 09:56 Uhr

Somit wäre die Verbindung ja auch gesichert soweit ich weiß.

Im Normalfall kombiniert man in Firmenumgebungen beide Varianten: SSL und VPN.
Das Zertifikat kann man dann jedoch auch problemlos selber ausstellen und an die Firmenrechner deployen.

Der Angreifer könnte sich ja durchaus auch im Intranet befinden.

06.03.2012 - 22:02 Uhr

ich weiß jetzt nicht so recht wie ich an dieser stelle weiter machen soll

Und ich weiß an dieser Stelle nicht so recht, was eigentlich deine Frage ist.

06.03.2012 - 14:05 Uhr

Wie könnte ich hier die Funktion durch ein Interface ersetzen? Oder meinst du, ich erstelle pro mögliche Funktion eine Instanz so eines Interfaces und rufe für diese eine Funktion auf, die mir die Daten zurückliefert (wäre auch ne Alternative, aber ist die wirklich praktischer oder schieße ich damit eher mit Kanonen auf Spatzen?)

War nur eine Anregung - so genau, dass man das wirklich beurteilen, ist deine Beschreibung allerdings nicht.

(Filter-Property, Funktion)

Wenn das sowieso schon alles in einer Klasse / einem Interface ist - warum stellst du dann nicht direkt eine Methode bereit?

05.03.2012 - 19:35 Uhr

Ich weiss nicht, ob die FritzBox auch CAPI über LAN anbietet

Scheint sie zu tun: CAPIoverTCP aktivieren

05.03.2012 - 19:00 Uhr

Den Umkehrschluss kann man m.E. nicht unbedingt ziehen.

Klar - da gebe ich dir recht.

Aber ich bezweifle, dass die Konfiguratoren bei den meisten Shopbetreibern darauf wirklich achten.
Insbesondere bei Arbeitsspeichern sind die "offiziellen" Module nicht immer auch die besseren (und preisleistungstechnisch attraktiveren).

Und für "Kompatibilität" anhand der Eingangsfrage (heißt für mich: Läuft, wenn auch evtl. nicht optimal) ist IMHO der Sockel schon einmal eine recht treffsichere Methode (insbesondere, wenn spezielle Listen nicht zur Verfügung stehen). Das war also mehr als Notlösung bzw. als erster Ansatz gedacht. Wie du gesagt hast: Wenn der Sockel nicht passt, kann man sich die Listen sparen 😉

05.03.2012 - 10:24 Uhr

Und ansonsten gibt es ja noch allgemeine Infos wie Sockeltyp (Intel 775, Intel 1155), Speichertyp (DDR2, DDR3) usw.
Da gilt dann algemein: Wenn der Sockel der CPU und des Mainboards identisch ist, passt's 😉

Damit kommt man IMHO schonmal recht weit.

05.03.2012 - 10:21 Uhr

Preis Leistung

Dann wäre es vielleicht sinnvoll gewesen, den Preis in deiner Übersicht anzugeben 😉

Von einem Quadcore im Laptop würde ich dir definitiv abraten - VS und die ganzen Entwicklertools nutzen die noch nicht in einem solchen Maße aus, dass du tatsächlich davon profitierst.
Eher das Gegenteil ist der Fall: Meist sind Quadcores niedriger getaktet als die Dualcore-Varianten und laufen somit gefühlt langsamer.
Daher: Nimm lieber einen ordentlich getakteten DualCore (evtl. mit HyperThreading).

Zudem würde ich an deiner Stelle unbedingt in eine SSD investieren (wobei man die besser selber einbaut, da die Hersteller teilweise recht hohe Aufpreise dafür verlangen).
Als Größe sollten - solange du nicht Musik-, Video- oder Fotoarchive auf dem Gerät lagern willst - 256GB ausreichen (ich persönlich komme auch mit 128GB zurecht).

Setzt du CAD-Software ein oder führst 3D-Rendering durch?
Wenn nicht, ist die Graka IMHO deutlich überdimensioniert.

16GB RAM in einem Laptop halte ich auch recht hoch dimensioniert - selbst mit 8GB hat man IMHO mehr als genug.

Insofern glaube ich, dass es in deinem Fall deutlich geeignetere Geräte (d.h. preiswerter, leichter und mit längerer Laufzeit) gibt.

02.03.2012 - 14:48 Uhr

Im Normalfall sagt man auch: "Ein Context pro UseCase".

02.03.2012 - 14:46 Uhr

Ich glaube, wir reden gerade ein wenig aneinander vorbei 🤔

Denn wenn nach dem Undo ein anderes Objekt vorhanden ist, als vorher, können auch frühere Änderungen daran nicht mehr rückgängig gemacht werden

Wie gesagt: Das Memento eines Elementes mit Children enthält sowohl eine Referenz auf die ursprünglichen Children als auch deren Mementos.
Bei Deserialisierung werden die Children einfach per new erstellt und das Memento zurückgespielt.

Eigentlich ist es ja eh' egal, ob du das gleiche Objekt wiederherstellst oder nicht - durch das Memento wird es ja wieder in den gewünschten Zustand versetzt.