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 DeZio
Thema: FTP: (550) File unavailable bei WebRequest.Create
Am im Forum: Netzwerktechnologien

Vor ein paar Tagen trat der Fehlercode bei mir auf, weil der Pfad/die Datei nicht existierte. Prüfe das einmal nach, ob auf dem Server diese wirklich existiert.

@Coffeebean:

Kann Path.Combine auch / statt \ kombinieren? Wenn bei einem Linux-FTP das Backslash verwendet wird, kommt es da nicht "erst recht" zum Fehler?

Thema: Schleife - Ereignis - Warten auf Enterbetätigung
Am im Forum: GUI: Windows-Forms

A) Du musst dir die Variable i merken, möglicherweise über eine eigens angelegte Eigenschaft in der Form. Gib ihr aber einen schöneren Namen. Vielleicht soetwas, wie "ResultCount".

B) Im Click-Event des Buttons erstellst du nun 10 mal eine Schleife durchlaufen. Das geht am schönsten mit der FOR-Schleife. Wenn du aber die while-Schleife verwenden willst: Geht auch. [i = 0; while(i < 10)]. Nun prüfst du noch vorher, ob ResultCount < 100 ist. Wenn nicht, dann soll die Schleife nicht ausgeführt werden.

Allerdings sind das sehr grobe Grundlagen, die Moderatoren Posten dann oft den Artkel [Hinweis] Wie poste ich richtig? hier.

Grüße Dennis Z.

Thema: Konfigurations Tool - aber wie?
Am im Forum: Rund um die Programmierung

Hallo, das sollte man eigentlich beim Erlernen der Grundlagen wissen.

Ich gebe dir trotzdem einen Hinweis:

Bitte erstelle nicht für jedes Szenario eine If-Else-Struktur. Das führt schnell zu Fehlern und ist weder schön noch wartbar.

Erstelle eine Klasse Auto. Dieser Klasse schenkst du noch ein paar Properties, wie z.B. Länge, Farbe (am Besten machst du hierfür eine

List<String>
mit verfügbaren Farben), Preis...

Dann benutzt du den XML-Serializer, um ausgefüllte Auto-Objekte abzuspeichern und bei Programmneustart wieder in das Programm zu laden. Mit dem XML-Serializer kannst du auch eine Liste verarbeiten.

So kannst du dann ganz einfach während dem Programmlauf ein Fenster öffnen, bei dem du ein neues Auto-Objekt aus den Daten eines Dialogs füllst und der Liste hinzufügst.

Bitte mache dich zunächst mit den Grundlagen vertraut. Sollte es wirklich hirgendwo haken, werden wir dir sicher weiterhelfen.

Thema: Größe des UserControls soll im Designer nicht änderbar sein
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Vielleicht ist das BrowsableAttribute das, was du suchst. Dann wird es im PropertyGrid nicht mehr angezeigt.

Anschließend könntest du die Size-Eigenschaft überschreiben und bei dem get-Accessor einen statischen Wert übergeben lassen.

In etwa so:

public override Size Size { 
     get { 
          return new Size(100, 100); 
     }
     set {
          // Do nothing
     }
}

[Edit]Es ist natürlich richtig, was herbivore schreibt. Ganz klar! Habe nicht dran gedacht, nachzuforschen, welches die tiefste Ebene der Size-Setzung ist. Diese sollte man natürlich überschreiben![/Edit]

Thema: [erledigt] Bei mehreren Images bei MouseLeftButtonDown die Quelle des Ereignisses ermitteln
Am im Forum: GUI: WPF und XAML

[FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse)

Thema: Aktualisierungs-Probleme: (Chat-)Fenster ruckelt/hängt bei jeder Datenermittlung/Aktualisierung
Am im Forum: GUI: Windows-Forms

a) Konzept überdenken
a,1) Threading verwenden
a,2) Nur wirklich die GUI aktualisieren, wenn neue Daten vorhanden.
a,3) Vielleicht könntest du die Nachrichten als JSON oder XML übertragen.
a,3) Online_Liste.ForeColor = Color.ForestGreen in einer for-Schleife ist unglücklich; Einmal vorher reicht.
b) Schimpfwortfilter: Regex.Replace mit Option IgnoreCase verwenden. Das Word fUCk würde bei dir nicht gefiltert werden.
b,2) Natürlich in eine Methode auslagern.
b,3) Besser: Schimpfwortfilter Serverseitig einbinden


Weiter: [Hinweis] Wie poste ich richtig? und [FAQ] Warum blockiert mein GUI?

Thema: Ein BackgroundAction-Pool
Am im Forum: .NET-Komponenten und C#-Snippets

Beschreibung:

Ich arbeite derzeit an einer Bibliothek, die einen Pool zur sequenziellen Abarbeitung von gleichen Folgen anbietet. Der Pool wird alle Aktionen hintereinander ausführen, sobald Run(); aufgerufen wurde.
Eine Parallelisierung soll demnächst folgen.

Vorgehensweise zum Verstehen des Projekts: Man erstellt ein Objekt "BackgroundAction<TParam, TResult>".
TParam ist dabei der Typ, der als Übergabeparameter an die Methode übergeben wird.
TResult ist der Typ, der die Methode zurückgibt.

So kann man z.B. eine Massenverarbeitung von Bildern (Thumbnail-Creating) einfach in einen anderen Thread ausgelagert werden.

Jede Aktion triggert ein Event, das das Resultat (return) der Methode besitzt. Das ermöglicht, die Thumbnails z.B. in einer Form direkt anzuzeigen.

Beispiel zu einer Abfolge, die true oder false ausgibt:
Kann zum Beispiel verwendet werden, um eine Datenbank zu installieren, mehrere Dateien aus dem Internet herunterzuladen, usw.
False soll ausgegeben werden, wenn die Aktion eine Exception geworfen hat. Diese kann dann im OnDone-Event verarbeitet werden. Achtung: Nicht im Beispiel implementiert.
Assert.IsNotTrue(e.Success == true);


class VariousActionWithResult : BackgroundTask.BackgroundAction<Action, bool> {
   /* Standard-Konstruktoren */
}
class ActionSuccessPool : BackgroundTask.BackgroundActionPool<Action, bool> {
} 

private IEnumerable<VariousActionWithResult> CollectThingsToDo() {
    List<VariousActionWithResult> ret = new List<VariousActionWithResult>();
            
    // generate actions
    var openDb = new VariousActionWithResult(Do, DummyAction)
        {
            StatusText = "Opening database"
        };
	/* ... */
    ret.AddRange(new List<VariousActionWithResult>()
        {
            openDb,
            /* ... */
        });
    return ret;
}


// Beispielcode
ActionSuccessPool pool = new ActionSuccessPool();
foreach (var actionToDo in CollectThingsToDo()) {
   actionToDo.OnDone += actionToDo_OnDone;
   pool.Add(actionToDo, actionToDo.StatusText);
} // foreach end
pool.OnNextProgress += pool_OnNextProgress;
pool.OnAllDone += pool_OnAllDone;
pool.Run();
WaitAllDone.WaitOne();


Ich bin mir bewusst, dass das .Net Framework 4.0 ebenfalls eine Möglichkeit bietet, solche Algorithmen zu lösen. Doch ich wollte einen Pool haben, der weiter ausgebaut werden soll.

Projekt-URL: https://backgroundactionpool.codeplex.com/

Das Projekt wurde auf CodePlex hochgeladen und im Laufe der Woche weiter aktualisiert; mit eigenen Verbesserungen und euren Verbesserungsvorschlägen.

Wenn jemand Lust hat, aktiv mitzuarbeiten, gerne!

Schlagwörter: Task-Pool, Pool, Threading, Tasks mit Result

Thema: Aus XML-Daten bestimmte Tags samt Inhalt auslesen
Am im Forum: Datentechnologien

Hallo Leute,

ich lasse eine Datei von A nach B senden. Dabei möchte ich die Datei in kleine Parts schicken können. Das muss aber in Parts geschehen, da es ja die berüchtigte 65535 gibt.

Hierzu habe ich eine Klasse geschrieben, die Part, Parts und Data enthält. Alle Parts zusammen und hintereinander sollen dann eine gültige Datei ergeben.
Zum Senden wird die Klasse serialisiert. Empfangen wird dann folgendes: (Das ist der Encoding.Default.GetString( ) - Output)

##########<?xml version="1.0"?>
<SecureMessage xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Message>PARTED_FILE: Programmierkonventionen.pdf</Message>
  <Part>0</Part>
  <Parts>364</Parts>
  <Data>1AEF112185C6C66084C272F77AC ... DB4FE485380677AEC1C26DE3D85810CC6D2B9F</Data>
  <ConnectionId>abf29177-4980-468b-a452-b26b7b817b1f</ConnectionId>
</SecureMessage>####################<?xml version="1.0"?>
<SecureMessage xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Message>PARTED_FILE: Programmierkonventionen.pdf</Message>
  <Part>1</Part>
  <Parts>364</Parts>
 <Data>1AEF112185C6C66084C272F77ACD6 ... 64E4F101B2D97FCD8685C0A60A31C810063F50A</Data>
  <ConnectionId>abf29177-4980-468b-a452-b26b7b817b1f</ConnectionId>
</SecureMessage>####################<?xml version="1.0"?>
<SecureMessage xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Message>PARTED_FILE: Programmierkonventionen.pdf</Message>
  <Part>2</Part>
  <Parts>364</Parts>
 <Data>1AEF112185C6C66084C272F77ACD6 ... 0A60A31C810063F50A688F3B810063354AE28C9</Data>
  <ConnectionId>abf29177-4980-468b-a452-b26b7b817b1f</ConnectionId>
</SecureMessage>####################<?xml version="1.0"?>
<SecureMessage xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Message>PARTED_FILE: Programmierkonventionen.pdf</Message>
  <Part>3</Part>
  <Parts>364</Parts>
  <Data></Data>
  <ConnectionId>abf29177-4980-468b-a452-b26b7b817b1f</ConnectionId>
</SecureMessage>##########

Dies steht dann hintereinander in einem byte[].
Nun möchte ich, dass ich an jedes einzelne <SecureMessage>..</SecureMessage> herankomme, um dieses anschließend deserialisieren zu können. Als Idee zum Patternsearching hatte ich ein START_OF_PACKET und END_OF_PACKET, die hier nun ########## sind. Aber damit bin ich leider überhaupt gar nicht weitergekommen.

Frage: Wie kann ich ein byte-Array "exploden/splitten"?

Guten Morgen, Gute Nacht.

DeZio

Thema: "Programmname" funktioniert nicht mehr.
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Du kannst in der Program.cs vor Application.Run die Application.ThreadException abonnieren und dann loggen.
Ist nicht das schönste, aber so kommt man oft einfach an den StackTrace von unbekannten fehlerhaften Codestellen (, die nicht vorkommen sollten :)).

Thema: Punkte zwischen 2 Punkten ausrechnen
Am im Forum: Rund um die Programmierung

Hallo Community,

ich möchte einen Ball in einem 2 Dimensionalen Koordinatensystem von Punkt A (Start) nach Punkt B (End) bewegen.

Dafür habe ich eine Klasse geschrieben, die eine lineare Liste von Punkten zwischen Start und End berechnen soll.

Derzeit lasse ich jeden Punkt soweit inkrementieren/dekrementieren gehen, bis End.X und End.Y erreicht sind. Das ist natürlich nicht linear.

Nun, ich könnte eine Funktion aus 2 Punkten finden. Dazu benötige ich aber ein lineares Gleichungssystem, das ich programmatisch "solven" müsste.
Leider bieten mir Bibliotheken wie MathNet/MathLib usw. unzureichende Dokumentationen und Tutorials zu diesem Thema.

Könntet Ihr mir vielleicht ein wenig auf die Sprünge helfen?

Thema: Inhalt einer im Browser dargestellten Seite auslesen
Am im Forum: Web-Technologien

Ich verstehe kein Wort...
Du möchtest eine Webseite auslesen, die erst Zutretbar ist, wenn man sich dort vorher angemeldet hat?

Hier eine Idee, die möglicherweise illegal ist. Das musst du auf der Webseite nachlesen, ob das Anmelden und verwenden der Seite via Crawlern, Bots, etc. erlaubt ist. Wenn du Glück hast, gibt es eine API.

Du sendest einen HTTP-POST-Request an die Anmeldeseite (möglicherweise login.php). Als POST-Parameter sendet du alle erforderlichen Anmeldedaten.
Anschließend erhälst du von der Seite Cookies, darunter auch die PHPSESSID.
Anhand der in diesem Cookie abgespeicherten Sitzungs-Nummer wird ein angemeldeter Benutzer erkannt.
Anschließend kannst du einen HTTP-Request mit der PHPSESSID senden und solltest statt eine "Zugriff verweigert"-Seite die gewünschte Seite sehen.

Ansonsten gilt: [Hinweis] Wie poste ich richtig?

Thema: Suche OCR API für PDFs (Free, OpenSource)
Am im Forum: Rund um die Programmierung

Okay... Ich denke, dass du dann einen PDF-Reader für .NET brauchst, der die Bilder herausfiltert.
Diese Bilder kannst du dann, unabhängig vom PDF "Text-Erkennen lassen".

Zum ersten kann ich dir keinen Tipp geben.
Am besten ist, wenn du dir für die OCR-Library selbst ein Bild machst:

C# OCR

Thema: Suche OCR API für PDFs (Free, OpenSource)
Am im Forum: Rund um die Programmierung

Was genau möchtest du denn erkennen? Möchtest du den reinen Text aus PDFs haben?

Thema: SHA1 nicht gleich SHA1 [==> wegen unterschiedlicher Kodierung von Umlauten]
Am im Forum: GUI: Windows-Forms

Genau das meinte ich. Du hast es nur besser dargestellt. Danke :)

Thema: SHA1 nicht gleich SHA1 [==> wegen unterschiedlicher Kodierung von Umlauten]
Am im Forum: GUI: Windows-Forms

Hallo,
lass mal bei beiden Tests das "ü" im String weg. Dann kommen die selben Ergebnisse heraus.

Das liegt vielleicht an folgendem:
Seite 1 nutzt

<meta http-equiv="Content-Type"  content="text/html; charset=ISO-8859-1">
Seite 2 nutzt
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

ISO-8859-1 != UTF-8

Ich denke, dass dadurch einer der Seiten einen falschen Wert (Wer kennt das nicht?) in der POST-Variable hat.

Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

1 bottles? :-)

Thema: Festplatte aktiv halten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich platze ja ungern in die Programmier-Künste, um eine Festplatte am laufen zu halten, aber du solltest unter den Energieoptionen (erweitert) folgendes Fenster mit diesem Eintrag finden:

Thema: Refresh an IE-Prozess senden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Weil die Anzeige von Fehlern im Browser abgeschaltet ist, während es im .NET-Control standardmäßig eingeschaltet ist.

Du kannst es einfach abschalten.

Zum Wrapper: Du kannst ja testen, ob es die selben Elemente sind, indem du einen Rechtsklick machst. Da siehst du in beiden Fällen ein identisches Menü.

Thema: Exejoiner in C#
Am im Forum: .NET-Komponenten und C#-Snippets

Nettes Tool. Daraus lässt sich sicher auch ein eigenes Archivformat machen.
Die Source ist relativ übersichtlich. Vielleicht sollte man noch so etwas, wie das Speichern eines "ExeJoiner"-Projekts zum nachträglichen Bearbeiten von ExeJoiner-Dateien...

Thema: [erledigt] Beim Debuggen erscheint der Fehler: "The process cannot access the file..."
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Schau mal im Task-Manager, ob zu dem Zeitpunkt der Fehlermeldung deine ${Output}.(vshost.)exe zu finden ist.

Da wird wahrscheinlich das Problem liegen.
Es ist aber Möglich, dass es eine andere Datei ist, auf welche das Programm zugreifen möchte.

Dass er die Datei neuschreiben will, wenn du einen Code änderst - ist klar... Und wenn die Datei noch läuft und dies dann nicht geht - ist ebenfalls klar.
Wenn du F5 drückst und nach dem letzten Debugging kein Code verändert wurde, wird auch nicht neu kompiliert.

Thema: WebBrowser-Control: Inhalt einer Webseite auslesen die noch Inhalte nachlädt
Am im Forum: GUI: Windows-Forms

Wenn ein Objekt mit einer bestimmten ID bei ungeladenen Inhalten "NULL" oder halt leer ist, könntest du in einem Extra-Thread mit einer Schleife prüfen und dann ein Event (invoked) auslösen, wenn der Inhalt verändert wurde.

So würde ich es, denke ich, lösen. Vielleicht gibt es aber auch noch eine schönere Variante.

Thema: Visual C# 2010 Express lässt sich nicht installieren
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Mach mal lieber einen Screenshot vom nicht-Erfolg der Installation... Was genau hindert dich an der Installation? Geht der "Weiter"-Button nicht? Gib uns mal mehr Input!

Thema: Control gesucht! (ähnlich wie ComboBox, aber mit Mehrfachauswahl)
Am im Forum: GUI: Windows-Forms

Bei solch scharfen Kriterien empfehle ich dir, ein eigenes Control dafür zu basteln.

Thema: Auswahlrahmen ziehen (nicht im egenen programm, sondern überall)
Am im Forum: Grafik und Sound

Aber es gibt einen "Trick", mit dem du das kannst:

this.BackColor = Color.Lime;
this.TransparencyKey = Color.Lime;
im Konstruktor oder von mir aus auch im Designer auswählen und schon werden Pixel, die "this.TransparencyKey" gleich sind, "transparentiert" :)

Thema: HttpRequest mit Post liefert anderen Response als im Browser
Am im Forum: Web-Technologien

Ja, du wirst einen Zugriff auf eine API gebrauchen müssen, die dir nach dem Anmelden eine Sitzungs-ID übermittelt.

Mit dieser kannst du dann dort arbeiten.

Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

Okay... source.Count<TElement>() als 2. Parameter in new Random sollte eh iCount werden - aber das tut ja nichts zur Sache. 2 sind's trotzdem :D

// Edit
Schwierige Sache. Ich habe eine 2. Idee gehabt: Erst OrderBy Random (1 Durchlauf) - und dann das erste Element [0] durch ToList() returnen. Bei Fehler eben throw Excption - aber ich denke: ToList() läuft die IEnumerable ein zweites Mal durch. Oder?

Würde so aussehen:

    public class TElement { public int Index = 0; }

    internal class Program {
        private static Random m_objRand;

        private static void Main () {
            List<TElement> source = new List<TElement>();
            source.Add(new TElement() { Index = 0 });
            source.Add(new TElement() { Index = 1 });
            source.Add(new TElement() { Index = 2 });
            source.Add(new TElement() { Index = 3 });
            source.Add(new TElement() { Index = 4 });
            for (int i = 0; i < 2; i++) {
                TElement rand = PickRandom(source);
                Console.WriteLine(rand.Index);
            } // for end
        }

        
        public static TElement PickRandom (IEnumerable<TElement> source) {
            if (m_objRand == null) m_objRand = new Random();
            try {
                return source.OrderBy(obj => m_objRand.Next()).First();
            } // try end
            catch {
                throw new Exception();
            }
        }
    }

// Edit 2: Hab die Lösung! Man benötigt nicht "ToList()" - man kann auf die Methode First() zurückgreifen :)



Grüße
Dennis Z.

Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk


private static Random m_objRand;

public TElement PickRandom (IEnumerable<TElement> source) {
    if (m_objRand == null)  m_objRand = new Random();
    int iCount = source.Count<TElement>();
    if (iCount == 0) throw new Exception("COUNT darf nicht 0 sein.");
    int iIndex = 0;
    int iRandomObjectIndex = m_objRand.Next(0, source.Count<TElement>());
    foreach (TElement obj in source) {
        if (iIndex == iRandomObjectIndex) {
            return obj;
        } // if end
        iIndex++;
    } // foreach end
    return null;
}
Ich denke, die Antwort ist zu "einfach" oder? :D

Thema: Kassenbon als Vorschau in einem Winform darstellen
Am im Forum: GUI: Windows-Forms

Es gibt mehrere Möglichkeiten.

Zunächst: [Hinweis] Wie poste ich richtig?
weiter: [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox)

Thema: Anzahl bestimmter Controls auf einem Panel ermitteln?
Am im Forum: GUI: Windows-Forms

Theoretisch würde doch auch mittels Lambda folgendes Konstrukt funktionieren, oder?

int i = panel1.Controls.Count<Control>(c => (c is PictureBox));

Thema: Anzahl bestimmter Controls auf einem Panel ermitteln?
Am im Forum: GUI: Windows-Forms

Hallo,

du kannst die Anzahl der PictureBoxen z.B. so zählen:


int i = 0;
foreach(Control c in panel1.Controls) {
    if(c is PictureBox) i++;
}
// Anzahl der Pictureboxen steht nun in "i"

Trotzdem: [Hinweis] Wie poste ich richtig?