Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von LonelyPixel
Thema: Visual Studio 2013 Product Key kaufen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ok, danke für das Feedback. Dann wird das mit den 30€-Angeboten wohl nicht so legal sein, wie die behaupten. Das sind etliche Seiten, die aber ähnlich aufbebaut sind, vermutlich gehören die dem selben "Veranstalter"...

Gibt's eigentlich die Premium-Edition nur mit dem MSDN-Abo? Pro gibt's ja auch ohne. Nur so aus Interesse. Ich muss dann eh erstmal klären, welche Edition wir brauchen. Das kann noch eine Weile dauern, aber jetzt weiß ich schonmal mehr.

Thema: Visual Studio 2013 Product Key kaufen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

ich bin grad am überlegen, wo man als einzelner Entwickler oder für kleine Teams am besten Visual Studio 2013 herbekommt. Einerseits gibt es ja die Retail-Packungen mit Medium für 500 € (Professional) oder 7000 € (Premium + MSDN). Zu finden im Preisvergleich bei einigen deutschen Händlern. Dann finde ich aber diverse dubiose Webseiten, auf denen man Product Keys für Pro/Prem/Ultimate für etwa 30 € kaufen kann, ohne Medium, teilweise mit Download-Link. Das sollen alles Originalschlüssel sein.

Dieser Preisunterschied ist ja enorm. Aber wenn man weiß, dass OEM-Versionen von Windows oder Office auch bloß wenige Euro kosten und VS in manchen Abos und für manche Zielgruppen kostenlos dabei ist, scheint das Angebot nicht ganz abwegig.

Wer kennt sich mit dieser unübersichtlichen Lage aus und kann mir empfehlen, was ich woher bekomme? Es geht nur um VS 2013, keine älteren Versionen, und nur in Professional oder Premium. Eine MSDN-Subscription für Windows, Office etc. wird nicht benötigt. Und eine DVD eigentlich auch nicht, ein ISO-Image zum Herunterladen ist genauso gut.

Thema: Wird es flimmern? (WPF vs. WinForms)
Am im Forum: GUI: WPF und XAML

Hallo,

ich möchte eine neue Anwendung erstellen und bin mir unsicher, ob ich Windows Forms oder WPF verwenden soll. Mit Windows Forms kenne ich mich aus, und ich weiß auch, was alles nicht ordentlich funktionieren wird. Von WPF habe ich nur Grundlagen-Ahnung, d.h. ich habe alle Konzepte mal gesehen, könnte sie aber nicht auswendig hinschreiben oder sinnvoll einsetzen. WPF ist ja irgendwie wahnsinnig kompliziert, nicht nur die Konzepte sondern auch die vielen neuen Sprachen (XAML, {Binding}-Schreibweise usw.).

Was mir bei Windows Forms an komplexen Oberflächen gar nicht gefällt ist, dass es flimmert. Wenn ich ein paar Layout-Panels verwende und dann in einer Tabelle eine Zeile ein- oder ausblende, dann rutscht der Rest hoch oder runter, alles wird neu gezeichnet, und erst dann wird die Größe der verrutschten Controls an den neuen Platz angepasst. Oder ein abgeleitetes Panel zeichnet zuerst die Hintergrundfarbe und lässt an den Stellen, wo noch ein Label hinkommt, die Farbe stehen, und irgendwann kommt dann auch das Label auf den Schirm. Das sieht alles sehr unschön aus.

Da WPF ja zuhauf dieser Effekte und Verschachtelungen verwendet, außerdem alles animieren kann, da vermutlich ein völlig neu entwickeltes Darstellungskonzept (kein WM_PAINT mehr) zum Einsatz kommt, und noch dazu alles irgendwie GPU-beschleunigt sein soll, habe ich die Hoffnung, dass derartige Flimmereffekte bei WPF nicht mehr auftreten. Mangels jeglicher Erfahrung kann ich das aber aktuell nicht prüfen. Wer kennt sich damit aus?

Außerdem dauert es extrem lange, wenn ich viel Text abmessen muss, um in einer Tabelle die Spalten automatisch zu verbreitern. DataGridView mit AutoSize-Columns und ein paar tausend Zeilen sind nicht mehr interaktiv. Geht das mit WPF schneller?

Welche Vorteile habe ich denn sonst mit WPF gegenüber WinForms? Bessere OpenType- und Unicode-Unterstützung bei der Textdarstellung hab ich mal gelesen. Die ganzen tollen Animationen. Noch irgendwas nützliches, wichtiges?

Und wo finde ich verständliche Tutorials, die mir Data Templates, Data Binding und die Event-Geschichten erklären? Was Google bislang so gefunden hat, hat mich immer mit vielen Fragezeichen zurückgelassen. Teilweise war der Code auch sehr unvollständig, so dass ich nichtmal selbst experimentieren konnte. Außerdem verwenden da draußen scheinbar alle VS2008, von VS2010/.NET 4 sieht man kaum etwas.

Thema: Welche Technologie für Vektorgrafikdarstellung?
Am im Forum: Grafik und Sound

Hallo,

Ich mache mir derzeit ein paar Gedanken darüber, eine Anwendung zu schreiben, die mit größeren Mengen an Vektorgrafiken arbeitet. Die Grafiken werden nach bestimmten Stilen dargestellt und können wie in einem Zeichenprogramm bearbeitet, gezoomt usw. werden. Manche der Objekte sind klein, manche können sehr groß sein und müssen dementsprechend am Viewport beschnitten werden. Außerdem müssen Texte an Pfaden entlang dargestellt werden, das sollte also möglichst einfach realisierbar sein.

Die Programmoberfläche (also das um den Zeichenbereich herum) sollte möglichst schick und modern aussehen. (Das kann man jetzt mit dem Aero-Stil hinbekommen oder alles in einem dunkleren "Graphit"-Design machen, bin ich offen.)

Dabei muss aber die Performance von allem gut sein. Es darf nicht ständig irgendwo hakeln und ruckeln. Und wenn das Rein- und Rauszoomen noch flüssig animiert werden kann (so ähnliche wie z.B. bei Google Maps im Browser), wär's umso besser.

Ich kenne mich mit Windows Forms ganz gut aus und habe da schon einiges mit aufwändigem Zeichencode erstellt. WPF und DirectX sind mir ziemlich fremd, ich kenne zwar die theoretischen Konzepte, habe aber keine praktische Erfahrung damit.

Ich habe nun etwas gegoogelt und dabei kam raus, dass WPF wohl noch so einige Fehler hat und die Performance noch recht unausgegoren sein soll, gerade was die CPU-GPU-Schnittstelle angeht. Es beschweren sich wohl viele über unzureichende Performance mit WPF und erst recht mit 3D. Das Direct2D-API soll wohl besser sein, scheint aber noch sehr neu zu sein und nicht so einfach für .NET verfügbar.

Was verwende ich nun am besten? WPF für alles? WPF und Direct2D? WinForms für alles? WinForms und Direct2D oder ein anderes DirectX? OpenGL? Wer hat da ein paar Hinweise für mich?

Thema: UserControl in einem Tab mit UseVisualStyleBackColor
Am im Forum: GUI: Windows-Forms

Zitat von Programmierhans
Und wenn Du genau mit dieser Fehlermeldung suchst (z.B: Google) dann findest Du auch den Grund...

Sorry, dieser Beitrag war nicht hilfreich. Nach einigen Suchergebnissen der deutschen und englischen Formulierung des Fehlers habe ich keine Information gefunden, die du gemeint haben könntest.

Ich habe vorerst eine andere Lösung gefunden. In OnPaintBackground verwende ich VisualStyleRenderer.DrawParentBackground, um den Hintergrund zu zeichnen. Das funktioniert zumindest in Windows 7 mit allen Levels von Themes (von Glass bis ganz aus) und in TabPages und direkt in Forms. Der Code sieht dann so aus:


protected override void OnPaintBackground(PaintEventArgs pevent)
{
	if (VisualStyleRenderer.IsSupported)
	{
		// The VisualStyleElement does not matter, we're only drawing the parent's background
		VisualStyleRenderer r = new VisualStyleRenderer(VisualStyleElement.Window.Dialog.Normal);
		r.DrawParentBackground(pevent.Graphics, ClientRectangle, this);
	}
	else
	{
		base.OnPaintBackground(pevent);
	}
}

Thema: UserControl in einem Tab mit UseVisualStyleBackColor
Am im Forum: GUI: Windows-Forms

Seit wann unterstützen Windows-Forms-Controls denn echte Transparenz? Soweit ich weiß, muss jedes Control sein eigenes Rechteck vollständig zeichnen, sonst bleiben dort Fragmente stehen oder es wird schwarz.

Beim Versuch, BackColor auf Transparent zu setzen, bekomme ich folgende (bekannte) Fehlermeldung: "Das Steuerelement unterstützt keine transparenten Hintergrundfarben."

Thema: UserControl in einem Tab mit UseVisualStyleBackColor
Am im Forum: GUI: Windows-Forms

Ich habe ein user control das transparente Bereiche im Hintergrund hat. (Es soll zumindest so aussehen.) Die OnPaintBackground-Methode habe ich nicht überschrieben, es wird also immer der graue Hintergrund angezeigt. Wenn ich das Control jetzt aber in einer TabPage einfüge, ist der Hintergrund ja nicht grau, sondern weiß. Mein Control hat aber immer noch den grauen Hintergrund. Wie bekomme ich das jetzt hin, dass sich der Hintergrund des UserControls nach dem des Parent richtet?

Erschwerend kommt vllt. noch hinzu, dass sich das UserControl in einem anderen CustomControl und dort in einem TableLayout befindet. Das ändert aber alles nichts an der Hintergrundfarbe des Tabs.

(Windows 7 mit dem Aero-Theme, sollte aber auch XP Luna betreffen)

Thema: In Aero Glass zeichnen
Am im Forum: Grafik und Sound

Also, danke für die Links, aber da war leider nichts neues dabei.

Ich hab nun noch etwas weiter gefrickelt und hab zumindest rausgefunden, wie man richtig zeichnen kann. Dazu braucht man folgendes:


protected override void OnPaintBackground(PaintEventArgs pevent)
{
	pevent.Graphics.Clear(Color.FromArgb(0));
}
Danach hat man eine saubere leere Glass-Fläche, auf die man dann mit den gewohnten Zeichenmethoden zeichnen kann (Linien, Flächen, Bilder, alles kein Problem, auch schwarz).

Übrig bleibt nur noch der Text. Mit TextRenderer sieht man sehr wenig bis gar nichts, je nach eingestellter Farbe. In keinem Fall aber das, was man will. In folgendem Screenshot sind jetzt untereinander folgende Text-Darstellungsmethoden gezeigt:

* DrawThemeTextEx (ohne Glow; mit käme das raus, was man erwarten würde)
* Graphics.DrawString
* TextRenderer.DrawText

Im 2. Bild passt der Text nicht rein, weil ich mit TextRenderer.MeasureText ausmesse und nicht mit Graphics.sonstwas. Da sieht man auch, dass der Text größer wird.

Thema: In Aero Glass zeichnen
Am im Forum: Grafik und Sound

Ich hab nochmal weiter gesucht, aber ich find einfach keinen Beispielcode, der irgendwas in Client-Glas zeichnet. Ich finde nur Artikel darüber, wie man dort WinForms-Controls reinsetzen kann, aber nichts selbstgezeichnetes. Davon sehe ich immer nur Screenshots, aber keinen Code.

Meine Probleme sind jetzt konkret folgende:

* Was muss ich im Hintergrund zeichnen (OnPaintBackground)? Wenn ich in der Methode gar nichts mache, wird großer Müll angezeigt aber es ist zumindest stellenweise das Glas zu sehen. Beim Neuzeichnen bleiben natürlich Reste des vorherigen Inhalts stehen. Wenn ich schwarz oder BackColor fülle, ist genau diese Farbe zu sehen aber kein Glas. Wenn ich Transparent fülle, hat das den gleichen Effekt, wie wenn ich gar nichts in der Methode mache. Wenn ich die Methode nicht überschreibe, ist es als ob ich in BackColor füllen würde.

* Wie bekomme ich schwarzen Text sichtbar? Ich möchte wirklich sehr gerne den TextRenderer verwenden, weil das die einzige Möglichkeit ist, Text so zu zeichnen, wie das der Rest von Windows auch tut. Mit Graphics.DrawString sieht es immer ein kleines bisschen anders aus. Und mit Label-Controls wollte ich da jetzt nicht anfangen, zumal die intern auch nur den TextRenderer verwenden (laut Reflector).

Thema: In Aero Glass zeichnen
Am im Forum: Grafik und Sound

Ich weiß nicht, ob das so gut rübergekommen ist, aber so soll es mal aussehen:

Edit: Dass die Tabs hier in der Caption Bar drinstecken, brauche ich nicht. Das wird wohl nochmal ne Ecke komplizierter und unter XP ist dann eh Schluss. Aber wenn die Tabs bei mir so aussehen würden, wär das toll.

Thema: In Aero Glass zeichnen
Am im Forum: Grafik und Sound

Ne, keine Bilder. Das sind Linien, die ich aus einem Point-Array als GraphicsPath zusammensetze. Die genaue Position der Punkte (pro Tab-Header sind das 14 Stück, 7 links und 7 rechts) ist etwas Tüftelei, aber mit etwas geometrischem Geschick schon machbar. Dann setze ich SmoothingMode auf AntiAlias und fülle erst den Hintergrund mit FillPath, zeichne dann den Schatten (beim aktiven Tab) bzw. das Highlight (beim inaktiven Tab) mit einer leicht veränderten Punktmenge und zum Schluss kommt der eigentliche Rand drüber mit DrawPath.

Wenn das alles gemalt ist, setze ich halt mit TextRenderer noch den Text oben drauf.

Der Inhalt der einzelnen Tab-Seiten sind UserControls. In diesem Test hab ich nur eins davon, das halt für alle Seiten jeweils einmal instantiiert wird. Deshalb sehen die alle gleich aus (kommt auf den Screenshots nicht so raus... ;-)). Der Button ist aber immer so weit weg von der oberen linken Ecke.

Ich bin mir im Übrigen auch nicht sicher, ob mir das DrawThemeText was nutzt, da ich ja gar nicht (mit Glow und so) direkt auf Glas schreiben möchte, sondern ganz normal auf eine Fläche, die ich vorher gefüllt habe. Später kommen dann noch Icons und ein Close-Button (den zeichne ich wohl auch mit Graphics-Methoden dazu) dazu. In diesen Icons kann auch schwarze Farbe vorkommen, das sollte dann auch sichtbar bleiben. Aber so haut das ja noch überhaupt nicht hin.

Thema: In Aero Glass zeichnen
Am im Forum: Grafik und Sound

Mhm, gleich mal ausprobieren...

und was mach ich mit dem Hintergrund? Der ist ja noch alles andere als ordentlich. Wo der Button-Rest ganz oben links herkommt, hab ich absolut keine Ahnung. Da ist gar kein Button.

Update: Das Zeichnen der Linien haut in meinem Beispiel aber auch noch nicht hin. Da sind total hässliche dunkle Ränder rum. Wo kommen die denn her?

Thema: In Aero Glass zeichnen
Am im Forum: Grafik und Sound

Ach ja, und so sieht es ohne den ganzen DWM-Schnörkel aus:

Thema: In Aero Glass zeichnen
Am im Forum: Grafik und Sound

Das hat gar keinen Unterschied gemacht. Ich hab davon gelesen, aber nur im Kontext mit Windows-Forms-Controls, die ich ja nicht verwende. Ich hab mal 2 Screenshots gemacht. Im ersten wird in OnPaintBackground nichts gemacht und im 2. wird die Methode gar nicht überschrieben.

Thema: In Aero Glass zeichnen
Am im Forum: Grafik und Sound

Hallo,

ich hab heute mal probiert, was in den Aero-Glass-Bereich eines Fensters zu zeichnen. (Windows 7, VS 2008 SP1, C#) Dazu habe ich die Funktion DwmExtendFrameIntoClientArea aufgerufen und mir oben etwas Glass hinmontiert. Das klappt ja ganz gut, aber das Zeichnen dadrin geht schief. Ich kann mir jetzt aussuchen, ob der Hintergrund das übliche Grau sein soll (also das Glas vollständig übermalt), oder ob alles was in schwarzer Farbe gezeichnet wird, durchsichtig sein soll, oder ob alles schwarz wird. Es haut einfach nicht hin. Einfache Codebeispiele hab ich keine gefunden.

Konkret möchte ich einen Tab-Header in die erste Zeile des Fensters setzen. Den zeichne ich komplett selbst. Die Umrandung der einzelnen Tabs ist teilweise transparent (leichter Schatten), der Text im Inneren wird mit TextRenderer.DrawText angezeigt. Im Prinzip sieht das so aus wie in Google Chrome. Ohne Glas funktioniert das einwandfrei, nur mit nicht.

Kann mir da jemand erklären, worauf ich alles achten muss? Insbesondere würde mich interessieren, was ich in OnPaintBackground machen muss und wie ich schwarzen Text auch zu sehen bekomme.

Thema: .NET COM DLL Interop...
Am im Forum: Rund um die Programmierung

Hallo mal wieder,

ich sitze grad an einem Problem, das sich irgendwo zwischen .NET, COM, einer DLL und ein paar Schnittstellen befindet, ich weiß nur noch nicht genau wo.

Die Aufgabe lautet, eine DLL mit einer Funktion zu erstellen, die ein COM-Objekt zurückgibt. Die COM-Schnittstellen sind nicht im System registriert, müssen also im "Server" und im "Client" unabhängig voneinander definiert werden. Der "Client" ist eine unverwaltete Windows-Anwendung, die die DLL als Plug-in lädt. Der "Server" ist eine C#-DLL, natürlich verwaltet. Dazwischen befinden sich die CLR, ein CCW (COM Callable Wrapper) und ein Haufen Interop Marshaling als Komponentenkleber.

Ich habe bereits eine C#-DLL, die Funktionen exportiert*. Ich habe die Schnittstellen in C# und exemplarisch für die unverwaltete Anwendung in C++. Ich habe C++-Code, der die DLL lädt und über eine Funktion ein COM-Objekt abruft. Unter geeigneten Umständen kann der C++-Code auch eine Methode auf dem COM-Objekt aufrufen, ohne dass es den Stack zerbröselt. Aber leider nicht immer. Und sowas wie QueryInterface geht noch gar nicht.

Dies ist ein interdisziplinäres Problem, das Kenntnisse in C#, .NET CLR, C++, DLLs, COM und *Interop erfordert.

Ich habe eine Projektmappe erstellt, die eine C#-DLL und ein C++-MFC-Programm enthält, um dieses Zusammenspiel zu demonstrieren. Die konkreten Probleme, die bei mir auftreten, sind in ComClientDlg::OnInitDialog() kommentiert. In dieser Methode befindet sich der ganze Testcode zwischen den beiden Balken.

Mag sich das vielleicht mal jemand anschauen? :)

Bei Fragen kann ich haufenweise weiterführende Links zu den verwendeten Techniken liefern, die müsste ich jetzt bloß alle zusammensuchen.

*) Zum Exportieren von statischen Methoden als DLL-Funktionen wird das Programm NetDllExport verwendet, das ich geschrieben und in den Buildprozess integriert habe. Es disassembliert im wesentlichen die compilierte DLL, nimmt ein paar Änderungen im IL-Code vor und baut es wieder zusammen. Es werden alle öffentlichen statischen Methoden der Klasse DllExport exportiert, der Namespace ist egal. Wer mag kann sich das Programm ja im Reflector anschauen.

Thema: ToolTip und Mausbewegungen
Am im Forum: GUI: Windows-Forms

Also den ToolTip unter [edit: neben, seitlich versetzt] dem Mauszeiger anzeigen? Hm, ich fand es schön, den ToolTip genau da anzuzeigen, wo der abgeschnittene Text steht.

Wenn man z. B. in der MSDN-Hilfe im Index die Maus über einen abgeschnittenen Text fährt, erscheint der Text ja auch genau über dem Listeneintrag, verschwindet aber genau dann, wenn man das Rechteck des Listeneintrags verlässt. Die Maus über dem ToolTip blendet es nicht aus und bei Alt+Tab bleibt es nicht stehen. Genauso hätte ich das auch gerne. :-)

Thema: ToolTip und Mausbewegungen
Am im Forum: GUI: Windows-Forms

Hallo,

ich schreibe gerade ein UserControl, in dem selbstgezeichnete Rechtecke mit einem Text drin angezeigt werden. Die Größe der Rechtecke ist vorgegeben und es kann daher vorkommen, dass der Text nicht hineinpasst. Dann soll beim Drüberfahren mit der Maus über das Rechteck ein ToolTip erscheinen, der den ganzen Text anzeigt.

Soweit geht das ja alles. Nur gibt es das Problem, dass dieser ToolTip immer für die vorgesehene Zeit stehen bleibt, auch wenn mittlerweile mit Alt+Tab das Fenster gewechselt wurde. Daher habe ich einen weiteren Event-Handler hinzugefügt, der den ToolTip wieder ausblendet, sobald die Maus das UserControl verlässt.

Leider verlässt die Maus das UserControl formell auch dann, wenn sie über dem ToolTip ist. Oder andersherum: wenn das ToolTip unter der Maus erscheint. In diesem Fall wird das ToolTip sofort wieder ausgeblendet, um es eine Sekunde später (mein Timer) nochmal zu versuchen.

Da ich an der Stelle später noch längere Texte anzeigen möchte, wäre es aber sehr ungünstig, wenn die nicht größer als das Rechteck sein dürfen. Es ist aber auch blöd, wenn der ToolTip länger angezeigt bleibt als es sinnvoll erscheint. Was kann man da tun?

Da die ToolTip-Klasse keine Mouse-Ereignisse anbietet, kann ich auch nicht darauf reagieren...

Thema: LinkLabel.TabStop = false hat keinen Effekt
Am im Forum: GUI: Windows-Forms

Stimmt, das geht. Es geht aber nicht mehr, sobald man die Text-Eigenschaft des LinkLabels setzt. Dann ist TabStop wieder effektiv true. Interessant ist, dass man erst Text und danach TabStop setzen muss, dann funktioniert es tatsächlich wie gewünscht... Anscheinend wird das Control beim Ändern von Text intern so neu erstellt oder zurückgesetzt, dass TabStop neu gesetzt werden muss, was das Control intern aber verpennt, obwohl man annehmen sollte, dass es das tut. Naja, danke für den Hinweis...

Thema: LinkLabel.TabStop = false hat keinen Effekt
Am im Forum: GUI: Windows-Forms

Hi,

ich möchte in meiner WinForms-Anwendung ein LinkLabel weiterverwenden, aber so, dass es nicht mehr in der Tab-Reihenfolge vorkommt. Die LinkLabels sind zwischen mehreren TextBoxen verteilt. Die Funktion der LinkLabels habe ich im Kontextmenü der TextBoxen dupliziert, sie ist also nach wie vor erreichbar. Für Mausschubser ist das LinkLabel aber trotzdem bequemer.

Deshalb habe ich LinkLabel.TabStop auf false gesetzt. Leider hat das überhaupt keinen Effekt. Die LinkLabels werden trotzdem von Tab angesprungen. Dass diese Eigenschaft gut versteckt ist und in keiner Liste auftaucht, habe ich bereits mehrfach gelesen und kann ich auch nachvollziehen. Dass es nach "blinder" Eingabe trotzdem funktionieren soll, habe ich auch oft gelesen, das stimmt aber nicht. Haben die das überhaupt mal ausprobiert?

Laut .NET Reflector überschreibt LinkLabel die Eigenschaft Label.TabStop nicht, und Label verändert die Funktion von Control.TabStop auch nicht, weshalb ich mir nicht erklären kann, warum es trotzdem nicht funktioniert. Jemand ne Idee?

Thema: Wie geht DataGridView mit DB-Binding?
Am im Forum: GUI: Windows-Forms

DataSet.Read/WriteXML hat keinen Effekt, der schreibt zwar die Datei, aber sie ist leer.

Ich hab das mit dem DataSet jetzt aufgegeben. Dieses Tutorial redet ewig im Kreis rum und macht alles mögliche im Schneckentempo, da wird man ja nie fertig. Ich will auch keine verdammte Access-Datei verwenden und wie man woanders eine neue Datenquelle anlegt, wird gar nicht beschrieben. Ich hatte halt auf ein paar Code-Zeilen gehofft, an denen man erkennen kann, wie es geht und die man dann verwenden könnte. Anscheinend ist es aber doch nicht so einfach. Da bin ich schneller fertig, wenn ich's gar selber mach. Da weiß ich wie es geht und es geht vor allem schnell und genauso wie ich es haben will...

Thema: Wie geht DataGridView mit DB-Binding?
Am im Forum: GUI: Windows-Forms

Danke für die Hinweise. Werd ich demnächst mal reinschauen.

Ich wollte zuerst eine XML-Datei verwenden, weil es wirklich nicht viele Daten sind (jeden Tag ein Datum, 3 Zeiten, eine Zahl und ein kurzer Text, und das über wenige Jahre wenn's hochkommt; keine Sortierung oder Filterung nötig). Aber im VS Designer stand XML nicht zur Verfügung. Also war die Compact-Datenbank von MS das naheliegendste. (Meine nächste Erfahrung diesbzgl. ist mit SQLite.NET.)

Woher soll .NET wissen, dass es meine Änderung speichern soll? Naja, ich habe die Verbindung zur DB angelegt und Bearbeiten/Hinzufügen im DataGrid aktiviert. Warum sollten Änderungen (nach dem Verlassen der Zeile, siehe Icon ganz links, so wie in MS Access) nicht auch gespeichert werden.

Nein, ich meinte schon "ich kann damit nichts anfangen". Deshalb, weil ich den Eindruck hatte, dass mit der Einrichtung im Designer alles erledigt wäre. Es sah ja auch so aus, nur dass nichts gespeichert/geladen wurde. Der ConnectionString ist z.B. bereits in einem der Konfigurationsdialoge aufgetaucht. Warum sollte ich ihn nochmal im Code eintragen? Da man alles komfortabel und manuell machen kann, sah es für mich so aus, als wäre in der MSDN der "manuelle" Weg beschrieben. Aber das werd ich ja noch erfahren, wenn ich mich da mal durchlese.

Thema: Wie geht DataGridView mit DB-Binding?
Am im Forum: GUI: Windows-Forms

Hallo mal wieder,

ich will mir hier grade eine ganz einfache und kleine Anwendung zusammenstöpseln, in der ich Fahrtzeiten eintrage, die mir dann mit meiner eigenen Darstellungslogik visualisiert werden. Excel ist für diesen Zweck völlig ungeeignet, also muss ein eigenes Programm her. Da ich nicht viel Arbeit da reinstecken wollte, dacht ich mir, ich probier mal die volle Datenautomatik im VS2008 aus (mit Windows Forms, .NET 3.5).

Mein Form hat jetzt ein DataGridView, als Datenquelle hab ich mir eine SQL-Server-Compact-Datenbank erstellen lassen. Über den Dataset-Designer habe ich dort eine Tabelle angelegt. Die konnte ich als Datenquelle im DataGridView auswählen und er hat mir die Spalten eingefügt.

Wenn ich das Programm starte, kann ich Daten eingeben. Aber nach dem Beenden des Programms sind die weg und kommen beim nächsten start auch nicht wieder. Muss ich da irgendwas manuell laden oder speichern? In der MSDN stehen nur Codebeispiele, die alles manuell machen, inkl. ConnectionString. Ich gehe davon aus, dass ich damit nichts anfangen kann. Im Web wird auch nur auf diese MSDN-Doku verwiesen. Hier im Forum habe ich diese Frage nicht gefunden. Wie geht das also nun? Bislang war's ja ganz einfach, aber es funktioniert halt bloß leider nicht.

Bislang habe ich das DataGridView nur "manuell" verwendet, also Zeilen per Code mit Inhalten gefüllt, die ich mit eigenen SQL-SELECT-Abfragen aus einer Datenquelle gelesen habe. Da musste ich sie auch mit UPDATE/INSERT selbst wieder reinschreiben. Das wollte ich mir nun alles sparen. Soll ja wohl irgendwie gehen, nehm ich mal an.

Thema: XML-Knoten mit XPath-Ausdruck ändern/einfügen
Am im Forum: Datentechnologien

Hallo,

ich habe nun mal wieder recht viel mit XML-Daten zu tun (Excel 2003 XML) und stelle wieder mal fest, dass es recht aufwändig sein kann, mit etwas komplexeren XML-Dokumenten zu arbeiten, Werte zu finden und zu lesen oder Elemente und Attribute an bestimmten Stellen einzufügen. Das Auslesen klappt mit XPath-Ausdrücken schon ganz gut. So kann man locker über mehrere Ebenen springen, Attribute adressieren und global nach ganz bestimmten Konstellationen suchen (z.B. ss:Worksheet/ss:Table/ss:Row/ss:Cell[@ss:StyleID="s21"] oder o:Color/o:Index[text()=18]).

Wenn man nun aber dafür sorgen will, dass an einer bestimmten Stelle im XML-Dokument ein bestimmter Wert zu finden ist, muss man sich wieder mühsam vom Anfang dorthin hangeln, immer schön prüfen, ob das nächste Element existiert und es ggf. erst anlegen und einfügen, dann weiter zum nächsten Knoten usw., bis man letztlich endlich den Text oder Attributwert setzen kann. Hier wäre es viel angenehmer, wenn man einfach einen XPath-Ausdruck angibt, dem man einen Wert zuweisen will, und wenn der Pfad dorthin nicht vollständig existiert, wird er eben angelegt - mit allen Zwischenknoten und Attributwerten, die angegeben wurden. (Bestimmte Mengenausdrücke (Union, Größe der Ergebnismenge > 1), NOT- oder OR-Bedingungen sollte man hierfür ausschließen, da das Verhalten beim Anlegen der Struktur mglw. undefiniert wäre. Im Normalfall ist diese Einschränkung aber nicht relevant.)

Kennt jemand eine Möglichkeit, sowas zu machen? Hier im Forum und in der MSDN-Bibliothek habe ich nichts gefunden. Selber machen bedeutet einen XPath-Parser zu schreiben und damit (einmalig) sehr viel Arbeit.

Thema: Zukunft von WPF?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ist dieses Schriftproblem das gleiche, wie im Property Grid im VS 2008, wenn man ein WPF-Projekt öffnet, kurz nach dem Blättern? Ich hab das nur mal kurz ausprobiert, aber dieser Effekt im Property Grid unten rechts ist mir unangenehm aufgefallen: Blättert man, glätter er die Schrift irgendwie. Hört man auf zu blättern, blendet er den Text nach einem Moment in etwas über, das an ganzen Bildschirmpixeln ausgerichtet ist. Ganz übel sowas. Ich war angenehm überrascht, dass dieser Effekt bei .NET-3.5-WinForms-Anwendungen nicht auftritt. Sonst hätte ich VS 2008 wohl nicht haben wollen.

Thema: Lizenzierung / Key / Serial / Seriennummer
Am im Forum: Rund um die Programmierung

Mal vom Aufwand, die Hardware zu identifizieren, abgesehen (vielleicht gibt's da ja ein Windows-API für...), zwei Anmerkungen:

* Dass man anstatt der lokalen, im Computer verbauten Netzwerkkarte irgend einen Router/Switch/sonstwas auslesen würde, halte ich jetzt mal für ne sehr gewagte These. Bis jetzt hab ich mit ipconfig immer noch die MAC-Adresse des lokalen Netzwerk-Adapters rausbekommen, egal wie groß das (nicht) angeschlossene Netzwerk war.

* Anstatt sich auf ein einzelnes Gerät festzulegen könnte man ja auch mehrere alternativ auslesen. Wenn MAC oder Mainboard-Serial-Number oder CPU-Serial-Number oder sonstwas stimmt, ist gut, sonst nicht. Die Gefahr, dass die Hardware dann nicht mehr passt, reduziert sich dann fast auf den Austausch des kompletten Rechners. Da all diese Nummern für sich eindeutig sein sollten, seh ich darin auch keine Schmälerung des Schutzes.

Letztlich scheint es aber wohl zu stimmen: Das Umgehen der Prüfung ist oft einfacher als das Erfinden eines gültigen Schlüssels. Insbesondere bei .NET-Anwendungen. Wer hier noch nie was von Code Obfuscation gehört hat, braucht sich über Serial Keys erst gar keine Gedanken zu machen...

Thema: ATOM-Newsfeed einlesen
Am im Forum: Datentechnologien

Tatsächlich. Okay, das lässt die ganze Namespacerei wieder etwas plausibler erscheinen.

Thema: ATOM-Newsfeed einlesen
Am im Forum: Datentechnologien

Aha, sehr schön. Um mit XPath irgendwas zu finden, das einen Standardnamespace hat, muss man für diesen zuerst einen Alias anlegen, um ihn zu adressieren. Einfach geht da gar nichts. Hier die Lösung:

XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(response);
XmlNamespaceManager nsMgr = new XmlNamespaceManager(xdoc.NameTable);
nsMgr.AddNamespace(String.Empty, "http://www.w3.org/2005/Atom");
nsMgr.AddNamespace("atom", "http://www.w3.org/2005/Atom");
foreach (XmlNode node in xdoc.SelectNodes("/atom:feed/atom:entry", nsMgr))
{ ... }

Thema: ATOM-Newsfeed einlesen
Am im Forum: Datentechnologien

Hallo,

ich versuche gerade, einen ATOM-Newsfeed einzulesen. Der sieht ja in etwa so aus:

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>...</title>
    <entry>
        <title>...</title>
    </entry>
</feed>

Dieser Standard-Namespace bringt mich noch in den Wahnsinn. Ich habe es bereits geschafft, XMP-Daten einzulesen, da gibt's aber nur andere Namespaces, keinen "xmlns:". Hier ist mein Code:

XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(response);
XmlNamespaceManager nsMgr = new XmlNamespaceManager(xdoc.NameTable);
nsMgr.AddNamespace(String.Empty, "http://www.w3.org/2005/Atom");
foreach (XmlNode node in xdoc.DocumentElement.SelectNodes("entry"))
{ ... }

Alternativ hab ich auch sowas versucht:

foreach (XmlNode node in xdoc.SelectNodes("/feed/entry"))

Nichts hat funktioniert. Das Ergebnis ist immer dasselbe: SelectNodes liefert keinen Node zurück. Er findet einfach nichts. Woran kann das liegen? Ich hab das ganze jetzt schon x-mal durch debuggt, kann aber keinen Fehler finden. Ich hab aber mit XPath auch nicht viel mehr Erfahrung, als man vom CSS-Schreiben bekommt und mit Namespaces steh ich auf Kriegsfuß.

Thema: SQlite, Umlaute
Am im Forum: Datentechnologien

Das hier könnte dir helfen, die CSV-Dateien vor dem Import in die gewünschte Kodierung zu bringen:
http://beta.unclassified.de/projekte/fileconvert/