Laden...
U
Benutzerbeschreibung
Konto auf Wunsch des Benutzers gesperrt

Forenbeiträge von userid12529 Ingesamt 208 Beiträge

03.01.2011 - 17:32 Uhr

Hallo,

bist du dir ganz sicher, dass du den String mit escapten, also doppelten "" erhältst? Ist das denn nicht einfach nur die Anzeige im Überwachungsfenster des Debuggers?
Wenn ich ein frisches C#-Projekt erstelle, darin eine Textbox und mir den Inhalt davon per Button-Klick ausgebe sieht alles ganz normal aus (ohne escaptes Backslash).

Hab das Beispielprojekt mal in den Anhang gepackt.

Gruß,
Andreas

26.12.2010 - 21:27 Uhr

Hast du das Icon denn auch deiner Form zugewiesen?

03.12.2010 - 17:59 Uhr

Consolas auf Schriftgrad 8. Was hast du denn bitte für Augen? 8o
Oder ist dein Monitor zu groß?! 😜

@Topic: Consolas in 10pt

29.11.2010 - 09:44 Uhr

Das
>>
soll einigen Berichten zufolge ganz gut sein.

Kann ich nur bestätigen. Kann ich ebenfalls bestätigen. Habe es gestern selbst verwendet und es funktioniert einwandfrei. 🙂

27.11.2010 - 19:58 Uhr

In Word kann man sogar Schriftarten benutzen, die man gar nicht auf dem Computer hat. Feine Sache! 😁

11.11.2010 - 15:59 Uhr

Hallo Mike,

ist die Einstellung "Download -> Automatische Eingabeaufforderung für Dateidownloads" für die Sicherheitszone "Internet" deaktiviert (Standardeinstellung)? Wenn du auf "Aktiviert" umstellst, sollte der Download nicht mehr geblockt werden.

Gruß,
Andreas

07.11.2010 - 12:59 Uhr

Wer weiss, vielleicht wollte der Entwickler sich ja kreativen Freiraum lassen für Enum.Maybe, Enum.Perhaps, Enum.DoNotKnowYet oder Enum.DoesNotMatter 😉 Dann müsste er aber auch jedes Mal das YesNoEnum mit umbenennen. In YesNoMaybeEnum, YesNoMaybePerhapsEnum usw. 😁

31.10.2010 - 23:30 Uhr

Hallo,

gut, ich kenne jetzt natürlich nicht die Programmarchitektur deines Update-Assistenten nicht. Dachte aber, da ja das Erstellen der Updatepakte und das Bereitstellen selbiger zwei unterschiedliche Concerns darstellen, dass sich diese Trennung auch irgendwie in deiner Software-Architektur zu finden sein müsste (und dass man dementsprechend an dieser Stelle eingreifen könnte). Es wäre jedenfalls meiner Meinung nach eine sinnvolle Überarbeitung. Ansonsten finde ich dein Projekt sehr interessant und ich verfolge die Entwicklungen aktiv mit, wenn ich es auch bisher nicht verwende.

Weiterhin gutes Gelingen wünsch ich dir bei deinem Projekt. 😃

LG,
Andreas

31.10.2010 - 19:47 Uhr

Hallo Maximilian,

ist es denn für deinen Updater zwingend nötig, dass die Updatepakete per FTP auf den Updateserver gelangen?
Ich habe vor einiger Zeit in meiner Firma in einem Projekt deinen Updater einbauen wollen, bin aber dann daran gescheitert, dass ich keinen FTP-Zugriff auf den Server habe (während ich aber über das interne Netzwerk mich auf dem Webserver anmelden und dort auch beliebige Dateien ablegen kann, die dann anschließend per HTTP-Protokoll erreichbar sind).
Mit deinem Update-Assistenten bin ich damals aber nicht sehr weit gekommen, weshalb ich dann zu einer kommerziellen Lösung gegriffen habe.
Ich denke das ist eine Schwäche deines Updaters, die eigentlich mit relativ geringem Aufwand behoben werden könnte? Nämlich, dass das entscheidende das Erstellen der Updatepakete sein sollte und das anschließende Hochladen auf den Server über das FTP-Protokoll nur eine von mehreren Alternativen wäre. Was hältst du von diesem Vorschlag?

Grüße,
Andreas

26.10.2010 - 16:40 Uhr

Laut Videobeschreibung:

I will be testing the impact of 0 ms, 100 ms, 200 ms, 300 ms, 600 ms and 1000 ms using the TMnetsim Tool from TMurgent.com. This tools creates a new listener on the Citrix XenApp server using port 1495. It applies the latency to the session and proxies it to the Citrix XenApp server using port 1494.

11.10.2010 - 16:58 Uhr

Wir benutzen in der Firma seit einiger Zeit DevExpress.
Kann es auf jeden Fall weiterempfehlen. Es gibt kaum etwas, was man damit nicht hinbekommt. 😃

04.10.2010 - 21:19 Uhr

Du kannst dir alternativ auch GeckoFX anschauen, damit bekommst du den Firefox auch in Winforms-Anwendungen rein. Allerdings ist das Deployment nicht so praktisch wie bei WebBrowser-Control.

29.09.2010 - 23:08 Uhr

Hab es grad bei mir getestet. Das AddIn wird bei mir geladen. Allerdings erst, nachdem ich es über Excel-Optionen > Add-Ins > Verwalten: Excel-Add-Ins: Gehe zu... > Automatisierung... hinzugefügt habe.

Generell gilt zu diesem Problem (also, dass er den LoadBehavior-Wert von 3 auf 2 stellt), dass entweder irgendwo in deinem Add-In-Code eine Exception ausgelöst wurde (was man in deinem Fall wohl ausschließen kann, da ja kein funktionaler Code enthalten ist), oder, dass auf dem Endgerät die Komponenten Shared Add-in Support Update for the Microsoft .NET Framework 2.0 (KB908002) installiert ist.
Habe selber mal vor einiger Zeit einiges an Kopfzerbrechen hinter mir, als ich mal ein Excel-COM-Add-In deployen musste (auf dem Entwickler-PC funktioniert es ja im Normalfall problemlos).
Irritierend an diesem Knowledge-Base-Artiekl war für mich damals, dass dort von COM-Add-Ins die Rede ist, die mit Visual Studio 2005 erzeugt werden, weshalb ich dann diesen Lösungsweg erst gar nicht ausprobiert hatte, da ich in VS2008 entwickle. Später hat sich dann aber herausgestellt, dass nicht die Visual-Studio-Version entscheidend ist, sondern die .NET-Framework-Version. Da du wie ich damals 2.0 als Target Framewort eingestellt hast, kann ich mir gut vorstellen, dass da das gleiche Problem zutage kommt.

Eine kleine Hürde gibt es aber bei der KB908002-Komponete aber noch: Wenn man die "vs2005-kb908002-enu-x86.exe" aus obigem Link herunterlädt und installiert, wird im Visual-Studio-2005-Verzeichnis im SDK\v2.0\Bootstrapper-Ordner die benötigte Komponente kopiert, sodass man diese beim Erstellen eines VS-Setup-Projekts als erforderliche Komponente auswählen kann (die Installation funktioniert leider nur mit installiertem VS2005; anders scheint man an die Komponente leider nicht dranzukommen). Damit die Komponente auch in VS2008-Projekten verfügbar ist, muss der KB908002-Ordner in das "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages"-Verzeichnis kopiert werden.

Hoffe das hilft dir bei deiner Problemlösung.

Grüße,
Andreas

29.09.2010 - 14:52 Uhr

int row = button.Tag / 3;
Sei jedoch angemerkt dass Tag vom Typ object ist. Allerdings sei auch noch angemerkt, dass der Designer die Eingabe für die Tag-Property immer als String speichert, auch wenn man einen numerischen Wert eingibt. (So jedenfalls meine bisherigen Erfahrungen.)

P.S: Ich würde die Buttons trotzdem dynamisch im Code erzeugen... Wenn man die Buttons ohnehin schon programmatisch erstellt, kann in das Tag-Property direkt ein Point-Objekt gespeichert werden. Dann spart man sich im Click-Eventhandler den kleinen Trick mit "/ 3" und "% 3". Was, wie ich finde, ohnehin umständlicher und auf den ersten Blick unverständlicher Code wäre.
Wenn im Tag direkt ein Point steckt, kommt man mit

Point point = (Point)button.Tag;

an das Objekt und kann entsprechend die X- und Y-Properties auswerten.

Gruß,
Andreas

10.09.2010 - 22:39 Uhr

Wenn du unter VS 2010 ein neues Projekt erstellst, ist die Einstellung standardmäßig .NET Framework 4 Client Profile, deshalb war das wohl die naheliegendste Vermutung.

04.09.2010 - 23:32 Uhr

Diese "fast kompletten Word-Funktionen", die integriert sind, die gehören nicht zufällig einfach nur zu einer DevExpress-Demo? Hmmm, der Name deiner EXE (RibbonPadSample) kommt mir jedenfalls sehr bekannt vor. 😁

Übrigens, du kannst die DevExpress-Controls auch sehr leicht eindeutschen. Einfach nur die entsprechenden Ressourcen-Dateien, die es schon fertig gibt (The collection of localized DevExpress assemblies) in einem "de"-Ordner in das Hauptverzeichnis deiner Anwendung packen.

Und damit es nicht ganz so auffällig wird, dass du einfach nur eine Demo-Anwendung der DevExpress-Leute erweitert hast, würde ich in den Projekteigenschaften noch den Namen der Ziel-Assembly, also deiner EXE, ändern. 😉

04.09.2010 - 00:12 Uhr

Hallo ErfinderDesRades,

stimme dir grundsätzlich auch zu. Allerdings muss ich noch zu dem Punkt des Aussehens bzw. der Gestaltungsmöglichkeit etwas loswerden. 🙂

Das kann man stylen, wenn Wert darauf gelegt wird. Weitgehend im Designer, inclusive einer eigenen Spalte für Icons.
Nur für eine Spalte mit Icon muß man das CellPaint-Event bemühen.

Dein Beispiel der Gestaltungsmöglichkeit von DGV und LV, mit am Ende gleichem/ähnlichem Ergebnis bei beiden Controls ist ja nett, und zeigt auch, was technisch so möglich ist. Aber mal ehrlich: Mit Ästhetik hat das ja nun nichts mehr zu tun. 😉

ListViews haben dagegen zusätzlich den für mich recht wichtigen Pluspunkt, dass man sie dem Style des Betriebssystems (bzw. des Explorers) anpassen kann (SetWindowTheme-Funktion). So erreicht man z.B. unter Vista/7 den netten Aero-Effekt, der sich beim Hovern und Auswählen von Items bemerkbar macht. Und der macht optisch schon einiges her, finde ich.
Wobei sich bei solchen Fragen wohl alle Geister scheiden... Ich persönlich leg recht viel Wert auf die Optik meiner Programme und versuche die UX Guidelines von Microsoft einzuhalten. Und da passt eine DGV leider nicht immer so gut rein.

31.08.2010 - 16:20 Uhr

Also für einen Fachinformatiker mit 2 Jahren Berufserfahrung halte ich eine Gehaltsvorstellung von 40.000 auch übertrieben. Ich selber hab meine FIAE-Ausbildung dieses Jahr erst beendet und bin für ein Jahresgehalt von 27.000 übernommen worden. Dafür hab ich aber auch selten Überstunden und 30 Urlaubstage pro Jahr. Weiterbildung geschieht hier auch auf eigene Kosten.

Von meinen ehemaligen Klassenkameraden war das höchste was ich mitbekommen hab als Einstiegsgehalt 36.000.

18.08.2010 - 22:37 Uhr

bplaced.net hab ich aus persönlicher Erfahrung von früher als sehr sehr langsam in Erinnerung. Die Punkte von Siassei (Stabilität und Verfügbarkeit) würde ich also als nicht erfüllt ansehen. Aber vielleicht hat sich das mittlerweile auch geändert.

Ansonsten würde ich wirklich zu einem kommerziellen Anbieter raten. Man bekommt heute schon sehr viel für ziemlich wenig Geld. Und mit der Bezahlung über das Lastschriftverfahren hab ich jedenfalls bei all-inkl keine Probleme. Dafür braucht man keine Kreditkarte.

Grüße,
Andreas

15.08.2010 - 03:30 Uhr

Wie wär's denn mit einem Firmen-internen Wiki?

30.07.2010 - 09:03 Uhr

Eventuell ist hier auch MigraDoc (in Kombination mit PDFsharp) interessant: PDFsharp/MigraDoc

Gibt sogar ein Beispiel für eine Rechnung: http://www.pdfsharp.net/wiki/Invoice-sample.ashx

Grüße,
Andreas

29.07.2010 - 22:38 Uhr

Habe im großen und ganzen das gleiche Ergebnis wie fullsizeDeveloper. Bei Chapter 4 ist GDI total zusammengebrochen.

System:
Windows 7 Professional 32-Bit
Intel Core 2 Duo E6600 2x2,4GHz
3 GB RAM
NVIDIA GeForce 9600 GT 512 MB

P.S.: Also, ich hab SlimDX soweit ich weiß nicht installiert (es sei denn es ist irgendwie mit Win7 dabei), das Programm funktionierte bei mir aber trotzdem. Nur so als Hinweis. 🙂

29.07.2010 - 19:13 Uhr

Hallo blutiger_anfänger,

stimmt du hast Recht, hab das glatt übersehen. 🙂
Wobei das LightBulbIcon hier eh nur ein Gimmick ist, speziell das Ändern des Symbol-Status. 😉

Hab's korrigiert, dankeschön! 🙂

Grüße,
Andreas

24.07.2010 - 12:19 Uhr

Hallo zusammen 😃

@Gü: Ja das stimmt schon, die Unterschiede zwischen PHP und C# sind nicht gerade gering. Aber da das ganze sowieso stückweise auch ein Übungsprojekt ist, weil's ein Privatprojekt ist, dachte ich mir kann ich auch zwei Implementierungen machen. Zeitdruck habe ich eh keinen. 😃
P.S.: Wenn mal im Programmierspiel eine vereinfachte Variante dieser Problemstellung als Aufgabe gestellt und gelöst wird, werd ich's mir ja mal anschauen. 😃

@herbivore: Hm, auf die Idee, die Google-Suche zu integrieren bin ich gar nicht gekommen... Aber ob man die dann auch optisch gut in den Rest der Seite integrieren kann? Werd's mir mal anschauen.

@Andre: Solr sieht auch interessant aus, danke. Allerdings glaube ich nicht, dass ich das benutzen kann. Habe nur ein bisschen Webspace gemietet und da krieg ich keinen Zugriff auf den Server...

Danke insgesamt für eure Antworten! Ich tendiere momentan doch sehr stark zu der DBMS-Lösung. Damit bin ich eh schon am meisten vertraut. Ist wohl wirklich so, dass ich gestern Abend zu kompliziert gedacht und den Wald vor lauter Bäumen nicht gesehen hab, weil das ja eigentlich die naheliegendste Möglichkeit ist. 😃

Gruß und Gottes Segen,
Andreas

24.07.2010 - 01:24 Uhr

Zuerst: Deine Signatur ist dämlich.

Freut mich, dass sie dich anspricht. 🙂){gray}

Ist eine Echzeitsuche oder ein Job über einen festen Datenbestand(mit Indizes)?

Hatte meinen Eingangspost nochmal erweitert (siehe Edit 2).
Also, es wird wohl mit ziemlicher Sicherheit ein RDBMS zum Einsatz kommen. Auf dem Produktivsystem wohl MySQL, zum Testen würd ich wohl für die C#-Implementierung MS SQL nehmen.
Da auch in meinem Edit die Frage: Im Grunde müsste ich ja nur eine entsprechende Query an die DB absetzen, die Datensätze haben wie gesagt eine ID. Da bräuchte ich mir ja nicht selber 'nen Wolf programmieren weil das DBMS ohnehin auf Abfragen optimiert ist.
Edit: Und, ja. Soll eine Echtzeitsuche sein.

Das ist im Prinzip einfach gute handwerkliche Programmierarbeit.
Bzw. was meinst du mit abfangen?

Ja das dachte ich mir. (Und ja, mit "Fehler abfangen" meinte ich die zweite Option.) Okay, die Handwerksarbeit krieg ich sicher hin.

Hm, im Grunde wäre dann wohl meine Frage wohl so gut wie beantwortet, lol.

Trotzdem danke für die Antwort! 🙂

Gruß und Gottes Segen,
Andreas

24.07.2010 - 00:41 Uhr

Hallo zusammen!

Ich hoffe ein ähnliches Thema wurde hier nicht schon behandelt, habe auf jeden Fall die Forensuche angeschmießen. Aber vielleicht haben mir auch nur die richtigen Suchbegriffe gefehlt.

Also, es geht mir um folgendes: Ich habe sehr viele mittellange Sätze. Insgesamt etwa 32.000 Stück an der Zahl. Durchschnittlich hat jeder Satz ~23 Wörter (ca. 740.000 insgesamt). Jeder Satz hat eine eindeutige ID.

Ich möchte nun eine etwas komplexere Suche auf alle diese Sätze ausführen, und mir alle Sätze liefern lassen, die den Suchkriterien entsprechen.
Dabei sollen ähnliche Suchfunktionen möglich sein wie z.B. bei der Google-Suche. Da kann man über Anführungszeichen "bestimmte Wortgruppen" suchen, also dass genau in dieser Reihenfolge diese Wörter vorhanden sind. Oder man kann mit einem Plus- oder Minus-Zeichen Wörter +erzwingen oder -unterdrücken. Ich denke das dürfte den meisten bekannt sein.
Edit: Ganz vergessen: Es soll auch möglich sein, mit Jokern nach ähnlichen Wörtern zu suchen, beispielsweise Land* (=> Land, Landschaft, Landgebiet, usw.).

Meine konkrete Frage wäre nun: Wie gehe ich hier am besten vor? In welcher Datenstruktur soll ich die Sätze bereitstellen? Als plain strings?
Wie kann ich performant alle Sätze nach Übereinstimmung durchsuchen und mir die Ergebnisse liefern lassen? Wären RegEx eine Option? Bin mir gerade unklar darüber, wie so ein RegEx-String aussehen könnte, schließlich suche ich ja nicht nach einem bekannten Muster. String.Contains() möchte ich aber vermeiden... 😉
Edit 2: Hm, eigentlich könnte man das doch einfach über eine entsprechende SQL-Query machen? Irgendwo müssen die Daten ja ohnehin gespeichert werden. Hab ich da wohl den Wald vor lauter Bäumen nicht gesehen? 🤔

Ich würde es zwar wahrscheinlich irgendwie hinbekommen, aber da ich mit Algorithmen nicht besonders vertraut bin, wäre meine Vorgehensweise vermutlich unnötig kompliziert und wahrscheinlich nicht sonderlich performant.

Deshalb dachte ich mir, frage ich einfach die Profis. 🙂

Und vielleicht noch eine Nebenfrage: Wie kann ich den Suchstring, den der User eingibt, parsen und Fehleingaben abfangen? Aus dem Suchstring müssten ja alle Einzelbedingungen extrahiert werden und gegebenenfalls in passende Datenstrukturen überführt werden, also beispielsweise eine List<List<string>> für Wortgruppen, eine List<string> für erzwungene Wörter und eine List<string> für unterdrückte Wörter.

Letzlich soll das ganze übrigens in PHP umgesetzt werden, aber das sollte für dieses Problem denke ich ohne Belang sein, werde das ganze ohnehin erstmal in C# probeweise umsetzen.

Hoffe ihr habt ein paar Denkanstöße für mich!

Danke und Gruß,
Andreas

12.07.2010 - 22:08 Uhr

warum genau die werte 1, 2 und 3?

vielleicht suchst du auch eher: Form.ShowDialog und Button.DialogResult

edit: und ansonsten: [FAQ] Kommunikation von 2 Forms

08.07.2010 - 22:25 Uhr

hm, weiß nicht, aber mir "schmeckt" diese lösung nicht wirklich...

habe aber auch keine anderen lösungsvorschläge gefunden, als die Culture temporär zu ändern:
http://stackoverflow.com/questions/197127/prevent-exception-messages-from-being-translated-into-the-users-language
http://stackoverflow.com/questions/209133/c-exception-messages-in-english

scheint aber das problem auch nur teilweise zu lösen.

08.07.2010 - 17:45 Uhr

Falls die englische Sprache da irgendwo mit installiert ist, sollte es auch reichen, die aktuelle Culture auf englisch zu stellen

Das wäre dann aber Zweckentfremdung dieser Funktion. Denn die aktuelle Culture entscheided ja im Programm hauptsächlich, wie die Sprache des Programms ist (falls Lokalisierung aktiviert ist) und wie Zahlen und Datumswerte formatiert werden. Nur wegen den Fehlermeldungen würde ich das deshalb nicht umstellen.

06.07.2010 - 23:19 Uhr

Hast du das Language Pack Deutsch für das Framework installiert? Soweit ich weiß ist das der entscheidende Faktor für die Sprache der Fehlermeldungen. Deinstallieren sollte in dem Fall dann reichen.

06.07.2010 - 11:44 Uhr

Wie wäre es denn mit Entwicklungswerkzeuge?

06.07.2010 - 00:33 Uhr

Hallo ErfinderDesRades,

danke für deinen Input! Hab's eingebaut und funktioniert super, zwar nicht hunderprozentig so, wie es die Windows-7-Tray-Anwendungen machen (kleinere Probleme bei schnellen Klicks, da gibt's Verzögerungen bzw. die erwartete Reaktion bleibt manchmal aus), aber so wie es jetzt ist passt es trotzdem und ist viel besser als das vorherige Verhalten. 🙂

EDIT: Achja, ganz vergessen zu erwähnen. Den Startbeitrag hab ich editiert und eine neue Version des Projekts hochgeladen, in dem dein Lösungsvorschlag integriert ist.

Grüße,
Andreas

04.07.2010 - 13:09 Uhr

Und hier das Test-Programm dafür, kannst ja mal schauen wie es auf deinem System aussieht.

04.07.2010 - 13:04 Uhr

Das ganze ist wie gesagt bis Windows 2000 abwärtskompatibel, bzw. .NET 2.0.

Ich habe jedoch bewusst nicht versucht, den Aero-Style für die anderen Betriebssysteme nachzustellen, da ich eher die Philosophie verfolge, dass eine Anwendung auf jedem OS nativ aussehen soll. Sprich, dass das OS den Style der Anwendung bestimmt, und nicht die Anwendung selber.

(Edit: So viele Tippfehler...)

Hier mal ein Screen wie eine Anwendung auf den Betriebssystemen Windows 2000, XP (kein Standard-Windows-Theme allerdings) und 7 aussehen würde:

03.07.2010 - 20:31 Uhr

Hallo Maximilian,

das Programm sieht wirklich schick aus und wäre für mich bestimmt auch nützlich – wenn es denn funktionieren würde. Habe zwei Feeds testweise eingerichtet, aber wenn ich auf den Aktualisieren-Button klick, bekomm ich eine hässliche Fehlermeldung (siehe Anhang). Wenn ich dann auf "Programm beenden" klicke, kommen nochmal drei Fehlermeldungen (hab mir nicht genau gemerkt was es alles war).
Nachdem ich dann also viermal auf "Programm beenden" geklickt hab, ist die Anwendung immer noch im Taskmanager aufgelistet und erzeugt dabei eine CPU-Auslastung von 50%...

Mit folgenden zwei Feeds hab ich's probiert:
http://feeds.feedburner.com/p-yusukekamiyamane?format=xml
http://feeds.feedburner.com/after-eden?format=xml

Damit müsstest du den Fehler denke ich reproduzieren können.

(Habe beim ersten Mal als der Fehler aufgetreten ist, auch einen Fehlerbericht abgeschickt, denke den müsstest du bekommen haben.)

Obwohl ich das Programm also noch nicht benutzen kann, hab ich schon einen Verbesserungsvorschlag. Das Anlegen von Feeds ist sehr mühselig. Ich muss über das Kontextmenü in die Einstellungen, dort dann noch in eine weitere Übersicht wechseln und kann dort dann erst die Feeds verwalten. Wäre es nicht viel bequemer, in die Button-Leiste, wo auch der Aktualisieren- und der "Fenster schließen"-Button ist, einen "Feed hinzufügen"-Button zu platzieren?

Ach, und du könntest ja noch machen, dass man das Programm nur einmal starten kann. Hat ja wenig Sinn, mehrere Instanzen davon offen zu haben.

Hoffe du kannst die Fehler beseitigen und mein Ersteindruck (Außen hui, Innen pfui) bestätigt sich nicht. 😉

Grüße,
Andreas

03.07.2010 - 16:29 Uhr

Beispielscreen der Kalender-Tray-Anwendung in Windows 7:

03.07.2010 - 16:29 Uhr

Beschreibung:

Wer schon einmal mit Windows Vista oder 7 gearbeitet hat, wird sicher wissen, dass die Tray-Anwendungen einen recht schicken Style haben (siehe Screen im nächsten Post). Wie man in diesem und diesem Thread sieht, gibt es seitens der Community auch eine gewisse Nachfrage, diesen Style nachzuprogrammieren. Und Maximilian hat mit seinem Projekt feedCarrier eine kleine Anwendung geschrieben, die einen ähnlichen Style benutzt.
Ich selber habe mich zu dem Zeitpunkt, als m0rius im verlinkten Thread nachgefragt hat, wie man diesen Style hinbekommt, einmal dran gemacht, das ganze umzusetzen. Gestern hab ich mich, nach dem ich den feedCarrier gesehen hab, wieder daran erinnert und meiner Beispielanwendung noch ein wenig Feinschliff verpasst und möchte euch diese hier zur Verfügung stellen.

**Features:***Form-Style wie die Windows-Vista/7-Tray-Anwendungen ohne ControlBox, aber mit Originalrahmen *Form ist nicht resizable *Form platziert sich automatisch in der unteren rechten Bildschirmecke *Verliert die Form den Fokus, verschwindet die Form (die Anwendung läuft aber weiter) *Abwärtskompatibilität bis Windows 2000 (.NET 2.0) *Ändert der User während der Laufzeit den Windows-Style von Aero auf Basic oder Klassisch (oder vice versa), passt sich die Form, genau wie Vorbildanwendungen von Vista/7 seine Position und Form an (grauer 1-Pixel-Rahmen, kein Abstand mehr zum Desktoprand; in diesem Anzeigemodus befindet sich die Anwendung auch auf Betriebssystemen unter Vista) *Die Schriftart der Form wird automatisch auf den Systemfont umgestellt, so bekommt man unter Vista/7 ein schöneres Schriftbild

Was noch fehlt:
Was ich nicht hinbekommen habe ist folgendes UI-Verhalten: Wenn man eine Windows-Trayanwendung wie z.B. den Kalender oder die Audio-Einstellungen per Klick auf das Tray-Icon öffnet, und anschließend das Icon wieder anklickt, schließt sich das Fenster. Bei meiner Projektvorlage schließt sich das Fenster kurzzeitig (durch den Fokus-Verlust), öffnet sich dann aber gleich wieder (durch den Klick auf das Tray-Icon). Ich habe leider keine elegante und zuverlässig funktionierende Lösung zu diesem Problem gefunden. Meine Versuche mit einem Timer waren nur mäßig befriedigend. Falls jemand eine gute Lösung parat hat oder findet, werde ich diese gerne integrieren.

Wer sich zudem mit Visual Studio Item bzw. Project Templates auskennt, kann gerne etwas entsprechendes mit dieser Beispielanwendung basteln.

Credits:
Dank geht an winSharp93, von dem die Lösung zum Problem mit den Resizing-Cursors stammt. 🙂
Danke auch an ErfinderDesRades, der die Lösung zum Problem beim De-/Aktivieren der Form bei Fokus-Verlust bzw. Tray-Icon-Klick (siehe oben) gepostet hat.

Updates:
29.07.10:*Fehler beim Deaktivieren der TrayApp durch Klick auf das TrayIcon (NotifiyIcon wurde nicht umgestellt) behoben. Danke an blutiger_anfänger *Form wird jetzt wieder ausgeblendet, wenn das Kontextmenü aufgemacht wird

Schlagwörter: Windows, Vista, 7, Seven, Tray Application, Tray-Anwendung

02.07.2010 - 23:33 Uhr

Textboxen haben eine Text-Eigenschaft, die den Inhalt der Textbox enthält. Die ToString-Methode gibt die String-Repräsentation des Objekts wieder.

Das sind übrigens Grundlagen.

01.07.2010 - 21:11 Uhr

wie wär's dann mit php? xD

nein ernsthaft, das ist ein total dämliches argument. c# ist schon gut so, wie es ist.

30.06.2010 - 09:28 Uhr

Das Beispiel hinkt auch ein wenig.
Bei var wtf = connection.CreateCommand() sehe ich überhaupt nicht, von welchm Typ die Variable "wtf" ist.

ich finde nicht, dass mein beispiel hinkt. und gerade dein gegenbeispiel unterstützt ja noch meine aussage. nämlich, dass man sich bei verwendung eben auch gedanken um die variablenbezeichnung machen muss (und bei eigenen klassen eben auch um die methodennamen). wenn ich bei uns im code so eine zeile sehen würde wie du sie gepostet hast (eine variable namens "wtf"), wäre das sofort ein refactoring-schritt für mich. ernsthaft, sowas darf's im code nicht geben. außerdem: wenn ich einen codeausschnitt lese, bei dem eine variable verwendet wird, dessen initialisierung man in diese teil nicht sieht, hab ich wieder das gleiche problem. einen gescheiten namen brauch ich also so oder so. und var zwingt einen eben schon direkt beim initialisieren der variable dazu. 🙂

29.06.2010 - 21:43 Uhr

In dieser Hinsicht hast du recht, aber wenn ich eine Variable deklariere und diese z.B. durch eine Methode initialisiert wird, ist der genaue Typ aussagender (Auch wenn man es mit der Signatur der Methode herausfindet). 😄

das ist wieder ein anderes beispiel.

aber selbst bei methoden benutze ich var. warum? naja, erstens weil ich mir var mal angewöhnt habe und zweitens nie wirklich probleme damit hatte. ich meine, leserlich ist der code ja nicht unbedingt dann, wenn du alle typen und alle internen details weißt, sondern wenn man, je nach abstraktionsstufe auf der man sich befindet, schnell den überblick bekommt, WAS der code macht. dafür braucht es eher semantische klarheit denn syntaktische. und da spielen dann die methoden- und vaariablenbezeichnungen eine größere rolle.

beispiel:

var connection = new SqlConnection(connectionString);
var command = connection.CreateCommand();

welchen vorteil hat hier diese variante?

SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = connection.CreateCommand();

ich habe ein connection-objekt und ein command-objekt. von welchem konkreten typ die sind, interessiert mich an dieser stelle einfach nicht. weil ich nämlich weiß, was ich in diesem rahmen (ado.net) mit den objekten machen kann.

29.06.2010 - 21:25 Uhr

wo ist das ansichtssache? wenn du in EINER zeile beim erzeugen eines objekts dessen typ ZWEIMAL drinstehen hast, ist das dann keine redundanz? ob es einem so oder so besser gefällt mal außen vorgelassen, aber die redundanz (die implizit unnötig ist) kannst du ja kaum von der hand weisen? 😁

29.06.2010 - 21:14 Uhr

Obwohl var meines Erachtens die Lesbarkeit des Codes verschlechtert.

finde ich nicht. eher im gegenteil. was bringt es mir auch, den typ mehrfach in einer zeile zu sehen, einmal bei der deklaration und dann beim erzeugen des objekts? unnötige redundanz ist das..

28.06.2010 - 23:16 Uhr

Aber ich will nicht für jedes Label ein Event erstellen.
Und warum nicht?

vermutlich verwechselt er hier event mit der methode, die das/die event(s) behandelt...
klingt jedenfalls ein bisschen nach dem anfänger-denken, also, dass man glaubt, dass die methode, die der designer einem generiert, wenn man auf ein control doppelklickt, das event selbst ist.

26.06.2010 - 16:15 Uhr

dass das ganze nicht so gaz stimmt wie das im Filmchen gezeigt wird.

Naja, der Kerl sagt ja: "Portability has never been a priority for Microsoft, and you know it."

was ja auch nicht falsch ist. Schließlich...

ham wohl noch nie was von mono gehört^^

wird das ja nicht von Microsoft entwickelt. 😉

25.06.2010 - 13:40 Uhr

Ich hab keine Ahnung, ob ich damit jetzt alle Eventualitäten drin habe. Aber genau darin liegt das problem. wenn ich mir alle Eventualitäten überlege, fange ich diese Sachen bereits bei der Realisierung ab.

Niemand denkt immer an alle Eventualitäten. Und gerade deshalb sollte man doch auch Tests schreiben. Bei der Erstimplementation einer Funktionseinheit wirst du nur so viele Fälle abdecken, die dir einfallen, geht ja nicht anders. Wenn dann aber die Software irgendwann in Betrieb ist und bei irgendeinem Anwender tritt aufgrund ungewöhnlicher Eingaben oder Eingaben, an die du nicht gedacht hast, ein Fehler auf, dann kannst du speziell diesen Fall mit einem Test abdecken und stellst sicher, dass der Fehler ein für alle mal behoben ist. Nicht, dass bei einer weiteren Änderung am Code der Fehler noch mal versehentlich eingebaut wird.

25.06.2010 - 00:36 Uhr

Hallo Rainbird,

Den Begriff IBC finde ich sehr schwammig, da er in den meisten EBC-Diskussionen für alles benutzt wird, was nicht EBC ist. Insofern ist IBC nicht wirklich genau definiert. Alles was "ganz normal" andere Methoden direkt aufruft.

also bei dem Begriff IBC (steht übrigens für Injection Based Component und nicht für Interface Based Component, wenn auch Interfaces bei IBCs, so wie Ralf sie formuliert, eine tragende Rolle spielen) habe ich zumindest eine ziemlich konkrete Vorstellung. Der unterschied von IBCs zu EBCs ist die Art, wie die Komponenten miteinander kommunizieren/in Abhängigkeit zueinander stehen. Bei IBCs sind die Abhängigkeiten fest über Verweise geregelt. Wenn eine übergeordnete Komponente mehrere Komponenten zusammenfasst, bzw. diese benutzt/von ihnen abhängig ist, äußert sich das so, dass für jede benötigte Komponente ein Konstruktorparameter vorgesehen ist. In der Regel werden diese Komponente über ein DI-Framework erzeugt, daher der Name IBC. Bei EBCs gibt es diese harten Abhängigkeiten eben nicht mehr. Wobei Ralf ja in seinem Blog schon viel zum Thema Komponentenorientierung allgemein geschrieben hat, ohne diese explizit IBCs zu nennen. Der Begriff entstand, wenn ich das richtig mitverfolgt habe, erst, nachdem die EBCs ins Spiel kamen, als Begriffsabgrenzung eben. Hoffe das klärt ein paar Sachen.

24.06.2010 - 22:57 Uhr

Kann ich mir nicht vorstellen. Ich bin ziemlich überzeugt davon, dass es für EBCs über kurz oder lang einen vernünftigen Designer und Codegenerator geben wird, der dann gerade in großen Projekten sehr wichtig sein wird. Denn wo Dinge automatisiert werden, sinkt die Gefahr, Fehler einzubauen die sich schonmal gerne einschleichen können. Wir sind nunmal alle Menschen und machen Fehler, das ist ja auch ok, lässt sich nunmal nicht ändern.
Und gerade das Erzeugen der Code-Grundgerüste für die Komponenten ist ein Prozess, der eine Menge ausmacht. Ich meine, wenn man sich an die best practices der komponentenorientierten Entwicklung hält und jede Komponente in eine eigene Solution packt, wäre ich froh, wenn ich diese nicht von Hand im VS erstellen müsste.

(Und übrigens sind meine Erfahrungen gerade mit dem WinForms-Designer bisher sehr gut. Wenn ich da an die Java-Entwicklung unter Eclipse in der Berufsschule zurückdenke bei der wir keinen Designer hatten... Neee, das muss echt nicht sein. 😉 )

24.06.2010 - 19:36 Uhr

Zum Thema Overhead sei vielleicht noch gesagt, dass der gesamte Verdrahtungscode (und z.B. auch Grundgerüste der zu implementiertenden Komponenten) später einmal per Designer generiert werden soll. Insofern würde ich Optimierungen bzgl. des Overheads nicht unbedingt anstreben. Klar ist es derzeit noch nervig, aber seit sich das Thema EBC hier im myCSharp-Forum rumspricht, sehe ich rosige Zeiten auf das EBC-Konzept zukommen. 😉

24.06.2010 - 09:33 Uhr

Zur Not kann man die Projektmappen-Datei auch von 2008 wieder auf 2005 downgraden: http://www.emmet-gray.com/Articles/ProjectConverter.htm