Laden...

Forenbeiträge von OhThereIsAPeanut Ingesamt 33 Beiträge

10.01.2014 - 21:46 Uhr

Ok sorry.

Verwende WinForms.

10.01.2014 - 21:05 Uhr

Hallo Leute,

habt ihr eine Idee wie man ein ComboBox Item Hover Event umsetzt?
Ich würde gerne Code ausführen, wenn der User mit der Maus über die einzelnen ComboBox Einträge fährt.

Vielen Dank.
OhThereIsAPeanut

09.01.2014 - 22:38 Uhr

Danke das war die Lösung. Forms.Timer läuft jetzt.

09.01.2014 - 19:40 Uhr

Fehlermeldung:
System.InvalidOperationException wurde nicht von Benutzercode behandelt.
HResult=-2146233079
Message=Das Objekt wird bereits an anderer Stelle verwendet.
Source=System.Drawing
StackTrace:
bei System.Drawing.Drawing2D.GraphicsPath.GetBounds(Matrix matrix, Pen pen)
bei System.Drawing.Drawing2D.GraphicsPath.GetBounds()
bei Project1.Classes.BaseGraphicalObject.MoveToCor(Coordinate cor) in ...\Classes\Graphical\BaseGraphicalObject.cs:Zeile 89.
bei Project1.Classes.BaseGraphicalObject.BaseCor_CoordinateMoved(Object sender, PropertyChangedEventArgs e) in ...\Classes\Graphical\BaseGraphicalObject.cs:Zeile 63.
bei Project1.Classes.Coordinate.OnCoordinateMoved(PointF delta) in ...\Classes\Coordinate.cs:Zeile 201.
bei Project1.Classes.Coordinate.Move(PointF delta) in ...\Classes\Coordinate.cs:Zeile 137.
bei Project1.Classes.AcConnLine.Move(PointF delta) in ...\Classes\Aircraft\AcConnLine.cs:Zeile 32.
bei Project1.Classes.Aircraft.Move() in ...\Classes\Aircraft\Aircraft.cs:Zeile 507.
bei Project1.Classes.Simulation.OnStepEvent(Object source, ElapsedEventArgs e) in ...\Classes\Simulation.cs:Zeile 166.
bei System.Timers.Timer.MyTimerCallback(Object state)
InnerException:

09.01.2014 - 18:28 Uhr

Den Windows.Forms.Timer.
Ich habe mir jetzt auch mal die Threadcollection ausgeben lassen.
Da sind angeblich 10 Threads vorhanden. Ich habe absolut keinen Schimmer woher die kommen. Wann wird denn ein neuer Thread erstellt?

Fehler kommt übrigens in der Translate Zeile.

09.01.2014 - 17:34 Uhr

Hallo Leute,

ich habe folgendes Problem.
In unserem Programm läuft ein Timer, der jede Sekunde ein Event auslöst und Dinge auf dem Bildschirm bewegt. Meistens geht alles gut aber seltsamerweise bekommen ich ab und zu den Fehler der mir in folgender Zeile sagt:> Fehlermeldung:

Das Element wird an anderer Stelle verwendet


protected void MoveToCor(Coordinate cor)
		{
			if(Movable)
			{
				Matrix mat = new Matrix();
				mat.Translate((float) cor.X - Path.GetBounds().Location.X, (float) cor.Y - Path.GetBounds().Location.Y, MatrixOrder.Append);
				Path.Transform(mat);
			}
		}

Ich weiss nun leider überhaupt nicht wie ich an diesen Fehler rangehen soll. Ich denke aber es wird etwas mit den verschiedenen Threads zu tun haben.
Vielleicht habt ihr ja einen Tipp.

Vielen Dank.

Beste Grüße
OhThereIsAPeanut

26.12.2013 - 13:50 Uhr

Hallo Leute,

ich bin auf folgendes Problem gestossen:

Objekt1 obj1 = new Objekt1();
Objekt2 obj2 = obj1;

Hier werden obj2 nicht die Werte von obj1 zugewiesen sondern das komplette Objekt bzw eigentlich nur ein Pointer. Also obj1 und obj2 zeigen auf das gleiche Objekt im Speicher.

Wie kann man dieses Problem umgehen? Wie kann ich also ein neues Objekt im Speicher erstellen, das die gleichen Eigenschaften wie ein anderes hat?

Vielen Dank.
lg OhThereIsAPeanut

25.12.2013 - 17:02 Uhr

Hallo Leute,

ok alles klar. Ich kann bloss nicht so richtig einschätzen was "viel" oder "wenig" Elemente heisst.
Könntet ihr da mal eine Zahl nennen?

lg ohthereisapeanut

22.12.2013 - 17:35 Uhr

Habs gelöst. Custom Panel erstellt und dann dort folgenden Code in den Konstruktor eingefügt:


base.DoubleBuffered = true;
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
UpdateStyles();
22.12.2013 - 17:04 Uhr

Danke für den Tipp. Das hat funktioniert.
Das Problem, dass ich nun allerdings habe ist, dass bei jedem neuzeichnen das bild kurz blinkt bzw flackert. Einen Tipp wie man das verhindern kann?

22.12.2013 - 12:41 Uhr

Hey,

also mir geht es eigentlich nur darum, dass ich bei Start der Applikation einen bestimmten background zeichnen möchte. Der kann je nach Konfiguration anders aussehen, deswegen kann ich kein image oder ähnliches verwenden sondern muss das ganze immer zeichnen.

Dieser Background soll sich aber während die Applikation läuft nicht mehr verändern. Nur bestimmte andere Elemente sollen auf diesen Background gezeichnet werden.

grüße
ohthereisapeanut

21.12.2013 - 20:00 Uhr

hey freunde,

ich habe jetzt nochmal mit den Strings rumgespielt.
Leider stosse ich immer noch auf folgendes Problem.
Texte in dieser größe sind kaum zu lesen. Wie bekomme ich es hin, dass er die schrift nur mit einem pixel breite zeichnet?

danke euch.

lg
OhThereIsAPeanut

21.12.2013 - 19:30 Uhr

Also ich habe mir das jetzt einmal genauer angeschaut. Ist aber relativ schwer jetzt noch in meinem Projekt zu implementieren.
Gibt es denn keine einfachere Möglichkeit einen Background bei Start der Applikation zeichnen zu lassen?

14.12.2013 - 00:29 Uhr

Hallo Leute,

ich habe eine Frage an euch.
Habe ihr eine Idee wie ich C# sagen kann, dass er in der Paint Methode eines Panels nicht alle Bereiche neuzeichnen soll? Wäre super.

Beste Grüße
OhThereIsAPeanut

29.11.2013 - 15:34 Uhr

Alles klar. Vielen Dank für eure Antworten.
Ich habe mir das fast schon gedacht. Werde das also mit DrawString() implementieren.

Beste Grüße
OhThereIsAPeanut

29.11.2013 - 14:57 Uhr

Hallo Leute,

ich habe folgendes Problem. Ich würde gerne alle grafischen Objekte per GraphicsPath zeichnen lassen und verschieben. Auch Text.

Das habe ich nun probiert und musste feststellen, dass Path.AddString() sehr hässliche und fast unlesbare Ergebnisse für kleine Schriftgrößen liefert. Mit Graphics.DrawString() ist das allerdings kein Problem.
Kennt jemand von euch einen "Hack" der dieses Problem behebt? Mit den ganzen Rendering Methoden und Anti-Aliasing habe ich bereits rumgespielt. Leider ohne zufriedenstellende Ergebnisse.

Danke euch und beste Grüße
OhThereIsAPeanut

22.11.2013 - 18:11 Uhr

Hallo ihr beiden,

danke für eure Tipps! Leider haben wir für das Projekt nicht all zu viel Zeit und werden wohl daher erst einmal auf das altbekannte WinForms setzen.
WPF ist sehr interessant aber denke ich in der Zeit die uns bleibt nicht mehr zu machen.

Viele Grüße
OhThereIsAPeanut

22.11.2013 - 10:14 Uhr

Alles klar. So ähnlich haben wir uns das auch vorgestellt. Kannst du eine Aussage über die Performanz des Timers machen? Wir haben später ca. 30 Rechtecke und 30 Strings auf dem Bildschirm welche eben alle 5 Sekunden ihre Position ändern müssen. Das müsste mit dem Timer ohne ruckeln zu machen sein, oder?

22.11.2013 - 09:48 Uhr

Hallo Leute,

ich habe folgende Frage. Wir, das sind drei Programmierer, haben die Aufgabe bekommen eine Art Simulation mit C# zu erstellen.
Mit C# kenne ich mich relativ gut aus und wollte nun aber von euch wissen wie ihr am besten an diese Sache rangehen würdet.

Die Aufgabe:
Wir brauchen eine Art "Game Loop", der alle 5 Sekunden die Anwendung aktualisiert und Positionen von Rechtecken plus einem Label neu zeichnet. Das Label muss per Maus bewegbar sein.

Die Frage ist nun ob wir das ganze in WPF oder WinForms umsetzen. Bisher habe ich es zum Beispiel nicht geschafft, dass das Label transparent über dem Rechteck liegt.

Vielleicht habt ihr ja eine Idee.

Viele Grüße
OhThereIsAPeanut

21.09.2013 - 17:29 Uhr

Hallo Leute,

ich habe folgendes Problem an dem ich seit ca. eine Woche grübele.

Ich möchte ein bestehendes Programm in ein modernes WPF mit MVVM Architektur übertragen. Ich werde das Programm komplett neu schreiben, die grundsätzlichen Funktionen aber beibehalten.

Kurz zur Funktionsweise des Programms. Das Programm erstellt aus einer vom Benutzer ausgewählten Access-Datenbank mit Messwerten ein sog. Messprotokoll.
Der User wählt also die gewünschte Datenbank aus, diese wird dann geladen, nun kann der Benutzer noch zusätzlich Daten eintragen, die auf dem Protokoll erscheinen sollen.

Jetzt zu meiner eigentliche Frage:
Vorweg: Ich bin an die Access-Datenbank gebunden. Diese ist vorgegeben und ich kann das auch nicht ändern. Für den Datenzugriff verwende ich NHibernate. Mein Framework ist das MVVM Light Toolkit.

Wenn der User nun die Datenbank ausgewählt hat werden die Daten über entsprechende Entities in eine SessionFactory geladen. Wie verknüpfe ich das MVVM Light Toolkit oder besser gesagt dessen Architektur mit NHibernate. Verwende ich die Hibernate Entities als Models der MVVM Architektur?

Und wo speichere ich die zusätzlichen User-Eingaben? Bisher war es so, dass es dafür eine Config Klasse gab die gefühlte 200 Properties enthält in denen dann die Einträge gespeichert waren. Ich denke nicht, dass das der richtige Ansatz ist oder?

Vllt könnt ihr mir helfen. Ich wäre euch sehr dankbar.

Beste Grüße

18.09.2013 - 23:48 Uhr

Ich bin jetzt auf MVVM umgestiegen und habe nun wieder das gleiche Problem.
Wie binde ich meine DataBase Conncetion korrekt ein.

Unter dem Model oder davor? Und welche Funktionen sollte es zur Verfügung stellen? Wie verknüpfe ich das dann mit dem Model?

Viele Grüße
OhThereIsAPeanut

16.09.2013 - 12:29 Uhr

Hallo Freunde,

Ich beschäftige mich gerade intensiv mit dem Thema MVP im Bezug auf WinForms.
Leider steige ich da noch nicht so wirklich durch - ihr könnt mir hier gerne interessante Links
zu dem Thema hinterlassen - und wollte euch fragen wie folgendes Problem richtig umgesetzt wird.

Der User wählt in meinem Programm eine Datenbank aus, welche dann von meinem Programm ausgelesen und "zurecht geschnitten" wird. Wo würde ich dieses Prozedere in einer MVP Architektur unterbringen?

Im Presenter oder im Model? Und wann braucht man überhaupt ein Model interface?

Vielen Dank für eure Hilfe.
OhThereIsAPeanut

13.09.2013 - 14:24 Uhr

Vielen Dank. Ich werde mir das mal anschauen.

13.09.2013 - 10:06 Uhr

Hallo Leute,

danke für eure Antworten. Es lag wohl an dem

 ScreenUpdating

Als ich das auf true gesetzt habe ging es wieder.
Zu EEP: Gute Sache. Aber ich brauche die Excel Funktionen zur Berechnung von Daten. Wenn ihr mir da eine gute Alternative vorschlagen könnt wäre ich euch sehr dankbar. Dass das mit Excel Interop nicht die schnellste und schönste Variante ist habe ich auch schon festgestellt 😕

Viele Grüße
OhThereIsAPeanut

P.S: Benötige folgende Funktionen:
StDevP, TInv, Slope, Correl, Intercept.

11.09.2013 - 21:21 Uhr

Hallo Leute,

Ich habe folgendes Problem.
In meiner Applikation öffne ich schon bei der Instanziierung der ExcelHelper Klasse Excel:

ExcelApp = new Excel.Application();
            ExcelApp.Visible = visibile;
            ExcelApp.ScreenUpdating = screenUpdating;

Am Ende - Also wenn die Applikation beendet wird - schließe ich Excel wieder. Das funktioniert soweit alles bestens. Excel verschwindet auch aus dem TaskManager etc.

Das einzige Problem, dass ich habe ist, dass man Excel während mein Programm läuft nich mehr verwenden kann.
Beispiel: In meinem Programm wird ein Excel File erzeugt. Dies passiert ihm Hintergrund, so dass der User weiterarbeiten kann. Wenn sich der User das File nun aber gerne anschauen möchte und über den Explorer zum Speicherort der Datei navigiert, auf diese Doppelklickt und sie öffnen will öffnet sich zwar Excel. Das Haupfenster wo nun die Tables erscheinen sollten bleibt aber leer.
Sobald man mein Programm schließt und die Datei nochmals öffnet geht es wieder.

Ich bin hier leider mit meinem Latein am Ende und hoffe ihr könnt mir hier weiterhelfen.

Beste Grüße
OhThereIsAPeanut.

28.07.2013 - 12:15 Uhr

Habe es hinbekommen.
Der "Parameterless" Konstruktor hat gefehlt 😉

lg OhThereIsAPeanut

28.07.2013 - 00:44 Uhr

Ok habs probiert:

/// <summary>
    /// Erweitert die vom Designer generierten Settings so dass
    /// eine Liste gespeichert werden kann.
    /// </summary>
    partial class Settings
    {
        [UserScopedSetting]
        [SettingsSerializeAs(SettingsSerializeAs.Xml)]
        [DefaultSettingValue("")]
        public List<FahrzeugKategorie> FahrzeugKategorien
        {
            get { return this["FahrzeugKategorien"] as List<FahrzeugKategorie>; }
            set { this["FahrzeugKategorien"] = value; }
        }

Wird aber leider nichtz gespeichert sondern sieht so aus, die user.config:

<setting name="FahrzeugKategorien" serializeAs="Xml">
                <value />
            </setting>

So füge ich neue Einträge hinzu:

// Neue Kategorie hinzufügen
            Properties.Settings.Default.FahrzeugKategorien.Add(new FahrzeugKategorie(newKategorieNameTxt.Text, newKategorieKuerzelTxt.Text));

            // Speichern der Eigenschaften:
            Properties.Settings.Default.Save();

Komm wieder nicht weiter 😦

27.07.2013 - 16:58 Uhr

Hallo Gü,

ah alles klar macht sinn, ja. Aber dann kann der User doch zur Laufzeit keine Settings mehr hinzufügen oder sehe ich das falsch?!?

lg OhThereIsAPeanut

27.07.2013 - 15:40 Uhr

Hallo,

vielen Dank für deine Antworten Gü.

Ich konnte einige Probleme schon lösen, habe aber immer noch folgendes:

public static string CreateNewProperty(string name, System.Type type, string defaultValue = "")
        {
            // Zufallsnamen generieren und auf Vorhandensein überprüfen
            name = name + "_" + Path.GetRandomFileName().Replace(".", "");

            foreach (SettingsProperty prop in Properties.Settings.Default.Properties)
            {
                while (prop.Name == name)
                {
                    name = name + "_" + Path.GetRandomFileName().Replace(".", "");
                }
            }

            // Neue Property erstellen
            SettingsProperty newProperty = new SettingsProperty(
                name,
                type,
                Properties.Settings.Default.Providers["LocalFileSettingsProvider"],
                false,
                defaultValue,
                SettingsSerializeAs.String,
                new SettingsAttributeDictionary(),
                true,
                true);

            // User Scope Attirbut hinzufügen
            newProperty.Attributes.Add(typeof(UserScopedSettingAttribute), new UserScopedSettingAttribute());

            // Neue Property den Settings hinzufügen
            Properties.Settings.Default.Properties.Add(newProperty);

            // Aktualisieren der Settings, damit Änderungen an den Eigenschaftswerten bemerkt werden.
            Properties.Settings.Default.Reload();

            return name;
        }

Mit obigem Code erstelle ich eine neue Property in den Settings. Das funktioniert auch bei zwei Typen aber bei dem dritten der nicht nur zwei sondern drei Attribute hat klappt das leider nicht mehr. Über folgenden Code rufe ich die obige Mehtode auf:

// Property erzeugen lassen
            string property = StaticHelper.CreateNewProperty("Korrektur", typeof(TempKorrektur), "WERT;WERT;WERT");

            // Zugriff auf das neue Setting2 geht nur über Indexer, da ja kein Code dafür generiert wurde.
            // Siehe Code in Settings.Designer.cs (wird von VS automatisch erstellt).
            Properties.Settings.Default[property] = new TempKorrektur(newKorrekturFahrzeugTxt.Text, newKorrekturBelagTxt.Text, Convert.ToDouble(newKorrekturFaktorTxt.Text.Replace('.', ',')));

            // Speichern der Eigenschaften:
            Properties.Settings.Default.Save();

            this.Close();

Und das ist die Klasse TempKorrektur:

using System;
using System.Collections;
using System.Text;
using System.Configuration;
using System.ComponentModel;

namespace SPB_Auswertung
{
    /*
     * Settings Klasse
     */
    [Serializable]
    [TypeConverter(typeof(TempKorrekturConverter))]
    public class TempKorrektur
    {
        public string FahrzeugKategorie { get; set; }
        public string BelagArt { get; set; }
        public double KorrekturFaktor { get; set; }

        public TempKorrektur(string fahrzeug = "", string belag = "", double korrektur = 0)
        {
            FahrzeugKategorie = fahrzeug;
            BelagArt = belag;
            KorrekturFaktor = korrektur;
        }

        public override bool Equals(object obj)
        {
            TempKorrektur korrektur = obj as TempKorrektur;

            if (korrektur == null)
            {
                return false;
            }
            else
            {
                if (FahrzeugKategorie == korrektur.FahrzeugKategorie && BelagArt == korrektur.BelagArt)
                {
                    return true;
                }
            }

            return false;
        }
    }

    /*
     * Converter Klasse
     */
    public class TempKorrekturConverter : TypeConverter
    {
        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        {
            return sourceType == typeof(string);
        }

        public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
        {
            if (value is string)
            {
                string[] parts = ((string)value).Split(new char[] { ';' });

                TempKorrektur newKorrektur = new TempKorrektur();

                newKorrektur.FahrzeugKategorie = parts[0].ToString();
                newKorrektur.BelagArt = parts[1].ToString();
                newKorrektur.KorrekturFaktor = Convert.ToDouble(parts[2].ToString().Replace('.', ','));

                return newKorrektur;
            }
            
            return base.ConvertFrom(context, culture, value);
        }

        public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
        {
            if (destinationType == typeof(string))
            {
                TempKorrektur korrektur = value as TempKorrektur;
                return string.Format("{0};{1};{2}", korrektur.FahrzeugKategorie, korrektur.BelagArt, korrektur.KorrekturFaktor.ToString());
            }
            
            return base.ConvertTo(context, culture, value, destinationType);
        } 
    }

}

Wenn ich mir an dieser Stelle einen Breakpoint setze und eine Zeile weiter ausführe und mir den Inhalt der Properties anschaue taucht dort kein neue auf, obwohl ich in der Zeiel drüber noch den Add Befehl aufgerufen habe. Ich verstehe das nicht!

 // Neue Property den Settings hinzufügen
            Properties.Settings.Default.Properties.Add(newProperty);

Ich hoffe ihr könnt mir da irgendwie helfen und einen Tipp geben.

Vielen Dank.

Grüße
OhThereIsAPeanut

26.07.2013 - 07:59 Uhr

Hallo Gü,

Wow. Danke für deine Hilfe.

Verstehe ich das richtig:
Du würdest ein setting im designer mit dem typ list anlegen. Dieser list kann man dann natürlich zur laufzeit einträge hinzufügen ändern oder löschen ohne ein neues setting hinzufügen zu müssen, richtig?

Lg

26.07.2013 - 00:04 Uhr

Hallo Gü,

danke für den Link.
Jetzt ist noch die Frage, wie ich denn ein Setting den anderen hinzufüge.
Die Variante aus meinem ersten Post funktioniert leider nicht.
Das müsste doch eigentlich über .Add() und .Save() gehen oder nicht?

Vielen Dank schonmal.

lg OhThereIsAPeanut

25.07.2013 - 23:37 Uhr

Hallo Gü,

Danke für deine antwort.
Zunächst einmal möchte ich es schaffen Settings zur Laufzeit hinzuzufügen. Das mit dem eigenen Type kommt dann danach. Sry für den sehr verwirrenden Titel.

Lg OhThereIsAPeanut

25.07.2013 - 21:31 Uhr

Liebe Gemeinde,

ich habe folgendes Problem. Ich würde gerne User Settings mit eigenem Typ abspeichern. Ich habe dafür auch schon eine Klasse mit TypeConverter erstellt schaffe es nun aber nicht, ein neues Setting in der User.config zu speichern und bin schon am verzweifeln.

Ich habe mir dafür ein extra Projekt erstellt mit folgendem Code:

public Form1()
        {
            InitializeComponent();

            // Default Wert sollte Test_1 ausgeben
            System.Console.WriteLine(Settings.Default.Setting);

            // Wert wird auf Test_1_neu geändert
            Settings.Default.Setting = "Test_1_neu";

            // und abgespeichert
            Settings.Default.Save();

            // Neues Setting anlegen, Name = Setting2, und abspeichern
            Settings.Default.Properties.Add(new System.Configuration.SettingsProperty("Setting2"));
            Settings.Default.Save();

            // Alle Settings durchlaufen und ausgeben
            foreach (System.Configuration.SettingsProperty property in Settings.Default.Properties)
            {
                System.Console.WriteLine(property.DefaultValue);
            }
        }

Es funktioniert einfach nicht, dass das neue Setting "Setting2" auch in der user.config gespeichert wird. Ich habe auch schon probiert property.Name, property.Attribut etc zu setzen... leider ohne Erfolg.

Ich hoffe ihr könnt mir hier weiterhelfen.

Viele Grüße
OhThereIsAPeanut