Hallo ikaros,
vielen Dank für die Mühen die du dir gemacht hast, leider werde ich wohl nicht mehr dazu kommen dies zu implementieren, da sich die Software im Endstadium befindet. Falls ich jedoch wider Erwarten noch Luft nach hinten haben sollte, werde ich es mir noch einmal genau anschauen.
Nochmals Danke.
gruss
dschmoegner
Hallo,
mir fällt da MeasureString ein.
Misst die angegebene Zeichenfolge, wenn diese mit dem angegebenen Font-Objekt gezeichnet wird.
Diese Methode sollte dir helfen.
gruss dschmoegner
Hmmm,
mit Sockets unter C# habe ich mich noch net beschäftigt, aber könnte es sein, dass du bei udpclient.send nen anderen Port verwendest wie beim Konstruktor für IPEndPoint???
Versuch doch mal das Beispiel aus der MSDN.
UdpClient udpClient = new UdpClient();
IPAddress ipAddress = Dns.Resolve("www.contoso.com").AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 11004);
Byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?");
try{
udpClient.Send(sendBytes, sendBytes.Length, ipEndPoint);
}
catch ( Exception e ){
Console.WriteLine(e.ToString());
}
Wenn das net hilft kann ich dir net weiterhelfen.
gruss dschmoegner
Hi,
du hast vergessen den Namespace anzugeben der Encoding enthält.
Mit
using System.Text;
sollte die Fehlermeldung verschwinden.
Gruss dschmoegner
Hi ikaros,
die Software über die ich meine Diplomarbeit schreibe erstelle ich für eine Firma. Diese Software soll wenn alles gut läuft Ende August mit Setuproutine ausgestattet auslieferungsfertig sein. Heisst die Firma erwartet, dass ich eine Software erstelle, die sie an die Kunden ihrer Laborgeräte ausliefern/verkaufen kann.
So dass ich einmal unter den ganz normalen Gesichtspunkten der Softwareentwicklung arbeite und natürlich auch den Lösungsansatz berücksichtigen muss.
Am wichtigsten ist es mir sauberen Code zu schreiben der die Prinzipien der OOP nicht verletzt.
Momentan ist meine Software in 5 Komponenten aufgeteilt.
1.GUI
2.Workflow(beinhaltet sämtliche Logik und bereitet die Daten für die anderen Komponenten vor)
3.DataStorage(Speichern und Laden der Daten)
4.Printer(Druck der Diagramme und Werte in Tabellenform)
5.RS232(ansprechen der RS232 und Wertedownload im Datalogger aktivieren)
Ich würde der Printerkomponente keinen höheren Stellenwert einräumen wollen, da ja jede Komponente für sich für die Software von Bedeutung ist.
Da in der Firma kein Mitarbeiter vorhanden ist, der in der Windowsprogrammierung zu Hause ist und ich auch erst im Zuge der Diplomarbeit mich mit C# und .NET beschäftigt habe ist die Software bisher recht einfach gehalten worden. Auch um einen späteren Einstieg eines Mitarbeiters der Firma zu erleichtern.
Ich hoffe das hat dir ein wenig geholfen.
Gruss dschmoegner
Vielen Dank,
hat mir die Augen geöffnet. Denn bisher hatte ich mir wenig Gedanken über den Hintergrund der Userrechte gemacht. Werde baldigst die notwendingen Änderungen in meiner Software vornehmen.
Gruss
dschmoegner
Hi,
wie der Titel schon andeutet interessiert es mich ob Microsoft Vorschläge gibt wo vom User gespeicherte Dateien liegen sollten bzw. wo sie auf keinen Fall gespeichert werden sollen. Habe da schon gegoogelt aber keine Antwort finden können. Vielleicht habe ich aber auch nur mit den falschen Stichwörtern gegoogelt. Wenn einer von euch da einen Link hätte würde ich mich freuen.
Gruss
dschmoegner
Hi,
aus einem ersten Gedanken heraus würde ich dir die Klassen Directory und File nennen. Mit Directory läufst du durch deine Verzeichnisse und mit File kannst du Dateien in andere Kopieren und die ursprüngliche löschen. Allerdings kann ich dir jetzt nicht sagen, wie es bei sovielen Dateien mit der Prozessorlast und Speicherauslastung aussieht.
Gruss
dschmoegner
Hi,
du könntest es über ein Grafikobjekt machen. Dessen Seitenränder an das Worddokument anpassen(Geht nur bei Standardeinstellungen) und wenn der Text den Bereich des Grafikobjektes verlässt könntest du die Seitenzahlen mitlaufen lassen.
Im Buch Windowsprogrammierung mit C# von Petzold beschreibt er dieses anhand eines eigenen Texteditors und der zugehörigen Druckfunktionen wo es ja auch wichtig ist den Seitenbereich und die Seitenzahlen zu kennen.
Gruss
dschmoegner
Einen Drittanbieter wollte ich soweit wie es geht ausschliessen. Die ganze Frage(wie alle Fragen von mir hier) hat bezug auf meine Diplomarbeit. Die Firma bei der ich diese Software erstelle ist natürlich daran interessiert es so einfach wie möglich zu halten um hinterher es selbst verstehen zu können und weiterhin spielt wie bei allen der Kostenfaktor eine grosse Rolle.
Momentan habe ich 2 Printmethoden. Eine, welche Diagramme nebst Daten zum Vorgang(welche eben aus meiner Property kommen sollten) druckt und eine, welche die vom Messgerät empfangenen Daten(Doublewerte) in Tabellenform und die dazugehörigen Vorgangsdaten druckt.
Der nächstmögliche Verwendungszweck wäre für ein anderes Laborgerät wo es wohl nicht nötig sein wird einen Tabellendruck zu generieren wohl aber wieder ein Diagramm nebst Vorgangsdaten zu drucken.
Ich hoffe damit ist es ein wenig deutlicher geworden.
Gruss
dschmoegner
Mehr oder weniger ja. In ihr werden bilder zum Druck erzeugt, Tabellenausdrucke und Formularausdrucke für ein spezielles Messgerät generiert. Natürlich kann man die Printerkomponente auch für andere Anwendungsfälle verwenden, sie müsste dann aber immer angepasst werden, also dann auch die ihr übergebenen Werte.
Moin,
ich brauche euren Erfahrungsschatz. Ich habe eine Komponente Workflow die in einer mehrfeldrigen Property verschiedene Strings bereithält. Diese Strings sollen nun einer Printerkomponente übergeben werden. Da die Komponenten nur per Interfaces mit einander kommunizieren sehe ich momentan zwei Wege es zu realieseren.
Ich erstelle ein Interface mit soviel Methoden wie ich Strings habe und gebe nur die Property-Felder zurück.
In der Workflow packe ich die einzelnen Property-Felder in ein StringArray und gebe dieses der Printerkomponente.
Zum 1. bin ich mir nicht ganz sicher ob dies wirklich ne gute Lösung ist. Bei 2. stellt sich mir die Frage, was ist wenn ein Propertyfeld einen Leerstring enthält. Wird dann der Leerstring ins StringArray übertragen oder wird dieser Index dann nicht eingetragen?
Danke für die Hilfe
dschmoegner
Danke für die Antwort. Momentan ist schaut meine Lösung so aus.
public interface IEvents
{
event EventHandler Changed;
void OnChanged(EventArgs e);
}
public class SerPort: CommBase, IPortSettings, IMeasureValues, IEvents
{
public event EventHandler Changed;
protected override void OnRxChar(byte ch)
{
//base.OnRxChar (ch);
this.myList.Add(ch);
if(ch == 41)
OnChanged(EventArgs.Empty);
}
public void OnChanged(EventArgs e)
{
// TODO: Implementierung von SerPort.OnChanged hinzufügen
if( Changed != null )
Changed(this,EventArgs.Empty);
}
}
Komponente Workflow registriert sich für das Event.
public Workflow()
{
sp = new SerPort();
IEvents ev = (IEvents)sp;
ev.Changed +=new EventHandler(ev_Changed);
}
private void ev_Changed(object sender, EventArgs e)
{
IMeasureValues mv = (IMeasureValues)sp;
this.CreateMeasureValuesArrays(mv.GiveMeasureValues());
}
Habe versucht den Ansatz aus dem Thread Events in Interfaces umzusetzen.
@Programmierhans
Ich sehe da momentan keine andere Möglichkeit. Aber lasse mich gerne eines besseren belehren.
Danke Dan, so ähnlich hatte ich es vermutet, werde auf jeden Fall die zweite Variante wählen, das einzigste was bei mir public ist sind die Schnittstellen und so soll es auch bleiben.
Gruss dschmoegner
Sollte es so einfach sein? Es ist doch sowieso gegeben, dass die implementierende Klasse die gesammte Schnittstelle implementieren muss.
Heisst das für Events, die implementierende Klasse beinhaltet den Delegaten und die Methode oder wird in dieser Klasse der Eventhandler registriert(z.Bsp. OnClick beim Button)?
Hi,
in der MSDN sind die verschiedenen Verschlüsselungen aufgeführt. Ich zum Beispiel verwende den RijndaelManaged Schlüssel. Wenn man die Datei verändert wird eine Exception ausgelöst, dass keine Entschlüsselung erfolgen konnte. Speichern tut man dann diesen Verschlüsselten Stream ganz normal in eine Datei.
Gruss
dschmoegner
Hi,
beim nochmaligen durcharbeiten des Event Tutorials auf MSDN ist mir die Beschreibung für Events in Interfaces aufgefallen und ich muss gestehen das ich nicht ganz verstehe was mit der Aussage:
When implementing the interface, the implementing class must supply a corresponding event in the class that implements the interface.
gemeint ist. Muss ich zwei verschiedene, mit einander kommunizierende Events schreiben oder in der implementierenden Klasse ein gleichwertiges Event?
Schon mal Danke.
gruss dschmoegner
Hi,
bin mir net allzu sicher, aber sollte des net mit Convert.ToByte() gehen?
gruss dschmoegner
aus der MSDN:
Ruft die Anzahl der Elemente ab, die tatsächlich in der ArrayList enthalten sind.
public virtual int Count {get;}
Eigenschaftenwert
Die Anzahl der Elemente, die tatsächlich in der ArrayList enthalten sind.
Falls du wissen wolltest wieviele Elemente enthalten sind.
gruss dschmoegner
Hi Community,
folgendes Problem: Ich frage mich ob es möglich ist ein Event zu registrieren, dass ausgelöst wird wenn in eine ArrayList mittels Add ein ganz bestimmtes Zeichen eingetragen wird oder ob es nur ein Event für das Hinzufügen ansich gibt. An dieses Event wären wichtige Schritte gebunden. In einer weiteren Komponente sollte durch dieses Event die Freigabe der Daten erfolgen und in einer anderen Komponente sollte dadurch eine Progressbar bei 100% angekommen sein und beendet werden. Es sind also 3 Komponenten an dieses Event gebunden. Alternativ hatte ich mir überlegt ein Flag zu setzen(Bool?) und dann darauf das Event zu registrieren Allerdings müsste ich dann mittels Interface denn Blick auf dieses Flag einbauen.
So richtig weiss ich nicht was besser ist oder was überhaupt sinnvoll und möglich ist.
Schon mal Danke für die Hilfe
dschmoegner
Wenn ich das richtig verstehe, bedeutet dass in meinem Fall, dass VisibleClipBounds die gesammte Fläche meines Graphics Objektes wiedergibt da ich ja keinen ClipBereich definiert habe. Könnte es vielleicht auch sein, dass als Clipbereich die Standarddruckeinstellungen genommen werden? Also die Größe eines A4 Blattes?
Ansonsten vielen Dank für deine Mühen, hat mir auf jeden Fall weitergeholfen.
gruss dschmoegner
Ich glaub das mit dem sichtbaren Bereich will mir noch nicht so ganz in den Schädel...
wenn ich vorher keinen Bereich festgelegt habe, an dessen sich VisibleClipBounds orientiert, woher kommen dann die Werte?
RectangleF rectfull = new RectangleF(e.MarginBounds.Left-(e.PageBounds.Width-grfx.VisibleClipBounds.Width)/2, e.MarginBounds.Top-(e.PageBounds.Height-grfx.VisibleClipBounds.Height)/2, e.MarginBounds.Width, e.MarginBounds.Height);
Das ist die Berechnung des bedruckbaren Bereiches auf einem Papier. Das habe ich 1zu1 aus dem Buch von Charles Petzold übernommen. VisibleClipBounds ist kleiner als PageBounds, so dass die Seitenränder entstehen, die ein Drucker ja nicht bedrucken kann. Ist VisibleClipBounds System- und Druckerabhängig?
Moin,
ich arbeite gerade an einer Druckerkomponente und will das Format der zu druckenden Seiten gestalten, dabei bin ich bei Graphics.VisibleClipBounds darauf gestossen, dass Width und Heigth immer diesselben Werte tragen. Diese Werte entsprechen weder der meiner Form noch sind sie irgendwie an die Auflösung gekoppelt.
So das ich den Satz aus der MSDN nicht so ganz verstehe.
Ruft das umschließende Rechteck des sichtbaren Ausschneidebereichs dieses Graphics-Objekts ab oder legt dieses fest.
Welcher sichtbare Bereich ist gemeint? Wann ändern sich die Werte?
Danke
Hi -acid-,
ich habe das bisher immer mittels eines Arrays gemacht, vielleicht ginge es auch per Struct.
Per Array ist sicherlich ne sehr simple Variante aber hat bis jetzt gut seinen Zweck erfüllt.
dschmoegner
@Noodles
Der Fehler im Code ist mir auch gerade bewusst geworden. Warst schneller 😁
Wie ich sehe war Quallo auch schneller....
@kognitio
Mit ArrayList geht es am bequemsten meiner Meinung nach....
*Arrrggghhhh*
Könnt mich selber in den Allerwertesten beissen.
while(sr.Peek() >= 0)
{
test[i] = Convert.ToDouble(sr.ReadLine());
i++;
}
Natürlich darf die lokale Variable nicht noch einmal in der Schleife deklariert werden da sie ja schonvorher deklariert wurde.....wie die Fehlermeldung schon sagt.
Gruss dschmoegner
P.S. Hoffe ich habe jetzt nicht schon wieder was vergessen 🤔
@Noodles
Bei nicht existenten Pfaden oder ungültigen krieg ich ne Exception, mir ging es darum ob ich nicht noch was anderes übersehen habe. Da dies meine ersten Gehversuche in Sachen Directorys sind.
Gruss dschmoegner
Hi kognitio,
sorry da habe ich echt was vergessen.
double test = new double[sr.ReadLine()];
test[i] = Convert.ToDouble(sr.ReadLine());
so ist es natürlich richtig....mein Fehler
Für die Sache mit ArrayList schau dir mal in der Doku die ArrayList.CopyTo Methode an.
Ich habe sie mal so verwendet:
buffer = new byte[this.arList.Count];
this.arList.CopyTo(0,buffer, 0, this.arList.Count);
Gruss dschmoegner
Als Zusatz,
könntet ihr vielleicht auf folgenden Code schauen und mir sagen, ob ich irgendwo etwas vergessen habe? Also ob eventuelle Exceptions auftreten könnten oder ähnliches.
private string FindYoungestSave()
{
string BackupDirName = Environment.SystemDirectory + "\\Backup";
string[] BackupDirs = Directory.GetDirectories(BackupDirName);
foreach(string str in BackupDirs)
this.dirList.Add(str);
this.dirList.Sort();
BackupDirs = Directory.GetDirectories(this.dirList[this.dirList.Count-1].ToString());
foreach(string str in BackupDirs)
this.dirList.Add(str);
this.dirList.Sort();
string[] BackupFiles = Directory.GetFiles(this.dirList[this.dirList.Count-1].ToString());
foreach(string str in BackupFiles)
this.dirList.Add(str);
this.dirList.Sort();
return this.dirList[this.dirList.Count-1].ToString();
}
Die Verzeichnispfade liegen so vor: Backup\2005\11.05.2005\08.45.15
Der Dateiname wird sich evtl noch ändern, eine wirkliche Endung bekommen aber das weiss ich noch nicht genau.
Danke für eure Mühen
Gruss dschmoegner
Original von herbivore
Hallo dschmoegner,die Doku zu DirectoryInfo sagt:
Dieser Konstruktor überprüft nicht, ob ein Verzeichnis vorhanden ist.
Das klingt mir nicht nach automatischem Anlegen.
Hallo herbivore,
Ich wollte eigentlich darauf hinaus, dass bei einem schon existierenden Verzeichnis keine Fehlermeldung ausgelöst wird. Zumindestens ist bei mir noch keiner aufgetreten. Deshalb habe ich mich über die Prüfung auf Existenz gewundert. Da hatte ich mir halt überlegt wozu die Überprüfung auf Existenz wenn der Konstruktor bei existierendem Verzeichnes keinen Fehler meldet.
Gruss dschmoegner
Ok, versuch ich das mal so zu erklären: Ich habe es ganz einfach mit StreamReader gemacht.
StreamReader sr = new StreamReader(fileName);
double[] test = null;
int i = 0;
while(sr.Peek() >= 0)
{
double = new double[sr.ReadLine()];
double[i] = Convert.ToDouble(sr.ReadLine());
i++;
}
Hoffe das da jetzt kein Fehler drin ist, hab des nur so runtergetippt....
Der Vorschlag von exec geht natürlich auch.
Hi kognitio,
ich würde die while Schleife durch eine for Schleife ersetzen denn dann kannst du den Array Iterator verwenden.
for(int i = 0, i<volt.Length, i++)
{
double[i] test = (double)volt;
}
vorher müsstes du das Array noch mit volt.Length initialisieren
Gruss
Hi kognitio,
schau dir mal in der Hilfe die Timer an, mit Timerintervallen solltest du dein Problem lösen können.
Grüsse
Hi @all,
habe eine Frage zu DirectoryInfo.Create(). Wann ist diese Methode zwingend notwendig?
Wenn ich den DirectoryInfo Konstruktor aufrufe übergebe ich ihm ja einen Directorynamen und wenn dieses Directory nicht existiert dann erzeugt er es. In der MSDN Doku wird in vielen Beispielen per DirectoryInfo.Exists überprüft ob das im Konstruktor angegeben Dir existiert bevor es mit DirectoryInfo.Create() dann erzeugt wird. Wenn jetzt der Konstruktur das Dir schon erzeugt warum dann extra die Existenzprüfung und Erzeugung, es ist doch schon da?
Weiterhin stellt sich mir die Frage ob ich für das filtern des jüngsten erzeugten Dirs und des ältesten erzeugten Dirs ein Sortierverfahren benötige. Da die Ordner immer als Namen das aktuelle Tagesdatum tragen liegen sie ja in ihrer Erzeugungsreihenfolge direkt auf einander. Wenn ich nun mit string[] myDirs = Directory.GetDirectories(path)
mir alle Ordner im jeweiligen Dir auslesen lasse, liegen dann nicht die einzelnen Ordner im Stringarray auch wieder gemäss ihrer Erzeugungsreihenfolge vor? Könnte ich mir dann dadurch nicht das Sortierverfahren ersparen? Wenn nicht, sollte ich dann am Besten gleich Heapsort implementieren?
Schon mal Danke
Greetz dschmoegner
Hi kognitio,
zu deinem Programm, da gibt es verschiedene Zeichenfunktionen. DrawCurve, DrawBeziers. Diese sind natürlich ohne jeglichen grafischen Anspruch. Für eine etwas schönere Ansicht würde ich dir ZedGraph von sourceforge.net empfehlen. Viele Möglichkeiten und ne schöne Grafik. Einfach mal danach googlen.
Gruss
Keine Ahnung was du wirklich meinst, aber du kannst zum Beispiel im Konstruktor Methodenaufrufe unterbringen, ansonsten würden mir noch Interfaces einfallen um eine Methode zu einem bestimmten Zeitpunkt auszuführen. Events dürften vielleicht auch für dich in Frage kommen.
Aber Google kennst du schon oder? 🤔
Das sollte fürs erste reichen.
Problem ist gelöst. Thread kann geschlossen werde.
Danke
Noch als Tip, schau dir die Überladungen der Konstruktoren an, das kann vielleicht wichtig werden.
Und für Details gibt es ja noch die MSDN Hilfe online.
Gruss
Warum packst du nicht den StreamWriter in eine eigene Methode? Dann kannst du gleichzeitig mit try und catch exceptions abfangen und wenn es zwingend notwendig sein sollte, dann setzt du noch ein Flag an Hand dessen du den Erfolg oder Misserfolg ersehen kannst.
gruss
Hallo kiwi_girl
Ist deine Variable static???? Denn soweit ich weiss, kann man in einer static Methode auch nur static Variablen verwenden, da ja static deklarierte Methoden und Felder keiner Klasse zugeordnet sind.
Gruss
Moin Community,
mir ist bei der Verschlüsselung mit RijndaelManaged folgendes aufgefallen. Ich habe ein Projekt um eine Klassenbibliothek zu erstellen und in dieser speichere ich mit der genannten Verschlüsselung Daten in einer Datei.
Um anfänglich ein wenig mit der Verschlüsselung herum zu experimentieren habe ich eine CS Datei erstellt (mit Ultraedit) in der ich genau dasselbe mache wie in meinem VS Projekt. Die CS Datei habe ich mit csc.exe kompiliert. Nun ist mir aufgefallen, dass bei der mit csc.exe kompilierten Datei die Umlaute korrekt wiedergegeben werden bei der Entschlüsselung jedoch nicht bei den Dateien die mit dem VS erstellt wurden.
Werden da unterschiedliche Compiler verwendet?????
Hallo,
ist so net ganz richtig michaelschuler denn hier im Forum gibt es ja etwas selbstgeschriebenes.
Vielleicht hilft das ja JK_net weiter.
Gruss
Hi kiwi_girl
zum schreiben in eine Datei:
StreamWriter sw = new StreamWriter(FileName);
sw.Write("dein Text");
sw.Close
Zum lesen aus einer Datei:
StreamReader sr = new StreamReader(FileName);
sr.Read();
sr.Close();
Wobei es natürlich zu den Konstruktoren noch mehrere Überladungen gibt und natürlich auch noch mehrere Methoden zum Schreiben und Lesen.
Gruss
Danke sehr, sowas in der Art hatte ich schon vermutet.
Greetz
Hi,
könnt ihr mir sagen welches Format ein Directory Name nicht haben darf?
Ich möchte gerne Ordner mit CreateSubdirectory(string path) erstellen. Das zu übergebene Argument erzeuge ich mir mit:
DateTime dt = DateTime.Today;
dirInfo.CreateSubdirectory(dt.ToString());
Der Compiler meldet immer das es keine gültige Pfadbezeichnung sei. Aber wenn ich mir den erzeugten String anschaue, dann finde ich da nix ungewöhnliches. Es sind Punkte, Doppelpunkte und ein Leerzeichen vertreten.
Liegt es vielleicht an dem Leerzeichen im String????
Danke
Hi Community,
gibt es eine Möglichkeit das Aktivieren/Deaktivieren der Verzeichnisattribute Schreibgeschützt, Versteckt per Programm zu unterbinden und das unabhängig vom Benutzerkonto des PC's?
Wäre es vielleicht möglich ein Verzeichnis so zu schützen, dass auch ein Adminkonto nicht so einfach Zugriff erlangt?
Bisher bin ich bei der Klasse DirectoryEntry gelandet. In dieser gibt es ja die Eigenschaften Password und Username. Wenn diese Eigenschaften gesetzt sind, hat dann der Admin immer noch Zugriff auf dieses Verzeichnis und seine Eigenschaften?
Schon mal Danke
Also ich bin im Objektbrowser die komplette DLL durchgegangen, aber nix von einer Möglichkeit Owner/Parent festzulegen.
Den Link werd ich mir mal zu Gemüte führen.....
Danke hierfür
Update:
@Pulpapex
Also ich glaube net , das der ActiveX Wrapper mir weiterhilft.....denn ich will ja meine DerivedClass als Klassenbibliothek haben. Die Comm-DLL funktioniert ja wunderbar...solange ich die DerivedClass nicht als Klassenbibliothek kompiliere. Hoffe es kommt rüber was ich meine und ich hoffe, dass ich dich nicht falsch verstanden habe.