Laden...
.
.tim myCSharp.de - Member
Softwareentwickler Mainz Dabei seit 21.12.2006 332 Beiträge
Benutzerbeschreibung

Forenbeiträge von .tim Ingesamt 332 Beiträge

19.09.2007 - 10:06 Uhr

Guten Morgen alle zusammen.

Ich möchte gerne einen OKI Microline 590 Elite ansprechen.
Der Druck funktioniert im A4 Format auch einwandfrei.

Jetzt handelt es sich aber um Etiketten, welche auf Endlospapier vorhanden sind.

Der Crystal Report Bericht hat die Grösse von einem Etikett, auch bei dem Drucken Dialog habe ich das richtige Format angegeben.

Der Drucker gibt trotzdem eine A4 Seite heraus.

Kann mir jemand sagen was ich falsch mache?
Ist der Drucker vielleicht zu alt? 😉
Kann ich das Format vielleicht schon im Vorraus definieren?

Folgender Code ist für den Druck zuständig.

PrintDialog pd = new PrintDialog();
            DialogResult dr = pd.ShowDialog();
            if (dr == DialogResult.OK)
            {
                ReportDocument report = new KrebsWin.Reports.Etikett();
                report.PrintOptions.PrinterName = pd.PrinterSettings.PrinterName;
                report.PrintToPrinter(1, false, 0, 0);
            }

Vielen Dank für eure Hilfe.

Gruss
.tim

01.08.2007 - 17:31 Uhr

Original von DeveloperX
Bzw. genauer das hier:
>
(sogar gleich mit C#-Implementierung 😉 )

Danke, die Sachen werde ich mir mal genauer anschauen.

01.08.2007 - 15:36 Uhr

Das Problem ist leider, dass keine EAN bzw. PZN für die Produkte (meistens Medikamente) bekannt ist. Bei der Lösung muss es deshalb eine Prüfung geben wieviele Wörter wie ähnlich sind. Ich werde erstmal alle Wörter splitten und auf Eindeutigkeit überprüfen. Die restlichen Wörter werde ich dann über Bigramme vergleichen. Oder fällt euch etwas besseres ein.

01.08.2007 - 12:27 Uhr

Es geht darum ich habe z.B. die Strings
"Aspirin 10mg"
"Aspirin 20mg"
"Bla Aspirine (10mg)"

Nun möchte ich wissen "wie ähnlich" Aspirin 20mg und Aspirin (10mg) zu "Bla Aspirine 10mg" ist.

Ich kann nicht davon ausgehen das die Beschreibung eines Datensatzes der gleiche ist. Deshalb brauche ich einen komplexen Algorithmus der eine Wahrscheinlichkeit ermittelt. Soundex und Bigramme reichen dabei leider nicht. Bzw. der mir bekannte Algorithmus von Bigrammen ist nicht ausreichend, da jedes Zeichen gleich bewertet wird. Kennt jemand einen umfangreichen Algorithmus?

EDIT: Um mit Contains arbeiten zu können, müsste man die komplette eindeutige Basismenge kennen.

01.08.2007 - 12:04 Uhr

Hallo alle zusammen. Ich habe eine Tabelle in der mehrfach ähnliche Einträge vorhanden sind. Nun möchte/muss ich die doppelten Einträge zusammenführen.

Gibt es einen guten Algorithmus vielleicht als .NET Lib, die Strings vergleicht und die "Ähnlichkeit" ausgibt? Dabei kann es z.B. auch vorkommen das ein doppelter Eintrag noch zusätzliche Informationen in dem String enthält.

Ich wäre für Vorschläge etc sehr dankbar.

Vielen Dank und Gruss
.tim

20.07.2007 - 11:14 Uhr

Hallo,

bei meinem Projekt eine C# Anwendung zu schreiben, welche die CTI Funktionen der Telefonanlage nutzt, bin ich schon am Anfang auf Probleme gestossen.

Hat bereits jemand etwas damit gemacht. Es soll sich bei uns um eine Third Party Lösung handeln.

Meine Fragen sind eigentlich ganz einfach^^

Wird TAPI dafür benutzt oder ist das nur für First Party oder andere Techniken?

Wie kann ich der Telefonanlage sagen, dass Telefon xy die Telefonnummer xyz wählen soll. Wie kann ich auf ne Art Event zugreifen das bei einem eingehenden Anruf ausgelöst wird. Dabei benötige ich z. B. die Telefonnummer des Anrufers.

Ich habe mir mal das ECMA 269 und TR/82 durchgelesen. Daraus werde ich aber leider auch nicht schlau. Gibt es eine CTI Klasse oder muss ich es Bit für Bit per Socket senden/empfangen.

Dann habe ich etwas von Meridian-Link-Protokoll gelesen. Leider ist das aber ein Protokoll für eine andere Telefonanlage und die Recherche in der Richtung hilft mir leider auch nicht weiter.

Bitte helft mir, ich finde keinen wirklichen Einstieg in das Thema.

Gruss
.tim

06.07.2007 - 12:31 Uhr

Ich wüsste nicht was. Auf das Rendern habe ich keinen Einfluss. Die Berechnungen innerhalb der Reports werden korrekt durchgeführt. Das Resultat ist richtig, aber wieso dauert es so lange. Ist die in VS2005 enthaltene Version vielleicht nicht so leistungsstark?

05.07.2007 - 10:49 Uhr

Das Problem existiert leider noch immer. Kennt niemand eine Möglichkeit das KeyHandling von dem MainMenü zu entfernen?

05.07.2007 - 10:46 Uhr

Hallo, ich benutze Crystal Reports. Damit habe ich bereits mehrere Reports erstellt die auch schnell erstellt und gedruckt werden.

Bei einem Report habe ich jedoch ein Problem.
Es handelt sich um ein Report mit einem Dataset mit 2 Tabellen (Kunden, Artikel).
In der Ausgabe soll zu jedem Kunden die bestellten Artikel für einen festen Zeitbereich angezeigt werden. Das Erstellen des DataSets ist in einpaar Sekunden erledigt. Bei den Demodaten sind es 808 Kunden nd 1630 Artikelpositionen.

An der Stelle an der der Report gedruckt (report.PrintToPrinter) oder gespeichert (report.SaveAs) wird, dauert die Routine ca. 40 Minuten, was viel zu lange ist. Es handelt sich bei der Software um eine Neuentwicklung. Die bisherige Version ist in Fox Pro erstellt. Das Erstellen und Drucken des Reports aus der alten Anwendung dauert ca. 3 Minuten.

Auch habe ich bemerkt, das beim spoolen der alte Fox Pro Report pro Seite ca 0,03 MB benötigt und der Crystal Report 0,16MB. Wieso ist der Report mehr als 5 mal so gross? In dem Report sind nur Linien und Texte.

Ich hoffe auf eure Hilfe.

Gruss
.tim

04.07.2007 - 10:40 Uhr

Danke schön 🙂

04.07.2007 - 09:54 Uhr

Ok danke. Werde ein bisschen rumprobieren wie es am besten passt.

03.07.2007 - 16:13 Uhr

DefaultView ist aber nicht typisiert. D.h. ich habe meine typisierte DataTable und lasse sie über das DefaultView sortieren. Nun führe ich ToTable() aus, damit ich die sortierte Tabelle bekommen. Nun habe ich aber auch die Typisierung verloren, also habe ich wieder nur eine DataTable.

03.07.2007 - 14:25 Uhr

Das Problem ist, ich habe Crystal Reports die diese typisierten DataTables bzw. DataSets benutzen. Beim Erstellen der DataTables kommen die Informationen aus verschiedenen Quellen deshalb kann ich vorher nicht gut sortieren und wollte gerne die implementierten Methoden des Views benutzen.

EDIT: Die Identifikation, welcher Report benutzt wird, geschieht anhand des Types des DataSets. Da das bereits alles umgesetzt ist, möchte ich nicht den ganzen Code umwerfen.

03.07.2007 - 13:00 Uhr

Ich finde das typisierte View leider nicht an dem DataSet. Kannst du mir bitte sagen wo ich das finden kann?

Vielen Dank
.tim

02.07.2007 - 14:08 Uhr

Das sortieren über den DefaultView ist nett. Habe nämlich ein ähnliches Problem. Ich möchte aber eine typisierte DataTable sortieren. Hast du dafür auch einen guten Tipp? Da ja die Methode ToTable eine DataTable zurückliefert.

Gz
.tim

29.06.2007 - 15:37 Uhr

Das verstehe ich halt auch nicht.
Wenn ein Breakpoint bei dem Event KeyUp des MainForms gesetzt wird (MainForm.KeyPreview = true), hält dieser nicht bei Alt+D aber z.B. bei Alt+S. Jetzt frage ich mich was an meinem Code falsch sein kann.

Man kann auch nicht abschalten, dass das Menü auf Alt reagiert?

Bei mir läuft es im mom so. Ich möchte die Tastenbefehle nicht global in der MainForm implementieren sondern in den jeweilgen Controls die je nach Content geladen werden. Damit die Taste nicht mehrfach belegt wird, ist das natürlich dokumentiert.

Technisch habe ich das so umgesetzt, dass ich ein Interface erstellt habe. Dieses Interface hat die Methode GlobalKeyUp. Wenn das Event KeyUp des MainForms ausgelöst wird, iteriert es die Controls (rekursiv) und schaut per Reflection ob das Control das IGlobalKeyUp Event implementiert hat. Wenn das der Fall ist, wird die GlobalKeyUp Methode invoked.

So habe ich nun die Controls, die auf verschiedene Tastenkürzel reagiert. Alles funktioniert ausser Alt+D.

28.06.2007 - 12:14 Uhr

Ich möchte das Thema noch einmal aufrollen.

Aktueller Stand:
Ich benutze nun das MenuStrip mit 2 Menüpunkten, die auch noch Menüpunkte haben. Bei keinem Menüpunkt ist ein "&" im Namen vorhanden. Die Menüpunkte heissen "Datei" und "Stammdaten". Wenn ich nun Alt+S drücke wird das Key-Up Event ausgelöst und Stammdaten bekommt den Fokus. Das ist zwar nicht schön aber hinnehmbar. Natürlich wäre es schön wenn man den Fokuswechsel aufs Menü verhindern könnte.

Mein Problem ist aber wenn ich die Tastenkombi Alt+D drücke. Dabei wird das Event nicht ausgelöst und nur der Fokus aufs Menü "Datei" gesetzt.

Weiss jemand an was das liegen kann. So langsam nervt die Sache. Ich weiss das es kein Standart ist die Alt Taste fürs Menü zu deaktivieren, aber es sollte doch möglich sein.

Für jede Hilfe bin ich sehr dankbar.

Gruss
Tim

26.06.2007 - 17:59 Uhr

Ok danke 🙂

26.06.2007 - 17:49 Uhr

Ich sollte dazu sagen, dass die Anwendung im FW 1.1 angefangen wurde. Ich habe gesehen, dass es nun MenuStrip gibt. Dieses erzeugt diesen Fehler nicht mehr. Ich weiss zwar nicht ob ich mein Menu einfach ersetzen kann, aber werde es mal probieren.
Falls du damit ein Problem siehst sag bitte bescheid

26.06.2007 - 17:41 Uhr

Habe Form.KeyPreview = true eingebaut, vielen Dank dafür.
Diese rekursive Geschichte habe ich rausgenommen. Das Resultat hat sich nicht geändert.

26.06.2007 - 17:37 Uhr

Die "&-Marken" waren anfangs integriert. Nun habe ich sie rausgenommen, aber es wird nun das erste Zeichen benutzt. Dieser Unterstrich ist aber selbst bei gedrückter Alt Taste nicht mehr zu sehen.

26.06.2007 - 17:29 Uhr

Hallo ich habe folgendes Problem. Wir entwickeln für einen Kunden eine Software neu. Innerhalb der bisherigen Software konnte der Kunde über Tastenkombinationen mit ALT in Bereichen arbeiten. (z.B. im Kundenstamm einen Kunden suchen = Alt+S).

Diese Funktionalität möchte ich nun auch gerne Umsetzen. Dafür habe ich rekursiv alle Controls des MainForms durchiterriert und das KeyUp Event einem Delegate zugewiesen. Wenn ich das Delegate debugge erhalte ich auch gültige Werte. Wenn ich nun im Kundenstamm einen Kunden suchen möchte Alt+S wird das Event nicht ausgeführt sondern nur das MainMenu mit dem Eintrag "Stammdaten" aufgeklappt.

Jetzt ist die Frage wieso und wie kann man es deaktivieren? Wie würdet ihr bei sowas vorgehen? Kennt ihr alternativen?

Vielen Dank für eure Ideen etc.

Gruß
Tim

12.06.2007 - 18:06 Uhr

Vielen Dank svenson. Kennt jemand eine Möglichkeiten diese Geschichte auszublenden. Ich habe ein Projekt das sehr viele von diesen First Chance Exceptions wirft. Da ich aber auch noch eigene Debugging Infos benötige, wäre es super das kurzeitig auszuschalten.

12.06.2007 - 16:21 Uhr

Original von SeboStone
System.InvalidCastException: wahrscheinlich versuchst Du eine Variable eines bestimmten Typs mit einem Wert eines anderen (ähnlichen) Typs gleich zu setzen.

Danke für die Info aber was die Exception bedeutet weiss ich. Mir stellt sich die Frage wieso eine Exception in der Ausgabe erscheint. Entweder die Exception wird geworfen oder behandelt. Welcher Fall ist das bei der Ausgabe? Das "Erstaunliche" ist auch das scheinbar die Exceptions in Frameworks Libs geworfen werden.

12.06.2007 - 14:58 Uhr

Hallo, ihr habt doch schon Zeile wie:

Eine Ausnahme (erste Chance) des Typs "System.InvalidCastException" ist in System.Data.dll aufgetreten.

in der Ausgabe von VS sehen können.

Was bedeutet es, dass diese Ausnahme in der Ausgabe erscheint. Mein Debugger meldet keine Exception.

Wie kann ich die Anzeige deaktivieren oder wie kann ich den "Fehler" beheben?

Danke für eure Hilfe.

Gruss tim

25.05.2007 - 10:19 Uhr

Danke, habe das Problem lösen können.

24.05.2007 - 18:49 Uhr

Ich nehme an, dass er DVI meint. Ich kenne zwar den DVI Standard nicht wirklich gut aber soweit ich weiss überträgt dieser Analog und Digital. D.h. ein Monitor mit DVI Anschluss nutzt das Signale Signal. Ein Monitor mit VGA Anschluss das Analoge. Der Adapter DVI-> VGA wandelt nicht sondern legt nur die Pins mit den analogen Signalen auf den VGA Stecker.

Ich habe auch mal gehört, dass es optional ist, ob DVI bzw. die Grafikkarte auch die analogen Signale sendet.

Wenn man eine Grafikkarte mit analogen und digitalen Ausgang benutzt, sollte man bedenken, dass die Qualität sehr unterschiedlich ausfallen kann.

24.05.2007 - 18:33 Uhr

Hallo,
ich habe vor einiger Zeit ein UserControl erstellt.

Nach einpaar Wochen wollte/musste ich nocheinmal über den Designer an das UserControl.

Leider erscheint nun der Fehler:

_Beim Laden des Designers sind die nachfolgend aufgeführten Fehler aufgetreten. Einige können durch Neuerstellen des Projekts behoben werden, andere erfordern möglicherweise Änderungen am Code. _

**Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Ausblenden **

bei System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)
bei System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement)
bei System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement) 

Leider hilft mir der StackTrace nicht wirklich weiter. In dem UserControl benutze ich diese Methode nicht. Es erstaunt mich, dass in dem StackTrace kein Aufruf von meinem Projekt aufgeführt ist.

Das Projekt lässt sich kompilieren und fehlerfrei ausführen. Die GUI funktioniert auch einwandfrei.

Hatte schonmal jemand das Problem oder hat eine Idee an was das liegen kann?

Gruss
.tim

24.05.2007 - 12:07 Uhr

Ich meinte damit eher. Sowas wie eine kurze Beschreibung habe ich gesucht. Das sollte nicht bedeuten, dass ich die Beschreibung von onlinegurke ausreichend, dass aber auch nicht mehr nötig ist, finde.

Man kann sich unter Erklärungen wie

Sie können mit der DynamicMethod-Klasse eine Methode zur Laufzeit generieren und ausführen

nicht wirklich etwas vorstellen. Jetzt kommen bestimmt wieder Anmerkungen das irgendjemand mit dem Satz mehr anfangen kann.

Ich möchte mich trotzdem für die sonstige Hilfe und Vorschläge bei allen Bedanken. Die Diskussion können wir von mir aus hiermit beenden.

24.05.2007 - 10:57 Uhr

Original von onlinegurke
..., es handelt sich dabei um eine Methode, die dynamisch - also zur Laufzeit - erzeugt wird. Aus diesem Grund kann eine solche Methode auch nur als Delegate aufgerufen werden, weil man sie ja zur Compilezeit noch nicht kennt. ...

Genau sowas hatte ich gesucht, danke.

23.05.2007 - 18:54 Uhr

Hallo,

den Artikel How to: "Define and Execute Dynamic Methods" habe ich gelesen, dadurch habe ich teilweise verstanden was eine dynamische Methode ist. Da es bei dem Artikel um das "Wie" ging, weiss ich nun wie man diese Methode erstellt. Leider ist mir dadurch unklar für was ich das in meinem Fall gebrauchen kann. Darum ging es mir in meiner Frage. Was kann ich damit machen bzw. was ist eine dynamische Methode. Ich habe auf verschiedenen Seiten und in der Forensuche nach einer Beschreibung gesucht, leider kein Erfolg.

Mein Wille ist da, für die Suche was überhaupt eine dynamische Methoden ist.

Jemand der kein Auto kennt, würde um es für sich definieren zu können, die Antwort ein Fortbewegungsmittel mit 4 Rädern helfen. Stattdessen findet er einen Artikel über "Wie fahre ich Auto?". Diese Person wird auch erstmal versuchen auf seine "einfache" Frage eine Antwort zu finden.

Bei Properties bist du der Meinung, dass bei dem set-Block, sowas wie folgendes enthalten sein muss?

set
{
if(value!=kunde)
{
kunde = value;
// weiterer Code
}
}

Ist das nur deine Meinung oder ist das Pflicht beim Entwickeln von Eigenschaften?

Danke
.tim

23.05.2007 - 15:11 Uhr

Vielen Dank jetzt verstehe ich was die Problematik ist. 🙂

23.05.2007 - 14:09 Uhr

Original von FZelle
Der ILCompiler vom FW 2.0 kann aber Property Setter/Getter inline Expandiieren,
dann fehlt der Stackframe, also macht es Probleme.

Was genau kann ich mir unter "inline Expandiieren" vorstellen?

Das mit dem Binding ist mir klar, danke.

23.05.2007 - 12:22 Uhr

Danke, eine Quelle in Deutsch wäre mir zwar lieber....(Wörterbuch such)...aber trotzdem danke 🙂

23.05.2007 - 11:34 Uhr

Original von herbivore
Hallo .tim,

Kann mir jemand 1-2 Sätze dazu sagen.
die Forensuche liefert dir bestimmt mehr als 1-2 Sätze dazu. Bitte die besten Treffer hier posten. Vielen Dank!

herbivore

Leider habe ich nichts hilfreiches gefunden.

Original von VizOne
Alles andere halte ich angesichts der Problembeschreibung für - sorry - overkill und großen Humbug (vom Lehreffekt mal abgesehen).

Danke, vielleicht hast du Recht und ich habe mich auf die "SetOrForget-Methode" festgefahren.

23.05.2007 - 11:27 Uhr

Original von herbivore

Leider bin ich bei der Performance-Analyse auf eine weitere Herausforderung gestoßen. Im Moment funktioniert mein Code nur im Debug-Modus zuverlässig, da im Release-Modus scheinbar die Aufrufe des Setters wegoptimiert werden (inline). Es gibt dann also keinen Stackframe für den Aufruf des Setters und entsprechend liefert GetStackframe (1) den Stackframe der Methode, die den Setter aufruft. Damit schlägt aber die Ermittlung von strProperty und typDeclaring fehl. Die Prüfung kann nicht durchgeführt werden. Leider werde ich mich vermutlich erst in zwei Wochen diesem Thema wieder intensiv widmen können.

herbivore

Hallo, ich habe leider noch nicht wirklich viel mit Attributen gemacht. Der Artikel hat mir aber sehr geholfen dem Thema Attribute und AOP etwas näher zu kommen.

Mir ist leider nicht wirklich klar wieso der Compiler etwas wegoptimiert und wieso es durch "NoInlining" behoben wird.

Vielen Dank
.tim

23.05.2007 - 10:28 Uhr

Das sagt mir leider garnichts.
In der Hilfe steht leider nur, dass DynamicMethod eine dynamische Methode darstellt^^

Kann mir jemand 1-2 Sätze dazu sagen. Für was benötige ich das, bzw. was kann ich damit machen?

Vielen Dank.

23.05.2007 - 10:08 Uhr

Ich werde TryParse und Reflektions benutzen.

Danke für eure Hilfe.

EDIT: Meinst du mit "dynamische Methoden" "generische Methoden"?

22.05.2007 - 18:40 Uhr

Vielen Dank Programmierhans, an Reflektions habe ich garnicht gedacht. Das werde ich mir mal durch den Kopf gehen lassen 🙂

22.05.2007 - 18:38 Uhr

x=x ist meiner Meinung nach "Mist".
Das man bei dem set-Block von Eigenschaften nicht sicherstellen kann, das diese beim selben Inhalt keine Befehle ausführen, ist meiner Meinung nach trivial.

Die Referenz soll nicht auf das Feld, das ggf. in der Eigenschaft zugewiesen werden soll, existieren. Sondern auf die Eigenschaft, welche ja wie ich bereits im ersten Beitrag geschrieben habe, eher ein Delegate bzw. ein Funktionszeiger ist.

Meine Idee wäre ja für dieses Problem eine "virtuelle Referenz" welche 2 Delegates enthält, wobei eines für set und das andere für get zuständig ist.

Ob dies eine sinnvolle Umsetzung oder zu voreilig vorgeschlagen ist, müsste in einer längeren Diskussion besprochen werden.

22.05.2007 - 18:08 Uhr

Meine Eigenschaft soll ich dann entsprechend der Rückgabe der Methode setzen?

Dann würde der set-Block der Eigenschaft auch ausgeführt werden, wenn es sich um das Selbe handelt.

D.h ich muss sicherstellen das nur Eigenschaften über diese Methode laufen die entweder im set-Block nur einen Wert einer Variable zuweisen oder das eine Prüfung (value!="bisheriger Wert") stattfinden muss.

Da ich das nicht ausnahmslos Sicherstellen kann, ist die Variante nicht machbar.

Wenn ich eine Überprüfung im Code einbaue stehen wir wieder am Anfang mit der Redundanz und damit verbundenen Problemen.

Trotzdem vielen Dank.

22.05.2007 - 17:15 Uhr

Wenn die Länge der Eigenschaften: source und target ungefähr genauso lang sind finde ich es auch deutlicher. Bei Grössenunterschieden von 30 Zeichen empfinde ich es wie ein Fliesstext^^

Aber wie du bereits auch angemerkt hast, jeder mag es anders 🙂

22.05.2007 - 17:05 Uhr

Die Formatierung habe ich gewählt damit man trotzdem noch die Übersicht behält.

Den TryParse Block in eine Zeile unterzubringen ist unübersichtlicher als lediglich ein Methodenaufruf.

Der zweite wichtige Punkt ist die Zentralisierung.

Leider ist es aber nicht anders möglich.

Trotzdem vielen Dank für eure Hilfe und Denkanstösse.

Das Beispiel zeigt mir aber wiedermal, dass die Eigenschaften schwerwiegendere Nachteile haben, als anfangs gedacht.

D.h ich habe die Vorteile von Feldern UND Methoden aber auch die Nachteile von Feldern UND Methoden. == Mehr Vorteile und Mehr Nachteile 😉

22.05.2007 - 16:21 Uhr

Danke, aber die funktionsweise ist mir schon klar.

Mir geht es nur um die Grösse bzw. die Redundanz des Codes.

Beispiel:

double r;

            if(double.TryParse(source1,  out r)
            {
                    target1 = r;
            }

 if(double.TryParse(source2,  out r)
            {
                    target2 = r;
            }

 if(double.TryParse(source3,  out r)
            {
                    target3 = r;
            }

 if(double.TryParse(source4,  out r)
            {
                    target4 = r;
            }

 if(double.TryParse(source5,  out r)
            {
                    target5 = r;
            }

 if(double.TryParse(source6,  out r)
            {
                    target6 = r;
            }

 if(double.TryParse(source7,  out r)
            {
                    target7 = r;
            }

Das sieht nicht wirklich schön aus^^.

Da ist die Variante:

tryToParseDouble(ref target1, source1);
tryToParseDouble(ref target2, source2);
tryToParseDouble(ref target3, source3);
tryToParseDouble(ref target4, source4);
tryToParseDouble(ref target5, source5);
tryToParseDouble(ref target6, source6);
tryToParseDouble(ref target7, source7);

schon "sauberer". Ausserdem Zentral.
Was ist wenn aufeinmal der Kunde lieber statt dem "alten Wert" eine 0 drin stehen habe möchte. Dafür müsste ich dann nur in der Methode tryToParseDouble eine Zeile ergänzen und nicht in allen Klassen die Tryp Parse "Blöcke" suchen (können schon einpaar Hundert sein.) und diese ergänzen.

22.05.2007 - 16:02 Uhr

Ich habe mir die Methode genauer angeschaut und diese hilft mir nicht wirklich weiter.

Ob ich nun für jede Eigenschaft den Try-Catch-Block schreibe oder ein TryParse benutze macht von der Grösse des Codes nichts aus.
Bei dem TryParse müsste ich eine Prüfung des "out Parameters" machen und je nach Wert eine Zuweisung der Eigenschaft vornehmen.

Ich suche eine Variante wie z.B. eine Methode der ich die Eigenschaft übergebe und diese gesetzt wird, wenn der übergebene String eine "Zahl" ist.

Da es sehr viele Stellen in meinem Programm habe, in dem genauso vorgegangen werden kann, hätte ich mit den beiden genannten "Methoden" sehr viel redundanz im Code.

Edit:
Der Vorteil von TryParse ist im Fehlerfall wahrscheinlich schneller da es keine Exception wirft. Das ist aber in meinem Fall eher zu vernachlässigen.

D.h. einer der folgenden Codezeilen würde sehr oft in dem Code vorkommen.
TryParse:

 double r;
            double.TryParse(source, r);
            if (r != null) target = r;

vs.
Try-Catch-Block:

try { target = double.Parse(source); }
            catch (Exception) { }
22.05.2007 - 15:54 Uhr

Oh danke.

Diese Methode sorgt für das gleiche Ergebnis wie die Methode oder❔

private void tryToParseDouble(ref double target, string source)
        {
            try
            {
                target = double.Parse(source);
            }
            catch(Exception) {}
        }
22.05.2007 - 15:47 Uhr

Hallo,

ich habe eine Klasse mit mehreren double-Eigenschaften.

In meiner GUI steht für jede dieser Eigenschaften eine Textbox bereit.

Die Inhalte der Textboxen sollen nun die in die double-Eigenschaften der Klasse geschrieben werden.

Dabei existiert für das Umwandeln die Regel, dass der Wert nur geändert werden soll, wenn der Textboxinhalt (String) in ein double konvertiert werden kann.

Deshalb habe ich eine Methode geschrieben:

private void tryToParseDouble(ref double target, string source)
        {
            try
            {
                target = double.Parse(source);
            }
            catch(Exception) {}
        }

Bei dem Aufrufen kommt es zu einem Fehler:
Eine Eigenschaft oder ein Indexer kann nicht als out- oder ref-Parameter übergeben werden.

Jetzt frage ich mich wieso es nicht möglich ist.
Ist die Vorgehensweise nicht gut.

Alternativ könnte ich auch soetwas wie folgende Methode nutzt:


private void tryToParseDouble(double target, string source)
        {
            try
            {
                return double.Parse(source);
            }
            catch (Exception) { return target; }
        }

Dadurch würde bei dem Aufruf aber mehr Code entstehen. Das ist unwesentlich mehr, aber es geht ums Prinzip^^

Ausserdem wird dadurch der set Block der Eigenschaften aufgerufen. Dabei unterscheide ich zwar ob value!="bisheriger Wert" ist, aber ich finde es unsinnig den selben Wert erneut zuzuweisen. Ausserdem setzt diese Methode ja dann diese Prüfung in den set-Blöcken der Eigenschaften voraus.

Was denkt ihr darüber?

EDIT: Ok ich kann mir erklären, wieso es nicht möglich ist. Es kann kein Zeiger auf einen Wert einer Eigenschaft existieren. Das wäre dann eher sowas wie ein Delegate bzw. ein Methodenzeiger. Leider ist für diesen Fall die sonst gute Technik der Eigenschaft nicht zu gebrauchen.

04.05.2007 - 10:17 Uhr

Danke schön genau das habe ich gebraucht.

03.05.2007 - 15:46 Uhr

Hmm vielleicht ist PrintDialog das falsche Steuerelement. Gibt kein fertiges Dialog für die Druckereinstellungen.

Ich suche sowas wie nen statische Eigenschaft:

DefaultPrinter = ....

Und ein Dialog das mir den Printer auswählen lässt. Diese Angaben könnte ich serialisieren und abspeichern. Dieser "Printer" weise ich je nach Druck dem DefaultPrinter zu.

Irgendwie verstehe ich die Druckerverwaltung unter .NET nicht. 🙁

Ausgedruckt werden übrigends Crystal Reports.

Kann mir jemand bei dem Problem helfen?

02.05.2007 - 18:52 Uhr

Hallo ich habe ein PrintDialog und möchte gerne die Einstellungen speichern.

Der Kunde soll nur unter Einstellungen einmalig den richtigen Drucker auswählen und dieser wird benutzt.

Es geht sogar soweit, dass 2 oder 3 verschiedene Drucker ausgewählt werden können: Rechnungs-, Etikettendruck etc.

Kann mir dazu jemand etwas sagen. Im Forum habe ich dazu leider nichts gefunden.

Vielen Dank
gz
Tim