Hallo,
Ich habe den Code soweit es geht fertig das einzigste was mir jetzt noch Probleme macht sind die Linien könne mir da wer ein Tipp geben wie ich die Linie in die Mitte des Panels bekomme?
if (radioButtonLinie.Checked == true)
{
var centerx = panel1.Bottom +10;
var centery = panel1.Top +10;
timer1.Interval = Convert.ToInt32(numericUpDownTimer.Value * 1000);
e.Graphics.DrawLine(Pens.Black, centerx - pos, centery - pos, pos * 2, pos * 2);
}
}
So wie er jetzt ist wird die Linie rechts oben am Rand gezeichnet leider
wäre für jede Hilfe Dankbar
StreamWriter verwendet, wenn man kein Encoding angibt, UTF-8. Und schreibt von sich aus natürlich auch keinen BOM.
Die meisten Windows Applikationen nehmen, wenn sie "einfach nur ein Textfile" bekommen, an, dass es die System-Codepage verwendet. Die in Westeuropa üblicherweise CP1252 ist. Und damit bei non-ASCII Zeichen überhaupt nicht kompatibel mit UTF-8.
=> Als UTF-8 geschrieben, als CP1252 interpretiert => kann nicht funktionieren.
Lösung 1: System Default Codepage für den StreamWriter verwenden (=normalerweise CP1252, bzw. was das System halt verwendet). Sollte für Zeichen funktionieren die in 8 bittigen Textfiles von Notepad korrekt angezeigt werden. Andere Zeichen werden vermutlich zu "?". Hab's aber nicht ausprobiert -- es könnte genau so sein dass ne Exception fliegt wenn man versucht nicht im Ziel-Encoding darstellbare Zeichen zu schreiben.
' Ja, die explizite Angabe von System.Text.Encoding.Default bewirkt hier NICHT das selbe wie wenn man das Argument einfach weglässt!
' Nicht sehr intuitiv, aber ist halt so.
Dim sw As New System.IO.StreamWriter(fs, System.Text.Encoding.Default)
...
Lösung 2: Weiterhin UTF-8 verwenden aber BOM in das File schreiben. Funktioniert für alle Zeichen. Dafür werden u.U. manche Programme das File nicht mehr korrekt lesen können. Excel 2010 sollte das mMn. aber schon verstehen.
Dim sw As New System.IO.StreamWriter(fs)
sw.Write(ChrW(&HFEFF)) ' BOM schreiben
' (Muss als allererstes ins File geschrieben werden, sonst bringt's nix)
...
Diese Variante funktioniert genau so wenn man UTF-16 bzw. ein anderes UTF-Encoding verwendet. Wobei fraglich ist ob es Windows-Programme gibt die z.B. mit UTF-32 etwas anfangen können
@NullBockException
Es gibt zwei Formatter die direkt ISerializable unterstützen, den BinaryFormatter und den SoapFormatter . Andere muss man sich ggf. selbst schreiben (oder ergoogeln, gibt sicher ein paar fertige, open-sourcige die man verwenden kann).
NullBockException schrieb:
Ich dachte ich wäre "Format"- Frei wenn ich "ISerializabe" verwende!
Bist du auch - mehr oder weniger. Schreib dir nen eigenen Formatter
@MasterQ32
MasterQ32 schrieb:
ISerializable gibt dir als Interface nur an, dass die Klasse "serialisierbar" ist, eine weitere Auswirkung hat es, soweit mir bekannt, nicht.
Dann guck dir mal die Doku zu ISerializable an. Du musst da selbst implementieren wie das Objekt serialisiert wird, und damit die Sache funktioniert auch noch einen passenden Ctor implementieren (der dann die Deserialisierung übernimmt).
Das reine "Mascherl" mit dem man nur sagt "ja, ist serialisierbar" ist das SerializableAttribute .
MasterQ32 schrieb:
Zudem ist nicht jede Klassenstruktur serialisierbar (Ringverweise, ...)
Auch nicht ganz richtig. Zumindest der BinaryFormatter kann zyklische Graphen serialisieren und korrekt wieder deserialisieren.
Hallo
Aber wenn dir doch alles nicht passt, dann wirst es selbst implementieren müssen. Kannst dir ja vom autoupdater.NET ein paar Idee holen.
Aber im Grunde würde ich folgenden Weg gehen:
- eine starr exe schreiben, über der das Progeamm gestartet wird und die zyklisch prüft ob eine neue Version vorliegt.
- dein eigentliches Programm in einen Unterordner neben der Start exe legen und dem Ordnernamen am einfachsten eine Versionsnummer geben
- wenn eine neue Version erkannt wurde, dann Programm herunterladen und in einem Download Ordner speichern
- wenn Download abgeschlossen dann Download in Versionsnummer umrennen
- beim Start der Start.exe muss dann noch geprüft werden, welche die aktuellste Version ist und die soll gestartet werden, und die anderen können gelöscht werden.
Damit solltest du alles haben was du dir gewünscht hast.
Und wenn du es gut verpackst können es auch mal andere verwenden.
MFG marco
PDF Files sind dummerweise nicht ganz einfach zu "scrapen"*.
Je nachdem wie die PDFs mit denen du es zu tun hast aufgebaut sind kann dein Vorhaben also schwierig werden.
Guck dir mal iTextSharp an:
http://sourceforge.net/projects/itextsharp/
Laut http://stackoverflow.com/questions/83152/reading-pdf-documents-in-net soll das gut geeignet sein um PDFs mit einem C# Programm zu parsen.
Ansonsten, falls die Lösung nicht 100% automatisch funktionieren muss, kannst du mal die hier beschriebenen Tools probieren:
http://www.interhacktives.com/2014/03/12/extract-data-pdf/
*: Mit "scrapen" meine ich das automatische Suchen und Extrahieren von bestimmten Informationen aus einem grösseren Dokument. Das Parsen des PDF Formats selbst wird vermutlich nicht so komplex sein. Nur dummerweise garantiert dir keiner dass von der "Tabelle" im PDF Dokument noch etwas übrig ist was ein Programm leicht erkennen kann. Im schlimmsten Fall hast du haufenweise kleine Grafik- und Textfetzen die in komplett unsinniger Reihenfolge im PDF enthalten sind. Wenn man sie rendert kommt dann ne schöne Tabelle raus, nur sowas mit einem Programm vollautomatisch zu analysieren kann schwierig sein.
Wie in dem von Mechanics verlinkten Artikel geschrieben, ist Schichtentrennung das wichtigste (einen kurzen Einblick gibt es auch unter Drei-Schichten-Architektur). Dazu dann am besten einen passenden IoC-Container wählen (so daß mittels Constructor-Injection dann auch die Unit-Tests sauber programmiert werden können - welche dann ein Mocking-Framework wie Moq verwenden).
Hm merkwürdig. Dann muss ich nochmals Debuggen - habe vll. was übersehen oder falsch interpretiert. Ich melde mich falls es immernoch nicht hinhaut!
Danke für die Mühe mit dem Nachbau!
Charlie
Hallo,
und zwar habe ich eine Frage bezüglich des Image Controller in ASP.NET!
Ich möchte eine gif Datei einbinden und die beim Button Klick anzeigen lassen, soweit so gut!
In normal fall nutze ich ja die Update oder Refersh Funktion was das Object neu zeichnet und somit es Aktualisiert!
Da aber diese Funktionen nicht in ASP.NET gibt frage ich mich wie ich das denn da bewältigen soll!
Ich habe schon die MSDN durchgeschaut aber nix gefunden
Gibt es da eine möglich das in ASP.NET zu machen?
Oder gibt es eine Funktion was Objecte neu erstellt bzw Zeichnet?
Wie ich z.B Label imgae usw.. als Parameter übergeben kann?
Gruß
Dravere schrieb:
Falls es übrigens zu Problemen kommt, weil Windows zu einem Server sich nur mit einem Konto gleichzeitig verbinden kann und daher die Verbindung über den Administrator Account fehlschlägt, kann man statt des Servernamen auch einfach die IP-Adresse angeben und das Problem damit umgehen.
Huch?
Ich dachte das Problem existiert nur wenn man Netzwerklaufwerke verbindet oder so.
Seit ich in meinen Programmen LogonUser(...LOGON32_LOGON_NEW_CREDENTIALS...) + ImpersonateLoggedOnUser verwende um auf Netzwerk-Shares (oder auch MSSQL Datenbanken) zuzugreifen hab' ich das Problem auf jeden Fall nicht mehr.
Ist das Utility wirklich zu doof es so zu machen dass es einfach funktioniert?
ps: Danke für die Info
Ja danke für den link!
Genau das brauche ich
Ja, also das mit der Klasse ist ein wenig anders, und das mit Array und list <> benutze ich auch im Projekt bereits ganz oft, bloß scheint mir für diese Aktion es so besser (Es sieht nicht schön aus, das stimmt schon), aber es funktioniert so wie ich es will, und kann damit ganz leicht wunderbar arbeiten
(Die Hauptsache ist das es Fehlerfrei funktioniert!
Gruß
Einen anderen weg wirst du nicht finden außer die Variable vor betreten des try-catch-Blockes zu definieren.
Wird die Variable im Try-Catch-Block erst definiert, ist sie auf Grund des tieferen Scopes außerhalb nicht mehr vorhanden. Damit will ich sagen: Du kannst von einem übergeordneten Scope nicht auf Variablen von untergeordneten Scopes zugreifen.
Was willst du überhaupt erreichen?
Hallo,
folgende Anmerkung:
string path = Directory.GetCurrentDirectory() + "\\" + textBox1.Text;
Verwende stattdessen besser:
string path = Path.Combine(Directory.GetCurrentDirectory(), textBox1.Text);
Damit spars du dir das unschöne String zusammen gehacke. Intern passiert da zwar vermutlich auch nix anderes, aber's sieht einfach schöner aus.
Hast Du nach der Fehlermeldung schon einmal bei Google gesucht? https://msdn.microsoft.com/de-de/library/44ezxxy3.aspx
Ich kann es gerade nicht ausprobieren, aber versuch doch mal
oDoc.Bookmarks(@"\Line").Range.InsertBreak(Word.WdBreakType.wdPageBreak);
Servus
Am einfachsten ist es, wenn du die MainForm damit beauftragst. Hier kommt es nun nur drauf an, mit was du arbeitest.
Mit WinForm findest du die MainForm im ApplicationContext: MSDN. Dort kannst du dann via BeginInvoke() die Abfrage abschicken.
Bei WPF findest du es unter "Application.Current.MainWindow" (bzw. alle geöffnete unter "Application.Current.Windows"). Dort kannst du dann mit dem Dispatcher am Window arbeiten.
MfG Marco