Laden...

Forenbeiträge von inflames2k Ingesamt 2.298 Beiträge

16.03.2016 - 09:45 Uhr

Hallo,

wozu benötigst du das denn? Ist aus meiner Sicht ein sehr merkwürdiger Anwendungsfall.

12.03.2016 - 10:03 Uhr

Hallo,

das Fragezeichen ersetzt quasi die Null-Prüfung und ist Syntaxzucker.

Greifst du auf einen String zu der in dem Moment null ist, würde dir eine Exception um die Ohren fliegen.

Siehe dazu: NULL-bedingte Operatoren

11.03.2016 - 07:57 Uhr

Selbst wenn ich "Image" anstatt von "BackgroundImage" wähle funktioniert das bei mir genau gleich.

10.03.2016 - 11:16 Uhr

Hallo sandromo,

ok verstehe du möchtest dir den Zustand nicht merken. Dann wird es aber auch schwierig bereits gezeichnete Objekte auf das neue Bild zu Übertragen.

Was heißt denn die Größe der Zeichenfläche ändert sich nicht? Bleibt die Picturebox in der alten Größe oder vergrößert diese sich mit der Form?

Zeig mal ein wenig Code zur Anpassung der Bildgröße und zum Zeichnen.

EDIT:

Ich habe jetzt mal ein kleines Beispielprogramm geschrieben. - Bei dem passiert alles wie ich es erwarte.


public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            _image = new Bitmap(this.pictureBox1.Width, this.pictureBox1.Height);
            this.pictureBox1.BackgroundImage = _image;
            this.pictureBox1.BackgroundImageLayout = ImageLayout.Zoom;
        }

        private Point startPoint;
        private Bitmap _image;

        private bool _mouseDown = false;

        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            Bitmap oldImage = _image;
            _image = new Bitmap(this.pictureBox1.Width, this.pictureBox1.Height);

            using (Graphics g = Graphics.FromImage(_image))
            {
                g.DrawImage(oldImage, 0, 0);
            }
            oldImage.Dispose();
            this.pictureBox1.BackgroundImage = _image;
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            this.startPoint = e.Location;
            this._mouseDown = true;
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (this._mouseDown)
            {
                using (Graphics g = Graphics.FromImage(this._image))
                {
                    g.DrawLine(Pens.Black, this.startPoint, e.Location);
                    this.startPoint = e.Location;
                }

                this.pictureBox1.Invalidate();
            }
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            this._mouseDown = false;
        }
    }

Solang die Maustaste gedrückt ist und du über die Picturebox fährst (Picturebox ist angedockt) wird auch auf die Picturebox gezeichnet. - Vergrößert man nun das Form, kann man auch auf die weiteren Bereiche zeichnen.

Verstehe also nicht wo genau du dein Problem hast, solang du nicht etwas aufzeigst.

EDIT: Im Anhang nun mal ein Beispiel (ja bin kein Künstler).

10.03.2016 - 10:24 Uhr

Hat es einen Grund, dass du nicht direkt in die PictureBox zeichnest, sondern auf ein Bild?

Übrigens, wenn du eine neues Bitmap Objekt erzeugst, musst du dieses auch neu der PictureBox zuweisen.

10.03.2016 - 09:13 Uhr

Damit spart man sich zwar XPath - heisst aber nicht, dass man XPath nicht kennen muss.

Ich habe die schlimme befürchtung, dass er mit XPath rumopertiert, weil er das ganze in eine Objektstruktur bringen muss (ist zwar nicht schwer aber für einen Anfänger..).

Gerade bei Sachen wie das auflösen der Felddefinitionen gegen die einzelnen Feldvalues könnte ich mir bei ihm schwierig vorstellen.

10.03.2016 - 08:48 Uhr

Hallo,

dein Query ist nicht ganz korrekt.

Das Query für den Zugriff auf die Items müsste wie folgt aussehen:


query = "//bom:items/bom:item";

Als weiteres versucht dein Query unter bom:item noch einmal bom:item aufzulösen. Das ist natürlich quatsch, da dort kein weiteres bom:item zu finden ist.

Dein Query insgesamt müsste also wie folgt aussehen:


XmlNodeList nodes = document.SelectNodes("//bom:items/bom:item/bom:fieldValues/bom:fieldValue", manager);

Mal ein komplettes Beispiel in der Konsole:


            XmlDocument document = new XmlDocument();
            document.Load("Test.xml");
            XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);
            manager.AddNamespace("bom", "http://schemas.unicam.com/unicam/bom/bomtool");

            XmlNodeList nodes = document.SelectNodes("//bom:items/bom:item/bom:fieldValues/bom:fieldValue", manager);

            foreach (XmlNode node in nodes)
            {
                Console.WriteLine(node.Name);
                Console.WriteLine("\t" + "Field: " + node.Attributes["bom:field"].Value);
                Console.WriteLine("\t" + "Value: " + node.Attributes["bom:value"].Value);
            }
            Console.ReadLine();

10.03.2016 - 08:34 Uhr

Hallo,

die Bachelorarbeit beinhaltet ja nicht nur die eventuelle Umsetzung. Es beinhaltet ja ebenfalls die vorherigen Analysen und Überlegungen.

Gerade wenn ich der Beschreibung von dem folge was du vorhast, ist das aus meiner Sicht schon wissenschaftliche Arbeit. Wobei meiner Meinung nach jede vorherige Überlegung zur Umsetzung wissenschaftlicher Art ist.

Was will ich umsetzen? Was gibt es dafür bereits? Welche Komponenten benötige ich? Wie soll das Resultat aussehen? All das hat einen wissenschaftlichen Aspekt.

  • Wir hatten damals jemanden im Unternehmen, der ein spezielles Programm als Aufgabe bekommen hat. Seine Aufgaben waren dann die Möglichen Umsetzungen zu analysieren. - Er hat mit seiner Bachelorarbeit sehr gut abgeschnitten, obwohl das Programm zum Zeitpunkt der Abgabe noch in den Kinderschuhen steckte und wirklich nur der analytische Teil abgeschlossen war.
09.03.2016 - 16:21 Uhr

Ich würde dir auch eher dazu raten, eine globale Queue zu verwenden in welche die Clients Tasks eintragen, die Nodes sich Tasks herausholen und bearbeiten und anschließend den Abarbeitungszustand an die Queue zurück geben. Die Queue informiert dann den Client über die Abarbeitung.

Im Anhang mal ganz grob wie das bei 2 Clients und 2 Nodes aussehen könnte (Ich weiß, kein 100% reines UML).

09.03.2016 - 08:47 Uhr

Die Fehlermeldung zeigt dir ja eigentlich schon, dass du Log4Net eben nicht direkt verwenden kannst. Grund ist einfach, dass Assemblies aus dem großen Framework verwendet werden.

There are no assemblies targeting the Compact Framework 1.0/2.0 or Microsoft Shared Source CLI 1.0 in the binary release, but they can be built from the source release.

Weiterführende Informationen

08.03.2016 - 08:51 Uhr

Ich würde wie t0ms3n eher dazu tendieren einen Service / Webservice dazwischen zu klemmen, der mit den Rechten zum Zugriff auf das Netzlaufwerk ausgestattet ist.

Das Programm kommuniziert dann ausschließlich mit dem Webservice und braucht auch keine höheren oder anderne Rechte.

04.03.2016 - 15:11 Uhr

aber wie soll ich denn bitte 700Kb hochladen wenn nur 256Kb als Zip-Datei erlaubt sind?

Indem du unnötige Sachen weglässt. - In diesem Fall, das fertige Build.

04.03.2016 - 14:31 Uhr

Ähm ja, ging durch die Anpassung des Titels vorhin verloren. Es handelt sich dabei um das System.Windows.Forms.DataVisualization.Charting.Chart.

Ich zeichne die Winkel nun aber mit folgender Vorgehensweise selbst:


public void DrawAngle(float angle, float offset, Color backgroundColor)
{
    AngleDefinition definition = new AngleDefinition();
    definition.Angle = angle;
    definition.Offset = offset;
    definition.Color = Color.FromArgb(50, backgroundColor.R, backgroundColor.G, backgroundColor.B);

    this._angleDefinitions.Add(definition);
    // force the chart to draw the angle
    this.Chart.Invalidate();         
}

void Chart_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
   // draw the angles to the chart
   Graphics g = e.Graphics;

   g.SmoothingMode = SmoothingMode.HighQuality;
   g.InterpolationMode = InterpolationMode.HighQualityBicubic;

   Point middlePoint = new Point(this.Chart.Width / 2, this.Chart.Height / 2);
   // transform the matrix, axis is mirrored
   g.Transform = new Matrix(1, 0, 0, -1, 0, 0);
   g.TranslateTransform(0, -this.Chart.Width);

  Int32 width = middlePoint.X + 30;
  Int32 height = middlePoint.Y + 30;

   Rectangle rect = new Rectangle(middlePoint.X - width / 2, middlePoint.Y - height / 2, width, height);

   foreach (var definition in this._angleDefinitions)
   {
       // get startangle 
       float startAngle = (float)(definition.Angle - definition.Offset);

       if (startAngle < 180)
           startAngle += 180;
       else
           startAngle -= 180;
       if (startAngle < 0)
           startAngle = 360 + startAngle;
       startAngle = startAngle - 90;

       // get sweaping angle
       float sweapingAngle = definition.Offset * 2;

       using (Brush b = new SolidBrush(definition.Color))
       {
           g.FillPie(b, rect, startAngle, sweapingAngle);
           g.DrawPie(Pens.Red, rect, startAngle, sweapingAngle);
       }
   }
}

04.03.2016 - 13:43 Uhr

Hallo,

ich bin nun einen Schritt weiter. Die Winkel zeichne ich nun selber im Chart.Paint-Ereignis.

Auch die Achsenbeschriftung werde ich selbst nach innen Zeichnen. Damit ist das Problem erst einmal gelöst, bevor ich weiter unnötig Zeit investiere herauszufinden ob das über Chart-eigene Funktionalitäten möglich ist.

04.03.2016 - 10:09 Uhr

Hast du mal probiert, wie sich die Anwendung verhält, wenn du die VLC-Komponenten auskommentierst? Kann mir eigentlich nur schwer vorstellen dass es am OpenFileDialog selbst liegt.

EDIT: Ich werde das Programm heut Nachmittag mal nachbauen.

03.03.2016 - 17:09 Uhr

Dein Select lässt sich deutlich optimieren.


SELECT Min(ID), COUNT(*) FROM Verbindungen
WHERE col1 = '2214'
AND col2 = '1001'

03.03.2016 - 16:53 Uhr

Hallo,

ein RCW ist ein COM-Objekt. Ich vermute hier einfach mal dass es das VLC-Plugin ist.

Zeigt dein Code alles, was im OpenFile passiert? Wird der OpenFileDialog angezeigt bevor die Exception geworfen wird?

Hast du einen Task, einen Thread oder einen Timer am laufen?

PS: Zum beenden des Programmes immer Form.Close() verwenden.

03.03.2016 - 15:37 Uhr

... (wie heißt das ganze in Oracle?).

Genauso?

Der von dir beschriebene Weg setzt aber voraus, dass beide Tabellen exakt die gleichen Daten liefern. Ansonsten müsste er ja Spalte die es in der einen Tabelle gibt aber in der anderen nicht fest mit NULL belegen.


SELECT 
    Angle,
    Value,
    Title
FROM tabelle1
UNION
SELECT 
    Angle,
    Value,
    null as Title
FROM tabelle 2

03.03.2016 - 15:31 Uhr

Zusätzlich zu den oben genannten Punkten, sollen das PolarChart und der Winkel in der gleichen Diagrammfläche sein. - Egal was ich mache, ich bekomme sie entweder nur übereinander oder garnicht angezeigt.

Mein aktueller Ansatz war erstmal das PolarChart fertigzustellen.

03.03.2016 - 08:27 Uhr

Das einzige was mir dazu einfallen würde, wäre die beiden Spalte / DataTables zu einem zu mergen.

02.03.2016 - 17:49 Uhr

You have to draw the text by your self at the selected position.

02.03.2016 - 10:22 Uhr

Hallo,

ich verzweifle gerade an einem Chart. In dem Chart sollen ein Polardiagram und zusätzlich ein "Tortensegment" an einem bestimmten Winkel gezeichnet werden.

Der Winkel soll dabei wie folgt dargestellt werden:
Winkel = 90°
Offset = 30°
(Grafik siehe Anhang)

Der Winkel geht also von 60° bis 120 ° (Grafik ist in Paint erstellt daher unter Umständen nicht ganz stimmig).

Mein erster Gedanke war den ChartType Pie zu verwenden und das eine Segment zu zeichnen. - Allerdings bekomme ich es schon logisch nicht hin und nehme an, dass Pie auch der falsche Typ ist.

Wie würdet ihr an die Sache rangehen? Wichtig ist halt, dass wirklich nur der eine Winkel in der Serie gezeichnet wird und der rest des Kreises offen bleibt.

Zusätzlich dazu suche ich einen Weg, die Achsenbezeichner im Polardiagramm nach Innen statt nach Außen zu verlegen. Auch hier suche ich bisher vergeblich.

02.03.2016 - 08:19 Uhr

Ich würde mich hier ErfinderDesRades anschließen. Du machst dir viel zu viel Aufwand, was du über ein anständiges Datenmodell nicht hättest. Eventuell liegt es auch nicht am Datenmodell, sondern dass du es verkehrt visualisieren möchtest.

Warum nimmst du nicht den einfacheren Weg? Du hast deine Übersicht der Serien, wählst eine Serie aus und öffnest den Auswahldialog für die Staffeln / Folgen.

Auf diesem Dialog hast du dann nur ein DataGridView, welches dir Folgen einer Staffel anzeigt. Die Auswahl der Staffel wird anschließend über eine normale ComboBox oberhalb des DataGridView ausgeführt.

Auch würde ich die Serie nicht als "Property" fest verankern sondern eine List / BindingList verwenden.



//...

public class Show
{
      public List<Season> Seasons { get; set; }
}

public class Season
{
      public List<Episode> Episodes { get; set; }
}

An deinen Dialog musst du dann nur die eine Show weitergeben. Die Seasons bindest du an die ComboBox und nach Auswahl der Season werden die entsprechenden Episoden an das DataGridView gebunden.

Designtechnisch könnte das wie im Anhang zu sehen aussehen.

01.03.2016 - 16:25 Uhr

Ich würde das ganze sogar etwas anders angehen. Die 2 Hauptreiter Filme und Serien bleiben.

Auf dem Reiter Serien kommt jedoch nur das DataGridView mit den Serien. Die Staffel und die Folge würde ich in einer ComboBox-Spalte anzeigen / auswählen lassen. In der letzten Spalte dann noch ein Button Details, über den man sich Informationen zur Staffel / Folge ansehen kann.

Das ist jedoch nur der Ansatz den ich wählen würde.

01.03.2016 - 16:12 Uhr

Die kurze Antwort wäre, wie bereits von den anderen erwähnt die Verwendung von Form2.ShowDialog().

Die Nutzerfreundlichere Variante wäre allerdings aus meiner Sicht die Controls auf Form1 auf die der Nutzer zu der Zeit nicht zugreifen darf zu deaktivieren.

29.02.2016 - 16:16 Uhr

Am meißten ist doch schon etwas mit der statischen Klasse im Argen. Wozu muss die Klasse statisch sein?

Erstelle die Klasse nicht-statisch und nutze eine Instanz davon die du im Programm weiter reichst.

Dann kannst du das Programm nämlich auch wie folgt aufbauen:


public class Test
{
     public Int32 X { get; set; }
     public Int32 Y { get; set; }
}

public class MyThreadedClass
{
     public Test Test { get; set; }

     public void Run()
     {
         if(this.Test != null)
         {
               lock(this.Test)
               {
                    this.Test.X++;
                    this.Test.Y += 10;
               }
         }
     }
}

Hallo Palladin007,

deine Idee ist an sich gut. Dann muss er aber wieder eine lokale Variable definieren und kann nicht direkt auf dem Objekt arbeiten.

Wenn ich von deiner Klasse ausgehe, müsste er ja wie folgt den Code aufbauen:


public void Run()
{
     LockedObject<Int32> myLockedObject = new LockedObject<Int32>();
     myLockedObject.Value = Test.X;
     myLockedObject.Value++;
     Test.X = myLockedObject.Value;
}

Nach dem return wird ja der lock()-Kontext wieder verlassen.

29.02.2016 - 09:14 Uhr

Wage mich zu erinnern, dass es bei dem alten Pi ähnliche Probleme mit SD-Karten gab und die Karten entweder garnicht oder nur mangelhaft in Verbindung mit dem Pi funktionierten.

Interessant wäre aus meiner Sicht, ob das tatsächlich an den Karten oder doch eher am Pi liegt. - Denn die SD-Karte, die ich damals im Pi im Einsatz hatte bis sie nicht mehr ging, funktioniert heut noch in allen anderen Geräten.

Ich bin damals auch den Schritt gegangen, dass ich einfach eine billige Ersatzkarte gekauft habe. Die funktioniert heut noch tatellos im Pi.

29.02.2016 - 08:12 Uhr

Da bin ich mir unsicher. Wenn ich der Beschreibung folge müsste der Aufruf in Main ja wie folgt aussehen:


Console.WriteLine(TestCase03());

Sollte es tatsächlich nicht so aussehen, liegt es ganz einfach daran.

26.02.2016 - 15:28 Uhr

Hallo, der korrekte Ansatz wäre den Wert mit an die Methode zu übergeben.


public static void schreibeDutycyle(byte slaveId, ushort startAddress, ushort dutyCycle)
{
      // 
}

Ein anderer Ansatz wäre "DutyCycle" als Property von deiner Kommunikationsklasse. Im ValueChanged-Event der TrackBar weist du der Property dann einfach den aktuellen Wert zu.


public class Kommunikation
{
      public ushort DutyCycle { get; set; }
      // ...
}

public class MyForm : Form
{
       private Kommunikation _kommunikation = new Kommunikation();
       // ...

       private void trackBar1_ValueChanged(Object sender, EventArgs e)
       {
            this._kommunikation.DutyCycle = (ushort)trackBar1.Value;
       }
}

Siehe dazu auch: [FAQ] Kommunikation von 2 Forms

17.02.2016 - 16:59 Uhr

Gerade in einem Projekt von 2004 das ich auf den aktuellen Stand bringen soll gefunden (Beispielhaft):


public class Config : ExecutorConfig
{
     public override void Copy(object source)
     {
           base.Copy(source);
           this.InputPath = new Document();
           this.InputPath.Path = source.InputPath.Path;
           // und so weiter..           
     }

     public Document InputPath { get; set; }

     public Document OutputPath { get; set; }
}

public class Executor
{
      public void Execute()
      {
            string inputPath = this._config.InputPath.Path;
            // Daten ermitteln
            // Daten aufbereiten
            ths.WriteOutput(this._config.OutputPath.Path, daten);
      }
}

War so frei und habe InputPath und OutputPath gegen Strings ersetzt. 👍

09.02.2016 - 16:58 Uhr

Hallo SharpSharp,

ich würde garnicht erst anfangen mit int.Parse und der Textbox zu spielen. Da gibt es deutlich bessere Wege.

Mein Ansatz wäre gewesen Datenklasse zu erstellen für das Form.


public class FormData : INotifyPropertyChanged
{
    private int _counter = 0;
    public int Counter
    {
         get { return _counter; }
         set 
         { 
              if(_counter == value)
                  return;
              _counter = value;
              this.OnPropertyChanged("Counter");
         }
    }

    private void OnPropertyChanged(string property)
    {
           if(this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs(property));
    }
   
    public event PropertyChangedEventHandler PropertyChanged;
}

Im Form wird das dann per DataBinding gebunden:


public class Form1 : Form
{
      public Form1()
      {
             this.SetBinding(this.txtCounter, "Text", _formData, "Counter");
      }
      
      private FormData _formData = new FormData();

      private void SetBinding(Control ctrl, string property, Object dataSource, string datamember)
      {
             ctrl.DataBindings.Add(property, datasource, datamember, DataSourceUpdateMode.OnPropertyChanged);
      }

      private void MyButtonClick(Object sender, EventArgs e)
      {
          this._formData.Counter ++;
      }
}


Ich weiß ist n bisschen viel fü den Anfang, aber wenn man es gleich auf die Art und Weise aufbaut gewöhnt man sich das manuelle Handling der Eingaben gar nicht erst an.

05.02.2016 - 17:02 Uhr

Sorry, keine Ahnung wo die zusätzlichen Angaben in der URL herkamen. Habe die Url korrigiert.

05.02.2016 - 16:34 Uhr

Hallo,

die API hat eine Dokumentation. - In der Dokumentation schaut man dann einfach, ob etwas verfügbar ist dass dir weiterhilft.

Spoiler: ChunkSize
Die ist default bei 10MB.

Quelle:
Google.Apis.Upload.ResumableUpload&lt; TRequest &gt; Class Template Reference

05.02.2016 - 08:31 Uhr

Mit Einstellung auf "Font" wird zumindest im Designer alles korrekt dargestellt.

Dann liegt hier aber etwas anderes im argen. Denn der Font wird nicht von allein größer.

Im folgenden mal die Einstellungen die Forms bei mir haben und auch korrekt anwenden und die Größe nicht einfach von selbst ändern:
*Font: Verdana; 9,75pt *FormBorderStyle: Sizable *AutoScaleMode: Font *AutoSize: False *AutoSizeMode: GrowOnly *Size: 1032; 775 (Win 7 hat sich da eigen mit 1024; 768)

In Code wären es folgende Info's:


this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1016, 737);
this.Font = new System.Drawing.Font("Verdana", 9.75F);
this.Margin = new System.Windows.Forms.Padding(4);

04.02.2016 - 16:11 Uhr

Hallo kk78,

hilft dir die letzte Aussage von Renato nicht?

Ich habe jetzt den Fehler gefunden.
Ich hatte wohl ausversehen den AutoScaleMode auf Font gesetzt. 😦

04.02.2016 - 12:02 Uhr

Hallo,

ich wage mich zu erinnern, dass ich ebenfalls mal ein Projekt erstellt habe in denen ich Schnittstellentypen (Webservice, Client) in eine eigene Assembly ausgelagert habe und diese Typen nicht im Proxy generiert wurden.

In Visual Studio 2010 bekomme ich dies aber ebenfalls nicht mehr hin (gerade einmal probiert).

Einziges was ich tun konnte, was aber sehr Aufwendig ist, war im Proxy die generierten Typen zu entfernen. - Anschließend wurden die aus der gemeinsamen Assembly verwendet.

Ich kann aber auch nichts darüber finden, ob an der Stelle mal was geändert wurde.

15.01.2016 - 15:34 Uhr

Hallo,

korrekter Weise müsste das Fahrzeug die Aktion durchführen, nicht die Garage. Also was in der Richtung:


class Auto : Fortbewegungsmittel
    {
        // ...

        public bool FahreInGarage(Garage garage)
        {
               // wenn Garage zu ist, würde das Auto wohl kaputt gehen
               // Achtung! Weder die Garage selbst noch das Auto befehlen der Garage dass
               // sie sich öffnen soll! 
               if(!garage.IstOffen) 
                    return false;      

               // wenn kein Stellplatz verfügbar ist macht es keinen Sinn hinein zu fahren
               // Achtung! An dieser Stelle fällt auf: Auch Auto ist eigentlich nicht geeignet
               // dazu die Aktion selbst auszuführen. - Eigentlich müsste der Fahrer in die
               // Garage fahren. - Das Auto ist nur das Hilfsmittel.
               if(!garage.StellplatzVerfügbar)
                    return false;

               // Auto in Garage stellen.
               garage.Add(this);

               return true;
        }
    }

Wie man unschwer in meinem Kommentar erkennen kann, ist aber auch das Auto nicht der korrekte Ausführer der Aktion. Also doch eher der Fahrer.


public class Fahrer
{
     private Fortbewegungsmittel _fortbewegungsmittel;

     public void VerwendeFortbewegungsmittel(Fortbewegungsmittel fortbewegungsmittel)
    {
          this._fortbewegungsmittel = fortbewegungsmittel;
    }

    public void BewegeFortbewegungsmittel(Richtung, Distanz)
    {
        this._fortbewegungsmittel.FahreInRichtung(Richtung, Distanz);
    }

    public bool FahreInGarage(Garage garage)
    {
               // wenn Garage zu ist, würde das Auto wohl kaputt gehen
               // Achtung! Weder die Garage selbst noch das Auto befehlen der Garage dass
               // sie sich öffnen soll! 
               if(!garage.IstOffen) 
                    return false;      

               // wenn kein Stellplatz verfügbar ist macht es keinen Sinn hinein zu fahren
               // Achtung! An dieser Stelle fällt auf: Auch Auto ist eigentlich nicht geeignet
               // dazu die Aktion selbst auszuführen. - Eigentlich müsste der Fahrer in die
               // Garage fahren. - Das Auto ist nur das Hilfsmittel.
               if(!garage.StellplatzVerfügbar)
                    return false;

                // $$ Bewegung in die Garage lassen wir mal außen vor
                // ...

               // Auto in Garage stellen.
               garage.Add(this._fortbewegungsmittel);
               return true;
    }
}

15.01.2016 - 13:46 Uhr

Hallo,

habe ich es mir doch gedacht. In FinalVideoSource_NewFrame hängst du doch ein Bild an die PictureBox. - Genau dieses Bild musst du eben auch entsprechend bearbeiten.

15.01.2016 - 13:45 Uhr

Hallo,

die 3 Fehler resultierten direkt aus dem falsch benannten Konstruktor. Nachdem der erste Syntaktische Fehler erkannt wurde, wird der rest nicht mehr korrekt ausgewertet und führt ggf. zu weiteren Fehlern.

Das hat aber Abt bereits geschrieben.

15.01.2016 - 13:39 Uhr

Dazu müssten wir erst einmal wissen, wie du den Video-Stream entgegen nimmst. - Die meißten Bibliotheken die ich kenne liefern nämlich Einzelbilder die man bearbeiten kann.

12.01.2016 - 13:24 Uhr

Die Konsolenausgabe im Try-Block, wird das in der WPF Anwendung in einer Textbox oder ähnlichem ausgegeben?

18.12.2015 - 12:28 Uhr

Ich tippe auf "if (e.Clicks == 1)" als Ursache.

War quatsch. Ich habe deinen Code mal 1 zu 1 kopiert und geprüft. - Bei mir werden alle Selektierten Einträge in den String geschrieben.

EDIT:

Ah, du hast den SelectionMode auf MultipleExtended? In dem Fall bekomme ich das selbe Verhalten wie du.

16.12.2015 - 11:41 Uhr

Ok, jetzt gehen wir in die tiefsten Grundlagen. Ich nehme mal an, dein gezeigter Code befindet sich im EventHandler "TimerEvent"?

Wenn ich das richtig sehe:


public enum State
{
      Count = 0,
      Wait = 1
}


public class Form1 : Form
{
      private State _PortDataState = State.Count;

      // ...

      private void TimerEvent(Object sender, EventArgs e)
      {
                   // ...
                  if(this._PortDataState == State.Count && MyGlobals.portData == 1)
                  {
                        zahl = zahl + 1;
                        zaehler.Text = zahl.ToString();
                        status.Text =  MyGlobals.portData.ToString();
                        this._PortDataState = State.Wait;
                  }
                  else if(state == State.Wait && MyGlobals.portData == 0)
                  {
                        this._PortDataState = State.Count;
                  }
      }
}


16.12.2015 - 11:22 Uhr

Hallo,

ich würde den Ansatz ändern. - Eventuell Statusbezogen. Sowas stelle ich mir vor:


public enum State
{
     Count = 0,
     Wait = 1
}

//...

if(state == State.Count && MyGlobals.portData == 1)
{                
     zahl = zahl + 1;
     zaehler.Text = zahl.ToString();
     status.Text =  MyGlobals.portData.ToString();
     state = State.Wait;
}
else if(state == State.Wait && MyGlobals.portData == 0)
{
      state = State.Count;
}
else
      continue;

11.12.2015 - 11:41 Uhr

Hallo matte,

auch mir ist nicht ganz klar, was du jetzt von uns erwartest. Möchtest du wissen, wie du die StoredProcedures abrufen kannst?

Wenn es dir nur um den Aufruf von Stored Procedures geht, hilft dir eventuell folgendes (muss jedoch deinen gegebenheiten angepasst werden):


       public class SQLAccess
    {
        public string ConnectionStringName { get; set; }
        public int CommandTimeout { get; set; }

        /// <summary>
        /// Read data from sql database 
        /// </summary>
        /// <param name="commandText"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public DataSet ExecuteDataSet(string commandText, CommandType type, Dictionary<string, object> parameters)
        {
            DataSet dsResult = new DataSet();

            using (SqlConnection connection = new SqlConnection(this.ConnectionStringName))
            {
                SqlCommand command = connection.CreateCommand();
                command.CommandText = commandText;
                command.CommandType = type;
                command.CommandTimeout = this.CommandTimeout;
                foreach (string parameter in parameters.Keys)
                {
                    command.Parameters.Add(new SqlParameter(parameter, parameters[parameter]));
                }

                SqlDataAdapter adapter = new SqlDataAdapter(command);
                connection.Open();
                adapter.Fill(dsResult);
            }

            return dsResult;
        }

        public void ExecuteNonQuery(string commandText, CommandType type, Dictionary<string, object> parameters)
        {
            using (SqlConnection connection = new SqlConnection(this.ConnectionStringName))
            {
                SqlCommand command = connection.CreateCommand();
                command.CommandText = commandText;
                command.CommandType = type;
                command.CommandTimeout = this.CommandTimeout;
                foreach (string parameter in parameters.Keys)
                {
                    command.Parameters.Add(new SqlParameter(parameter, parameters[parameter]));
                }

                connection.Open();
                command.ExecuteNonQuery();
            }
        }
    }

10.12.2015 - 18:24 Uhr

Hallo,

BTW: ist es Absicht dass IController 2x vorhanden ist?

Nein natürlich nicht. Copy & Paste halt.

Diese sind ja durch IView und IController abstrahiert, aber wie hast du dann gedacht auf Member von diesen zugreifen zu können? Hier müsste dann IView und IController spezialisiert od. auf Reflection/DLR zurückgegriffen werden.

Ja ist noch nicht ganz zuende gedacht. - Was auch der Grund ist, warum die Methoden BindData und BindEvents aus dem ViewAdapter abstrakt sind. - Bisher ist mein Ansatz halt von ViewAdapter abzuleiten. Ist aber aus meiner Sicht auch noch nicht der Weisheit letzter Schluss.

Die Bindungen mittels Reflection durchzuführen, möchte ich allerdings vermeiden.

ich denke mit einem Generischen Ansatz bist du hier besser beraten.

Naja, hier ist auch die Frage in wie weit man mit Generics weiterkommt. - Du dachtest an den ViewAdapter als generische Klasse? Oder wie du weiter unten aufführst alles?

Gibt doch bitte mal an welche Technologie (WinForm, WPF, ASP...) du Benutzt, dann kann man vielleicht besser weiterhelfen.

In dem Speziellen Fall Windows Forms, für WPF würde ich immer den "Standard" MVVM Ansatz wählen.

10.12.2015 - 16:22 Uhr

Hallo,

derzeit versuche ich für private Anwendungen ein Schema für Datenbindung etc. zu entwickeln, ohne zu viel Wissen über den Controller / das Model an die View weiterzugeben.

Derzeit sieht der Aufbau etwa wie folgt aus:


public interface IView
{
    #region Methods

    /// <summary>
    /// Method to get all controls
    /// </summary>
    /// <returns></returns>
    Dictionary<string, Control> GetControls();

    #endregion
}

public interface IController
{
    #region Properties

    /// <summary>
    /// Gets or sets the model
    /// </summary>
    IModel Model { get; set; }

    #endregion
}

public interface IModel : INotifyPropertyChanged
{
}

public abstract class ViewAdapter
{
    #region Fields

    protected IController Controller;
    protected IView View;

    #endregion

    #region Construction / Destruction

    public ViewAdapter(IView view, IController controller)
    {
        this.Controller = controller;
        this.View = view;

        this.BindData();
        this.BindEvents();
    }

    #endregion

    #region Methods

    /// <summary>
    /// Method to bind data
    /// </summary>
    protected abstract void BindData();

    /// <summary>
    /// Method to bind events
    /// </summary>
    protected abstract void BindEvents();

    #endregion
}

Der ViewAdapter ist dann dafür zuständig, die korrekten Daten an die View zu binden und Events der View korrekt an den Controller weiterzugeben.

Was haltet ihr von dem Ansatz? Ist der eher schlecht? Habt ihr ggf. bessere Ideen?

10.12.2015 - 08:36 Uhr

Wie ist denn der genaue Fehler, den du erhältst?

10.12.2015 - 08:34 Uhr

Hallo,

in der Tat ist es selbst mit SnmpSharpNet ziemlich umständlich SNMP-Traps zu senden / requests zu stellen.

Wir haben ein Programm, welches zyklisch Netzwerkkomponenten überwacht. Dieses sendet bei Statusänderung einer Komponente SNMPTraps an ein anderes Programm. Das SNMP-Trap Handling war dabei das weitaus komplizierteste.

Das 3. Beispiel aus Coffeebean's Link sollte dir allerdings weiterhelfen.

09.12.2015 - 15:24 Uhr

Hallo,

ich habe hier zwar gerade mal etwas vorbereitet, werde es dir jedoch nicht geben. - Wenn du bei dem was du dort programmiert hast schon nicht durchsiehst, wird mein Code dich vor noch mehr Fragen stellen.

Aber mal ein paar Verbesserungsvorschläge:
*Erstelle für den Benutzer eine Klasse mit den Properties Name, Alter und Passwort *Erstelle eine Klasse für die Validierung der Eingaben (Methode zur Validierung des Alters; Methode zur Validierung des Passworts) *Nutze für die Passworteingabe eine "do-while"-Schleife solang das Passwort nicht gültig ist bzw. bis die max. Anzahl Versuche durchgeführt wurde

Die Eingaben und Ausgaben bleiben in dem Schritt erst mal in der Console. - Versuche das mal umzusetzen. Bei Problemen kannst du gern noch einmal Fragen. - Jedoch bitte nur bei Konkreten Problemen, die mit Hilfe der Doku nicht gelöst werden können.

Solltest du keine Probleme haben, kannst du uns dein Ergebnis jedoch noch einmal hier Präsentieren.