Laden...

Forenbeiträge von Vassili Ingesamt 187 Beiträge

20.08.2008 - 21:03 Uhr

Hallo,

auch wenn ich nicht davon ausgehe, dass es zu meine Frage eine Antwort gibt, werde ich sie trotzdem stellen, ganz in dem Motto "es gibt keine dummen Fragen".

Ich bin Foobar2000 Nutzer und habe ein Visual Style gefunden das mit meiner Foobar2000 Konfiguration richtig gut aussieht, jedoch ist es fast unmöglich anderweitig damit zu arbeiten (Firefox, Windows Explorer usw.)

Ich hatte nun überlegt ob es möglich ist der Foobar2000 Anwendung, einer bereits kompilierten Applikation, einen anderen Visual Style zuzuweisen. Ich hatte mehrere tage reingeschaut und nur ganz wenige, lange tote und verweste Threads gefunden, die auch nicht genau auf meine Frage zutreffend sind.

Meine Überlegung war z.B. durch Messages, Umgebungsvariablen oder kurzzeitige Manipulation der Registry dies zu ermöglichen und eine Minianwendung zu schreiben, die das vor dem Start von Foobar2000 durchführt.

Es ist eher eine Schnappsidee aber ich finde die eigentlich klasse und wen ndas möglich ist, dann wäre das eine ziemlich geile sache (finde ich)

07.04.2008 - 16:46 Uhr

Hallo,

also zum einen fällt mir auf, dass du den lastfm prozess nicht in allen fällen initialisiert hast.

besser wäre

Processes lastfm = null;

was glaub ich noch fehlt ist vielleicht ein key up 😉 jede taste die du drückst muss irgendwann auch losgelassen werden.

Ich kenn mich mit SendMessage nicht aus. Nutze bis jetzt für solche fälle nur SendKeys. Da Tastendrücke aber fast gleich sind müsstest du einfach nur dafür sorgen, dass die taste wieder losgelassen wird.

SendMessage(lastfm.Handle, WM_KEYDOWN, (int)Keys.Space, IntPtr.Zero);
SendMessage(lastfm.Handle, WM_KEYUP, (int)Keys.Space, IntPtr.Zero);

Für eine Tastenkombination wäre das hier nicht falsch.

SendMessage(lastfm.Handle, WM_KEYDOWN, (int)Keys.LControlKey, IntPtr.Zero);
SendMessage(lastfm.Handle, WM_KEYDOWN, (int)Keys.Right, IntPtr.Zero);
SendMessage(lastfm.Handle, WM_KEYUP, (int)Keys.Right, IntPtr.Zero);
SendMessage(lastfm.Handle, WM_KEYUP, (int)Keys.LControlKey, IntPtr.Zero);

Für WM_KEYUP musst du gucken welche zahl der für taste hoch brauch. Außerdem weiß ich nicht ob zu KeyUp die Taste angegeben werden muss, ist aber eigentlich logisch.

Insgesamt aber unverbindlich. Ich kenne SendMessage nicht würde aber mal versuchen ob das so funktioniert.

EDIT:
Mir fällt gerade ein, dass die Keys Klasse vielleicht den falschen Tastencode hat und deswegen dein code nicht funktioniert. Musst mal in der Zeichentabelle nachgucken

01.02.2008 - 04:25 Uhr

Guten morgen... gähn

mpegvideo... hab ich in diversten Foren und Artikeln so gesehen, dass MP3 Dateien mit MPEGVideo abgespielt werden. Das ist auch (sollte ich mich nicht irren) auch in dem Artikel den man hier in myCSharp findet. Das liegt eigentlich auch halb auf der Hand "MP3 = MPEG 1 Audio Layer 3". WMA sind laut Artikeln MPEGVideo2 abzuspielen... aber ich kann mich auch irren.

PS: Sorry wegen falschem Post und danke für die Arbeit daraus ein neuen Thread zu erstellen 😉

*Edit*

Ok. Hier @Home funktioniert das beispiel... sogar mit und ohne type angabe. Am Arbeitsrechner im Büro wollte er nicht... könnte es dann an den installierten codecs liegen? Ich hab bei der Arbeit zwar den wmplayer und foobar2000 installiert und bei beiden funktioniert selbstverständlich das abspielen von mp3 dateien aber man kann ja nie wissen...

31.01.2008 - 16:09 Uhr

[EDIT]Abgeteilt von [Tutorial] Audio- und Videowiedergabe mit MCI . In Artikeln bitte nur Anmerkungen und Fragen zum Artikel, nicht zu eigenen Problemen.[EDIT]

Sorry, dass ich die leiche nochmal hochziehe aber ich glaub hier bin ich mit meinem Problem am besten beraten.

Ich hab ein Problem mit dem Aufruf von diesem MCI. Ich wollte für einen Prototyp eine MP3 Datei abspielen und gucken ob ich denn soweit überhaupt komme. Leider hänge ich schon beim Command "open"

string name = "D:\\datei.mp3";
string type = "mpegvideo";
string cmd = "open \"" + name + "\" type " + type + " alias \"" + name + "\"";
int errCode = mciSendString(cmd, null, 0, IntPtr.Zero);

Leider bekomme ich immer den ErrorCode 277 zurück:

"Fehler beim starten von MCI."

Ich hab schon dieses und auch einpaar andere Beispiele ausm Internet ausprobiert aber überall bekomme ich diese Fehlermeldung. Ich glaube so langsam eher, dass es an der winmm.dll liegt aber ich bin mir da nicht sicher.

Installiert ist bei mir die winmm.dll Version 5.1.2600.2180 MCI API-DLL

weiß einer Rat?

15.08.2007 - 15:05 Uhr

Bücher finde ich fast unerlässlich sind aber im leben nicht das einzige, was man benötigt. Zu meiner Anfangszeit hatte ich sehr oft die Bücher parallel zur Entwicklung aufgeschlagen gehabt.

Einige Bücher habe ich von der ersten Seite bis meist zur hälfte gelesen bis das Buch nicht mehr notwendig war. Die viele Theorie, Erläuterungen und Beispiele bringen einem ein ganzes Programmierthema gut bei (z.b. Multithreading, Drawing, Objektorientierung, die Sprache C#). Hat man die ersten Hürden geschafft und findet sich in das entsprechen Thema zurecht wird das Buch irrelevant. Dann sind das nur noch einzelne Schnippsel, die man nach und nach durch Foren oder die MSDN lernt.

14.08.2007 - 11:06 Uhr

Hallo leutz,

ich hab ein problem mit dem Datagridview. Ich lasse via SqlDataAdapter SQL Skripts ausführen und fülle ein Dataset mit daten. Nach einer Schleife durch alle Tabellen des Datasets lege ich bei der DataSource-Eigenschaft des DGV's die Tabelle fest, die angezeigt werden soll.

Das Problem das ich habe sind Byte[] Spalten die so bereits im DataSet in diversen Tabellen zu finden sind. Nach einer Suche hier im Forum bin ich auf das Formatting Event gestoßen und mir ist in diesem Event aufgefallen, dass das DGV ein Image-Objekt erwartet. Mein Wunsch ist es aber das Byte[] in Hexadezimaler Form darzustellen.

Anstelle des in Hexadezimaler Form dargestellten Feld bekomme ich ein hübsches rotes X in der Zelle Dargestellt. Btw. damit keine Fehlermeldungen kommen hab ich eine leere Methode an das DataError-Event des DGV angebunden.

Kann mir einer erklären, wie ich diese hübsche Formatierung hinbekomme?

13.08.2007 - 15:56 Uhr

das galileo open book sagt, dass bie einer änderung der nebenversionsnummer bereits festgelegt wird, dass es sich um eine nicht abwärtskompatible version handelt.

ich glaub eher, dass das geschmackssache ist, ob die version abwärtskompatibel ist oder nicht. daher würd ich nicht sagen, dass die versionsnummer falsch ist.

Ja noch ist sie abwärtskompatibel. meine überlegung war nur dass jedes addin seine eigene dll bekommen soll damit solche probleme mit einer abwärtskompatibilität nicht auftreten. die rahmenanwendung soll dann in der lage sein, die verschiedenen versionen zu unterscheiden, sollte es da einen unterschied geben.

13.08.2007 - 09:18 Uhr

AddIn1 läuft laut auch mit Version 1.1 der AddIn.dll
AddIn2 sollte dies aber nicht tun. Warum sollte der die version 1.0 des addin1 verwenden? der tipp, dass dabei noch geguckt wird, ob die assembly im arbeitsspeicher ist und der deswegen diese bevorzugt klingt eigentlich garnicht so verkehrt und das werde ich heute noch überprüfen.

10.08.2007 - 15:32 Uhr

spitze, wenn ich die dll ins ausführungsverzeichnis packe dann hab ich ja total die probleme die verschiedenen versionen der addinbase.dll zu unterscheiden. was mach ich, wenn die version 1.1 keine erweiterung sondern eine änderung einer funktion hat?????? außerdem will doch das addin 1 nicht die version 1.1 des addinbase haben... der will doch genau die version haben mit der es kompiliert wurde

10.08.2007 - 15:09 Uhr

Von was für einem Ausführungs Verzeichnis redet ihr? wo die anwendung drin ist?

10.08.2007 - 14:22 Uhr

Original von Friedel
Hallo Vassili,

wieso überhaupt eine andere Version. Eine Erweiterung führt doch (eigentlich) nie zu einem Bruch der Kompatibilität.

Gruss
Friedel

Weil Add-In 1 mit der Basis DLL in der Version 1.0 kompiliert ist. Während der Zeit des Releases von Add-In 2 wurde die Basis DLL verändert. deswegen 1.1 Die DLL wurde um eine Funtkion erweitert.

10.08.2007 - 10:48 Uhr

Hallo leute,

komischer Titel komisches Problem und ich bräuchte euer Brain.

ich habe zwei Assemblies (Add-Ins für ein von mir geschriebenes Programm), die jeweils einen Verweis auf ein anderes Projekt haben (Dieses Standard Add-In Projekt hat standard Funktionen für Add-Ins, nennen wir es AddInBase). In jeder Assembly gibt es eine AddIn Klasse die von einer AddInBase-Klasse erbt. Diese AddInBase-Klasse befindet sich im AddInBase Projekt.

Also Add-In 1 hat eine Assembly der AddInBase als Verweis mit der Version 1.0. Add-In 2 hat eine Assembly der AddInBase als Verweis mit der Version 1.1, da die AddInBase für das zweite Add-In erweitert werden musste.

Diese Add-Ins sollen nun von meiner Anwendung geladen werden und das funktioniert auch prima. Die Addins findet die Anwendung in einem Unterverzeichnis. hier kurz dargestellt:
Anwendung
--> Unterverzeichnis "Add-Ins"
------> Unterverzeichnis "Add-In 1"
----------> Datei "Add-In 1.dll" Version 1.0
----------> Datei "AddInBase.dll" Version 1.0
------> Unterverzeichnis "Add-In 2"
----------> Datei "Add-In 2.dll" Version 1.0
----------> Datei "AddInBase.dll" Version 1.1

Meine Anwendung findet auch prima via Reflection die Add-In 1 und Add-In 2, erkennt die als Add-In, ignoriert die AddInBase, da es keine AddIns sind und möchte die auch laden. Also erstellt es instanzen der AddIn Klasse in den jeweiligen Add-In DLL's. Diese AddIn Klassen sind ja wie gesagt von einer AddInBase-Klasse der AddInBase.dll abgeleitet. Dabei wurde die in der Version 1.1 erweitert um eine Eigenschaft, welche im Konstruktor der AddIn Klasse der Add-In 2.dll gesetzt wird.

Zurück zur Anwendung, die instanzen erstellt. Sobald die Anwendung eine Instanz der AddIn Klasse erstellen will schmiert mir die Anwendung ab aus unerklärlichen gründen.

Ich hab beim hin und her probieren herausgefunden, dass die Add-In 2.dll, die ja den Verweis auf die AddInBase.dll mit der Version 1.1 hat, die AddinBase.dll aus dem Verzeichnis der Add-In 1.dll mit der Version 1.0 läd. Da diese aber die Eigenschaft nicht hat, schmiert mir die Anwendung schon im Konstruktor ab mit der Fehlermeldung, dass der die Eigenschaft in der Assembly nicht finden kann.

Nun zu meinem Problem. Wie kann es sein, dass meine Assembly seine Verweise in einem Nachbarverzeichnis sucht und diese bevorzugt und nicht die Verweise aus dem eigenen Verzeichnis?

--- Edit

Ich habs total verplant. Im GUI-Technologien Forum bin ich falsch. Könnte jemand diesen Thread ins passende Forum verschieben?

10.08.2007 - 10:23 Uhr

Der Code ist ein Ausschnitt aus einer Klasse.

So an sich, kannst du den kompletten Code in dein Projekt hinzufügen und es sollte funktionieren. Da das aber nicht aussreicht um einen ganzen Button darzustellen musst du die Klasse erweitern.

Am besten fügst du zu deinem Projekt ne neue leere KLasse hinzu und schnibbelst dir die einzelnen notwendigen parts aus dem codebeispiel hier raus und fügst die in deine leere klasse hinzu.

02.07.2007 - 16:45 Uhr

Hallo leute,

ich stehe mal wieder vor nem kleinen Problem. Ich muss ermitteln welche Befehle in einem SQL Statement (als String vorhanden) verwendet werden. Dazu wollte ich vohrer alle Zeichenketten ' * ' aus dem SQL String entfernen, damit ich ganz einfach via RegEx nach den Befehlen suchen kann.

Mir geht es jetzt hauptsächlich darum diese Zeichenketten zu finden und aus dem SQL String zu entfernen. Ich könnte es auch ohne RegEx probieren wäre aber ein wenig Aufwand. Gibt es ein RegEx Pattern der sowas macht?

25.04.2007 - 14:17 Uhr

Ich weiss zwar, was du brauchst. wüsste aber nicht genau, wie man das handlen kann. Vielleicht hilft dir aber die Methode "WaitForInputIdle" der Process klasse weiter.

19.04.2007 - 09:24 Uhr

Jau guten Morgen,

Danke erstmal für die Antworten.

@herbivore:
In dem VB Projekt ab ich die API gefunden, die nin in seinem Link erwähnt hat.

Bin gestern schon fast in panik geraten 😜 danke leute

18.04.2007 - 17:48 Uhr

Hallo leute,

ich stehe gerade vor einem Problem mit einem Programm. Ich erkläre erstmal ein wenig die vorgeschichte:

Ich habe ein uraltes Dos Programm aus einer Zeit, als ich das licht der welt erblickt habe 😁 (naja, nicht ganz so schlimm) auf jeden fall ist es ein DOS Programm und lässt sich unter Windows XP über die Eingabeaufforderung ausführen. Das Programm hat einen Parameter. dieser verlangt einen dateinamen würde also in der eingabeaufforderung ungefähr so aussehen:

uralt.exe C:\test.txt

auf jeden fall rufe ich über Process.Start() dieses Programm auf und gebe ihm diesen Parameter über Arguments mit. Mein Problem ist der: der Dateipfad ist zu lang an manchen stellen. Wenn der Dateiname z.b. so aussehen würde

C:\Hier und da und dort\Das ist die Datei die zu lang ist.txt

kommt das uralt programm nicht drauf klar. ich müsste, wenn ich mich nicht irre das in einem kurzen format darstellen. Sowas wie C:\Hier u1\Das is1.txt

Kann ich. z.b. über eine API oder im Framework einen Dateipfad so umwandeln lassen?

28.03.2007 - 14:06 Uhr

Am besten erstellst du eine neue Klasse die von der Button Klasse abgeleitet ist und überschreibt die OnPaint und OnPaintBackground Methoden. Damit kannst du komplett auf die Darstellung einer Schaltfläche reagieren und hat alles Standardfunktionen eines Buttons.

Beispiel:


public class MyButton : System.Windows.Forms.Button
{
   public MyButton()
   {

   }

   protected override void OnPaint(PaintEventArgs pevent)
   {
      base.OnPaint();   //Brauchst du eigentlich nicht, weil du selbst zeichnen willst.
      //Hier via pevent.Grafics.... Zeichnen was du willst.
   }
}
26.03.2007 - 10:45 Uhr

die Forumlarklasse hat eine Eigenschaft. Nennt sich "Controls" ist vom Typ ControlCollection. Da musst du die buttons via .Add(...) hinzufügen.

Beispiel:


Form1_Load(object seinder, EventArgs e)
{
Button btn = new Button();
btn.Text = "Hallo";
this.Controls.Add(btn);
}
22.03.2007 - 15:39 Uhr

http://www.codeproject.com/cs/miscctrl/clock.asp
http://www.codeproject.com/dotnet/vgclock.asp#The%20Minute%20Hand8

Schau dir diese Seiten mal an. Wie du bei mir siehst habe ich ja 12 dieser Rechtecke. Das wäre bei einer Uhr die 12 Nummern 😉 damit hättest du schonmal die vierecke an der Position, wenn du dich an die Rechnungen hälst wie in den Beispielen.

DateTime n = DateTime.Now;
Single angle = 360 * ((n.Second + n.Millisecond / 1000F) * 20 % 60) / 60;
angle -= angle % 30;

currentPoint = new PointF(
	Convert.ToSingle(Math.Cos(2 * Math.PI * angle / 360) * 20 + 5),
	Convert.ToSingle(Math.Sin(2 * Math.PI * angle / 360) * 20 + 5)
);

Das da oben sollte schon ein guter ansatz sein. Damit springt der Punkt immer um 30° im Uhrzeigersinn. Dies in 3 Sekunden. Wenn du darum noch eine Schleife einbaust und den Angle bei der Schleife immer -= 30 rechnest bekommst du die restlichen 11 Punkte raus.

22.03.2007 - 14:03 Uhr

Rechtecke im Kreis? was möchtest denn genau machen?

22.03.2007 - 11:07 Uhr

Ja, ich hätte natürlich jetzt auch einen generator verwenden können. Mein Problem ist nur der: Ich muss auf die Ladezeiten in meiner Anwendung reagieren können. Die Darstellung soll (ein wenig) dynamisch angepasst werden, wenn die Anwendung kurze Zeit nicht reagieren sollte.

Aber jetzt hab ich es mit dem Code auch geschafft. Habe gerade von anderer Seite einen Tipp bekommen um diese Verpixelte Ansicht zu verbessern.

e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

Jetzt werden die Vielecke mit Antialiasing gezeichnet und die Pixel sind nun geschmeidiger.

Sorry wegen dem unnützen Thread.

22.03.2007 - 10:35 Uhr

Hallo Leute,

ich hab ein kleines Problem, dass mir ins Auge sticht.

Ich habe ein kleines Steuerelement gebastelt, bei dem ich eigentlich nur die OnPaint Methode überschreibe. In dieser zeichne ich ein Vieleck. Soweit so schön. Das Vieleck wird auch wie gewünscht angezeigt.

Was mich aber stört, ist diese verpixelte ansicht. Am Rand meines Vielecks möchte ich doch gerne einen Schatten oder Blendeffekt haben. Zum Beispiel diese a-gif (nicht von mir und möchte ich nicht verwenden, wegen urheberrechtsverletzung) http://www.ip2location.com/images/wait.gif hat sowas.

Im Anhang hab ich ein Screenshot hinzugefügt, wie das im moment aussieht.

Zum Zeichnen wird folgender Code verwendet:

 
lineBrush = new SolidBrush(Color.FromArgb(colorValue, colorValue, colorValue));
e.Graphics.FillPolygon(
	lineBrush,
	new PointF[] { startLeftPoint, endLeftPoint, endRightPoint, startRightPoint },
	System.Drawing.Drawing2D.FillMode.Winding
);

Das Vieleck (Eigentlich ein gewinkeltes Rechteck) wird mit einem SolidBrush in dem Bereich des Vielecks gezeichnet.

Der Schatten, Blendeffekt oder wie auch immer man das nennen soll, ist das einzige was mir fehlt, aber ich bin nicht der erfahrenste was den Drawing Namespace angeht.

20.03.2007 - 16:49 Uhr

du musst wissen, dass das readonly des datagridviews in einer höheren ebene liegt als die columns. Sprich: Das ReadOnly des DataGridViews hat eine höhere Priorität als das ReadOnly von DataGridViewColumns.

Ist ReadOnly von DataGridView = true sind alle darunterliegenden objekte auch readonly
ist aber readonly von DataGridView = false gelten die ReadOnly eigenschaften der darunterliegenden Objekte.

Sobald bei einem Objekt ReadOnly = true ist, sind alle darunterliegenden Objekte automatisch auch ReadOnly.

Das selbe hast du auch z.B. bei Panels und der Enabled Eigenschaft.

Füg mal in einer Form ein Panel hinzu und in setze in diesem Panel ein Button. Dann geh mal folgende Konstelationen durch:
Panel.Enabled = true, Button.Enabled = true <-- Der Button wird aktiviert sein
Panel.Enabled = true, Button.Enabled = false <-- Button ist nicht aktiviert
Panel.Enabled = false, Button.Enabled = true <-- Button ist nicht aktiviert
Panel.Enabled = false, Button.Enabled = false <-- Button ist nicht aktiviert

Der Grund dafür ist der, dass die Enabled Eigenschaft des Panels eine höhere Priorität hat als die des Buttons. Genauso wie beim DataGridView und der ReadOnly Eigenschaft

04.01.2007 - 19:15 Uhr

schonmal ohne geschweifte klammer und indexangabe versucht? schau dir mal den letzten beitrag von mir an. da finde ich auf jeden fall keine geschweiften klammern.

Weiter. DefaultCellStyle wird verwendet, wenn die Zellen, die in dieser Spalte sind, keinen eigenen Style haben. Sprich: Änderst du den Style einer Zelle explizit, greift dann auch DefaultCellStyle für diese Zelle nicht mehr. Also. Hast du auch Style verwendet?

03.01.2007 - 10:01 Uhr

Füg zum Event 'FormClosing' eine Methode hinzu. Diese sollte sich demnach darum kümmern.

Via MenuItem oder Button machst du schlicht und ergreifend dann this.close() oder Application.Exit() obwohl ich bei der Exit Methode nicht ganz sagen kann, ob das da reibungslos funzt, weil ich bis jetzt nicht mit exit die formclosing hab zugreifen lassen.

Falls du trotzdem nicht weiter kommst -.-


this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);

		private void Form1_FormClosing(object sender, FormClosingEventArgs e)
		{
			MessageBox.Show("Jetzt möchte ich bevor die Anwendung beendet wird noch was machen");
		}

		private void btnClose_Click(object sender, EventArgs e)
		{
			this.Close();
		}

		private void closeToolStripMenuItem_Click(object sender, EventArgs e)
		{
			this.Close();
		}
03.01.2007 - 09:38 Uhr

ist doch klar, warum.

klickst du auf dein menuitem, läuft der in die closewindow. via application.exit() gehts wieder in die onformclosing und wieder weiter in die closewindow und nochmal zur application.exit()

02.01.2007 - 21:32 Uhr

MSDN?

Soweit ich noch weiss wird in die Eigenschaft Format ein String angegeben z.B. "dd.MM.yyy HH:mm:ss"

30.12.2006 - 12:15 Uhr

vb6 vermute ich dann mal. du kannst zwar objekt orientiert entwickeln, hast aber noch den anderen mist dabei. also kannst du dich da entscheiden, wie du programmierst. hier ist das schon ein wenig anders 😉

http://www.galileocomputing.de/openbook/csharp/

Vielleicht hilft dir dieser c# crashkurs etwas, wenn du schon über einen gewissen wissensstand verfügst

29.12.2006 - 21:54 Uhr

ich stimme herbivore zu.

die TryParse Methode ist hier eher angebracht und meiner meinung nach die schnellste lösung.

29.12.2006 - 21:49 Uhr

Kann es sein, dass du kein Objekt erstellt sondern bei den statischen membern nach der Show methode gesucht hast?

29.12.2006 - 14:53 Uhr

LOL, wo sind deine Zeilenumbrüche abgeblieben ^^

Ich sehe da was von WriteLine daher vermute ich, dass der Objektverweis 'Source' ein Objekt vom Typ StreamWriter beinhaltet.

Bei streams darfst du das Flush zum schluss nicht vergessen. Das schreiben der Datei geht nicht so schnell voran wie dein Prog, daher wird der text im arbeitsspeicher zwischengespeichert. wenn du das also nicht flushst, dann wird der puffer gelöscht und die datei ist nicht zu ende geschrieben worden.

daher zum schluss noch:

Source.Flush();
Source.Close();

29.12.2006 - 14:46 Uhr

Aufpassen. Das XmlDocument ist sehr praktisch, wenn es darum geht, deine xml datei zu erweitern. Pass aber auf, wenn die Xml Datei zu groß wird. das XmlDocument bläst deine Anwendung im Arbeitsspeicher gut auf. Ungefähr 1.5 * Xml Dateigröße befinden sich dann im Arbeitsspeicher. Dateien bis 100 MB kann man noch mit dem XmlDocument laden. Größere Datenmengen sollten dann lieber in eine Datenbank rein.

29.12.2006 - 14:11 Uhr

Wie sieht es mit der Erreichbarkeit des MySQL Servers aus? kann es passieren, dass dieser mal aussetzt oder eine andere Adresse bekommt? Verwendest du Timeout? Wenn ja, könnte es daran liegen, dass deine Anwendung bis zum Tag es jüngsten Gerichts auf ne Antwort des Servers wartet.

Ist dies nicht der Fall:

  • Log mal in einer Text Datei mit, was alle zwei Minuten passiert. MIt Uhrzeit und einer kurzen Beschreibung, damit du die letzte Position herausfinden kannst, die deine Anwendung erreicht hat.
  • Starte das Programm aus VS heraus und lass es so lange laufen, bis das Programm nicht mehr reagieren will. Dann brauchste nur noch auf pause klicken und erhälst die Info, welche Methode als nächstes aufgerufen werden wird, bzw. an welcher Stelle nichts mehr geht.

Vielleicht liegt es auch daran, dass deine Anwendung ununterbrochen Code ausführt.

29.12.2006 - 14:04 Uhr

indem du den Datentyp string angibst. und vergiss das lieber, denn in einer Datenbank werden die Daten idr. unformatiert gespeichert. Speicher als Currency, Single oder double den Wert einfach ab. Via Anwendung fragst du die Daten ab und formatierst diese zum Schluss zur Darstellung. Das €Zeichen schon in der Datenbank stehen zu lassen ist keine tolle idee bzw. in zahlen datentypen nicht möglich, weil die Formatierung von Werten erst später in der Anwendung selbst erfolgt.

29.12.2006 - 13:55 Uhr

Du, nicht falsch verstehen; soll nicht unhöflich klingen. Wo ist die frage? ^^

Du speicherst Preise in die Datenbank. weiter?

29.12.2006 - 13:52 Uhr

Meine Auffassung bezüglich .NET im Vergleich zu anderen Sprachen/IDE's usw.

Ich kenne .NET und C# erst seit 14, 15 Monaten. Anfangs hab ich geflucht und gegen den Tisch gehauen, weil ich sehr auf mich allein gestellt war. Warum? Bücher zum lernen hatte ich nicht. Im Internet habe ich viel zu oft einfach nur mist gefunden, erst recht die deutschen Seiten sind mangelhaft (abgesehen von MyCSharp). Weiter konnte ich nur im Betrieb lernen, weil ich für zu Hause keine .NET IDE hatte. Ich musste also alles entweder allein oder (ab ca. Nov. 05) über dieses Forum lösen.

vorher habe ich Hobbymäßig und im Beruf VB6 entwickelt. Da war es ziemlich einfach an Infos zu kommen. Da war meine lieblingsseite activevb und wenn ich etwas nicht wusste konnte ich es dort sofort finden. Der Lernfaktor war dadurch aber irgendwo knapp unter der null grenze ^^

Mittlerweile hat sich das bei mir eingependelt. Ich hab mich an die IDE, das Framework und an die Sprache gewöhnt und weiss schon fast instinktiv wo Fehler in der Anwendung sind. Ich habe zwar mittlerweile Bücher bezüglich C# und .NET aber durch das schon angeeignete Wissen benötige ich die Bücher nur noch als Referenz und selten auch um mir wissen anzueignen, was dann bedeutet, dass ich z.b. das ganze System.NET oder System.Drawing durcharbeite.

Warum sag ich das jetzt?

Am anfang war es sehr schwer die Sprache zu lernen. Ich bin auch noch relativ frisch in diesem Beruf und kann nicht mit meiner erfahrung prahlen. Entwicklerfreunde, denen ich mal die vorzüge von .NET gezeigt hab, wollten es auch probieren und haben nach nur wenigen stunden die sache fallen lassen, weil ihnen fast nichts in .NET bekannt vorkommt.

Zwar gibt es mittlerweile gute Bücher, Foren und andere Inet Seiten, die MSDN usw. aber trotzdem muss man intensiv sich mit .NET beschäftigen und das ist für den privaten hobby bereich zu anstrengend. auf jeden fall anstrengender als java oder php, denn zu diesen Themen gibt es eine große community.

.NET ist im moment, was die Kosten und die momentane Entwicklung von .NET angeht , eher was für Betriebe. Sollten aber im laufe der Zeit .NET Frameworks für andere Betriebssysteme kommen, die von der Welt akzeptiert und auch verwendet werden, sollte es möglich werden, dass in VS geschriebene Projekte (fast) nahtlos mit anderen Betriebssystemen klarkommt, hat .NET seinen Markt wesentlich erweitert.

In der Berufsschule habe ich das Vergnügen mit dem Borland Builder 5 C++ zu lernen. Dort überlegt man auch auf C# umzusteigen, auch wenn ich das nicht mehr erleben werde. Allgemein kann man sagen, dass erst die Entwicklerstuben, Schulen, usw. im laufe der Zeit vielleicht umsteigen werden. Ich kann mir vorstellen, dass im privaten Bereich erst in zwei Jahren langsamen Wachstums eine größere Community herrschen wird, und vielleicht nochmal zwei jahre später .NET zum Volksport der Hobbyentwickler werden könnte.

Um mal aufn Punkt zu kommen: Ich glaube, dass beim .NET Release und die Zeit danach alles so interessant aussah und manche ein Stückchen vom Kuchen, z.b. Buchhandlung usw. mit büchern, abhaben wollten. Wenn es wirklich so ist, dass es einen Rückgang der Angebote von Zeitschriften usw. gibt, liegt es sehr wahrscheinlich daran, dass die .NET Community nicht so gut gewachsen ist, wie man es sich erhofft hatte. Das soll aber nicht heissen, dass das Thema bei MS in die tonne geworfen wird.

29.12.2006 - 11:38 Uhr

Falls dein dgv eine ganze spalte hat, die datum und uhrzeit beinhaltet, kannst du via DefaultCellStyle.Format das Format angeben, womit das gehen müsste.

29.12.2006 - 10:52 Uhr

Hallo herbivore,

in wiefern meinst du nicht mehr stand der kunst?

29.12.2006 - 09:33 Uhr

System.Diagnostics.Process.GetProcessByName(string ProcessName);

das könnte dir weiter helfen 😉

Allgemein müsste die Process Klasse alles bieten, was du benötigst um eine Anwendung zu finden.

29.12.2006 - 09:26 Uhr

Bei mehreren Formularen sollte man wenn möglich immer die ShowDialog() Methode verwenden. Das Enablen und Disablen des aufrufenden Formulars ist ne heikle angelegenheit

28.12.2006 - 17:46 Uhr

Also. Ich hab das mal ausprobiert.

Ich habe zur Form ein Button hinzugefügt. Dieser enthält folgenden Code

TreeNode trParent = treeView1.SelectedNode.Parent;
TreeNode trNode = treeView1.SelectedNode;
int iIndex = trNode.Index;
trParent.Nodes.Remove(trNode);
trParent.Nodes.Insert(iIndex - 1, trNode);

dies bewirkt. dass beim klick auf den button der ausgewählte node in der gleichen hierarchie ebene um eine Position nach oben rutscht.

28.12.2006 - 17:17 Uhr

Was an deinem beispiel nicht funktioniert ist der logische vergleich einer Zahl und einer Zeichenkette. Außerdem hast du einen zuweisungsoperator verwendet und keinen logischen operator.

if (Convert.ToInt32(TextderDatei.Substring(0,6)) == iIndexNummer)

das müsste funktionieren. hab sonst beim überfliegen keine fehler gefunden.

Außerdem kann es sein, dass du bei der Sache schnell an die Grenzen des Möglichen stoßen wirst. ab 99999 Zeilen wird's eng bei dir 😉 du wirst zwar nicht so viele zeilen haben, wie du gesagt hast, aber nur zur info.

Und weiter: du musst alle tausender und hunderter natürlich auch mit leerzeichen auffüllen. ich zeigs dir mal:

00001 text
00002 text2
...
02452 text bla

chlor? ^^

denn sonst könnte dir bei folgender zeichenkette was passieren. siehe:

1 Text ganz viel text und noch mehr text
beim Substring(0,6) passiert folgendes. Du Erhälst diese Zeichenkette "1 Text" und das kannst du nicht in eine Zahl konvertieren.

28.12.2006 - 17:07 Uhr

soweit ich weiss kannst du nicht alle knoten durch gehen. Du musst jeden parent durch gehen. Zu lösen währe dieses problem mit einer sich selbst aufrufenden Methode

EDIT:

		TreeNode trNode = treeView1.Nodes[0].Nodes[0];  
		treeView1.Nodes[0].Nodes.Remove(trNode);  
		treeView1.Nodes[0].Nodes.Insert(1, trNode);  

Die Struktur meines Test ist folgende

Node0
->Node3
->Node4
->Node5
Node1
Node2

Und die drei zeilen machen folgendes.

Node0
->Node4
->Node3
->Node5
Node1
Node2

wie währe es mit diesem vorschlag?

28.12.2006 - 17:01 Uhr

Hallo 4breeze,

Der unterschied zwischen deinem Cast Versuch und dem von can320 ist folgender.

Du versucht das Objekt in der Eigenschaft OrdnerName der Klasse Objekt in die Klasse Dateien zu casten. Da die Klasse Objekt die Eigenschaft OrdnerName nicht hat wird das nicht gehen.

can320 klammert explizit ein, was gecastet werden soll. er castet das Objekt, dass sich in der Arraylist arrListIO an der ersten stelle befindet und fragt dann die Eigenschaft OrdnerName ab.

mfg

28.12.2006 - 16:43 Uhr

die Klasse StreamReader könnte dir weiterhelfen. Diese müsste die Methode ReadLine beinhalten. Dir bleibt keine andere Wahl als alle Zeilen durchzugehen bis du die zutreffende gefunden hast. Ein kleines Beispiel.


string strTextOutput;
int iIndex = 123;
bool bFound = false;
System.IO.FileStream ioFileStream = new System.IO.FileStream("C:\Test.txt", FileMode.Open, FileAccess.Read);
System.IO.StreamReader ioReader = new StreamReader(ioFileStream);
while (!ioReader.EndOfStream)
{
	string[] strLine = ioReader.ReadLine().Split(' ');
	if (Convert.ToInt32(strLine[0]) == iIndex)
	{
		strTextOutput = strLine[1];
		bFound = true;
		break;
	}
}
if (bFound)
	MessageBox.Show(strTextOutput);
else
	MessageBox.Show("Der angegebene Index wurde nicht gefunden.");

Ahja. hätte fast noch vergessen den Stream wieder zu schliessen.

ioReader.Close();

Und auch gleich der erste Bug ^^
bei der Split Methode müsstest du noch einen zweiten Parameter angeben, und zwar den Counter. Da du zwei stück haben möchtest und der danach aufhören soll zu splitten würde ich mal sagen währe es die zahl 2 für zwei teilzeichenketten.

28.12.2006 - 16:34 Uhr

Also ich hab das Steuerelement auch schon verwendet und eigentlich dachte ich, dass es eher so ne art wrapper währe, dass auf die ie zurück greift.

MS Internet Explorer muss nicht automatisch das Programm bedeuten. Das ganze drum herum ist (Navigationsleiste, fav's usw.) ist meines wissen nicht im ie kern drin.

Das ist so meine Vorstellung vom WebBrowser Control.

28.12.2006 - 15:29 Uhr

Vielleicht hilft dir das hier weiter.

http://developer.mozilla.org/

leider finde ich nicht mehr den link zu einem active x steuerelement von firefox. da gab es was, wenn ich mich nicht täuschen sollte.

28.12.2006 - 15:22 Uhr

Naja. Eine eigene Bauen musst du nicht, wenn es aussreicht die Darstellung zu verändern. eine komplett neue ProgressBar zu programmieren finde ich unnötige Fleiß-/Stiftarbeit

28.12.2006 - 15:18 Uhr

Du hast in den anderen Beiträgen schon richtig gelesen.

die Blöcke bekommst du nur weg, wenn du die Visual Styles ausschaltest. Luna hat keinen extra Style für ne kontinuierliche Progress Anzeige. Ich weiss noch aus der VB6 Zeit, dass man von einzelnen Steuerelementen die Visual styles deaktivieren kann. Da müsstest du mal folgenden begriffen suchen: Visual Basic, API, Visual Styles

Ein anderer Vorschlag währe: Du erstellst eine neue Klasse die von der Progress Bar erbt. Dann überschreibst du die OnPaint Methode und zeichnest selbst ein wenig. Das dürften vielleicht 100 Zeilen werden, wenn überhaupt (Hintergrund, Rahmen und Balken). vielleicht haste ja damit glück.