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)
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
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...
[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?
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.
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?
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.
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.
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
Von was für einem Ausführungs Verzeichnis redet ihr? wo die anwendung drin ist?
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.
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?
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.
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?
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.
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
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?
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.
}
}
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);
}
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.
Rechtecke im Kreis? was möchtest denn genau machen?
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.
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.
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
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?
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();
}
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()
MSDN?
Soweit ich noch weiss wird in die Eigenschaft Format ein String angegeben z.B. "dd.MM.yyy HH:mm:ss"
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
ich stimme herbivore zu.
die TryParse Methode ist hier eher angebracht und meiner meinung nach die schnellste lösung.
Kann es sein, dass du kein Objekt erstellt sondern bei den statischen membern nach der Show methode gesucht hast?
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();
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.
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:
Vielleicht liegt es auch daran, dass deine Anwendung ununterbrochen Code ausführt.
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.
Du, nicht falsch verstehen; soll nicht unhöflich klingen. Wo ist die frage? ^^
Du speicherst Preise in die Datenbank. weiter?
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.
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.
Hallo herbivore,
in wiefern meinst du nicht mehr stand der kunst?
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.
Bei mehreren Formularen sollte man wenn möglich immer die ShowDialog() Methode verwenden. Das Enablen und Disablen des aufrufenden Formulars ist ne heikle angelegenheit
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.
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.
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?
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
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.
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.
Vielleicht hilft dir das hier weiter.
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.
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
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.