Laden...

Forenbeiträge von 123thomas Ingesamt 124 Beiträge

09.04.2018 - 11:42 Uhr

Ist das ein alter Router oder ein richtiger Acess Point?

Nicht das der alte Router ein Verbindung mit dem WAN Port erwartet.

03.04.2018 - 06:39 Uhr

Hallo,

du hast das Denken der objektorientierten Programmiersprache noch nicht ganz verinnerlicht.

Also erstmal zu deinem Problem:
Das Objekt "player" ist nur in der Methode "btn_hinzugefuegt_Click" verfügbar.
Wenn du auf die Anzahl der Spieler zugreifen möchtest, dann musst du Variable bei deinen Variablen deklarieren und dann in "btn_hinzugefuegt_Click" nur die Anzahl setzen.

Gruß

EDIT: mal ein kleiner Vorschlag von mir:

Klasse Spieler


public class Spieler
    {
        public Spieler() {}
        public Spieler(string name)
        {
            this.Name = name;
        }
        public Spieler(string name, int id)
        {
            this.Name = name;
            this.Id = id;
        }

        public int Id { get; set; }
        public string Name { get; set; }
    }

Klasse Spielerverwaltung

 public class Spielerverwaltung
    {
        List<Spieler> listeSpieler = new List<Spieler>();

        public void neuerSpieler(Spieler spieler)
        {
            listeSpieler.Add(spieler);
        }

        public int getSpielerAnzahl()
        {
            return listeSpieler.Count;
        }

        Random rdm = new Random();
        public Spieler getZufallsSpieler()
        {
            return listeSpieler[rdm.Next(0,listeSpieler.Count)];
        }
    }

Spieler Erstellung etc.


public partial class Form1 : Form
    {
        Spielerverwaltung verwaltung = new Spielerverwaltung();

        public Form1()
        {
            InitializeComponent();

            // neuer Spieler
            Spieler spieler1 = new Spieler("Spieler 1", 1);
            verwaltung.neuerSpieler(spieler1);

            //neuer Spieler kurz
            verwaltung.neuerSpieler(new Spieler("Spieler 2", 2));

            //neuer Spieler kurz
            verwaltung.neuerSpieler(new Spieler("Hans", 3));

            //neuer Spieler kurz
            verwaltung.neuerSpieler(new Spieler("Dieter", 4));

            //Abfrage der Spieler
            MessageBox.Show(verwaltung.getSpielerAnzahl().ToString());

            //Zusfallsspieler
            MessageBox.Show(verwaltung.getZufallsSpieler().Name);

        }
    }
22.03.2018 - 11:05 Uhr

Hallo,

versuche es mal damit:

// Define the border style of the form to a dialog box.
form1.FormBorderStyle = FormBorderStyle.FixedDialog;

// Set the MaximizeBox to false to remove the maximize box.
form1.MaximizeBox = false;

// Set the MinimizeBox to false to remove the minimize box.
form1.MinimizeBox = false;

// Set the start position of the form to the center of the screen.
form1.StartPosition = FormStartPosition.CenterScreen; 

// Display the form as a modal dialog box.
form1.ShowDialog();

https://stackoverflow.com/a/5416394

06.03.2018 - 07:03 Uhr

Der Compiler weiß ja nicht was genau getLenght für Werte haben kann.
Es gibt ja durchaus auch Fälle in dennen die Methode -1 zurück gibt.
Dann hast du wieder das Problem, das die Schleife nicht ausgeführt wird.

07.02.2018 - 13:15 Uhr

Also eigentlich hast du schon die beste Lösung genannt.

Es ist natürlich immer eine Frage des Aufwandes den man betreiben möchte/muss.
Am besten ist es natürlich eine lokale Datenbank die aber auch Online synchronisiert wird, falls die festplatte mal "stirbt".

Aber ich würde es lokal in eine Datenbank speichern und gut ist.
Datenbank hat den Vorteil, das nicht immer alles schreiben musst sondern nur die geänderten Einträge. Daher ist ein Datenverlust relativ gering.

Gruß Thomas

05.12.2017 - 15:56 Uhr

Also wenn ich das ganze so lese werde ich das Gefühl nicht los das C# hier ein bisschen Oversize ist.

Für mich hört es sich an, als ob man das ganze am besten direkt in PHP lösen kann (Vorausgesetzt die Nachricht an den Kunden ist eine E-Mail)

Wenn du in PHP den Alarm bekommst kannst du doch dann direkt mit PHP und SQL deine Datenbankabfrage machen um dann aus PHP heraus eine E-Mail zu senden.

Wenn du noch eine C# Applikation auf einem weiteren Rechner oder Server laufen hast, muss dieser ja auch noch betrieben werden.

Gruß

05.12.2017 - 14:18 Uhr

Ich würde hier mit JSON arbeiten, das wird von PHP und C# unterstützt.

Aber sollte es nicht so sein, sondern mit einer URL und dann angehängter Query reicht ja ein normaler WebRequest.

Gruß

01.12.2017 - 09:00 Uhr

Du hast da ein Denkfehler drinne.

du übergibts folgenden

DezAddieren(Int32.Parse(String,NumberStyles) )

möchtest aber folgendes:

DezAddieren(Int32.Parse(String),Int32.Parse(String) )
28.11.2017 - 10:36 Uhr

Also möchtest du über die ComboBoxen so eine Art Shortcuts generieren.
Und dann die Tasten die in der ComboBox angezeigt werden als Tastendruck simulieren?

Wenn ja, dann schau dir mal diesen Artikel an: Tastendruck simulieren c#

Gruß
Thomas

28.11.2017 - 06:18 Uhr

Hallo versuche es mal mit:

listView1.Items.Clear();

Du möchtest ja die Items löschen und nicht wie du schon festgestellt hast das ganze ListView.

Gruß

22.11.2017 - 15:19 Uhr

Ich glaube nicht, aber das weiß ich nicht zu 100%.

aber wenn die Elemente in dem CustomControl eineindeutig sind und das CustomControl auch, dann kannst du doch nach dem CustomControl suchen und von dort auf die inneren Controls zugreifen.

22.11.2017 - 15:04 Uhr

Okay, dann nimm die Lösung von Sir Rufo.
Du musst dann nur noch das so umbauen, das wenn jemand etwas eingegeben hat das dann ein neues SchnittItem erzeugt wird. Und dies in den comboBoxen integriert wird.

22.11.2017 - 13:02 Uhr

Genau, und wenn ich das richtige verstehe hast du ja dann die zweite ComboBox.
Dann muss ja jemand oder vom Programm definiert werden zu welchen Wert der eingegebe Wert in ComboBox zwei gehört.

Wie ist das gelöst?

22.11.2017 - 12:13 Uhr

Bei den Werten, die im späteren Programmverlauf anscheinend dazukommen, muss ja irgendwann und irgendwer die Verbindung/den Bezug definieren.

Die Frage ist was kommt dazu und wer muss den Zusammenhang definieren?

Ich glaube, das nicht das das programmiertechnische das Problem ist sondern ehr, das es kein Plan gibt was wie funktionieren soll und kann. Gibt es den ein Diagramm o.ä. wie es nachher aussehen soll?

22.11.2017 - 12:04 Uhr

Kannst du nicht einfach mit die Steuerelemente mit einer count-Variable versehen?

"TextBox_ "+ count

Und dann könntest du diese noch in eine Liste speichern, wenn es dir Vorteile bringt.

EDIT: Erstellst du die CustomElemente per Code oder manuell?

Gruß

07.11.2017 - 15:06 Uhr

Du kannst am besten die Pfade der Dateien in eine List<string> schreiben. Dann die List in die Console schreiben und dann kannst du anhand der Eingabe(die ein index sein muss) den Pfad aus der Liste holen um dann die Datei auszulesen.

Gruß

07.11.2017 - 10:41 Uhr

Das gibt es eigentlich meiner Meinung nach 3 Lösungen.

Die schnelle Anfänger Lösung mit String.Endswith(".txt");
Die elegante Lösung ist mit Regex
Das direkte Filter der Dateitypen bei GetFiles ist natürlich die performanteste Lösung.

Gruß

02.11.2017 - 15:40 Uhr

Was passiert denn, wenn du ein anderes Fenster über deine Anwendung legst?
Verschwindet das auch in den Hintergrund?

02.11.2017 - 14:12 Uhr

Hallo,

deine Fragestellung hilft nicht wirklich weiter.

Die Meldung kommt ja erst nach dem bestätigen des Dialoges, wenn man eine bestehende Datei ausgewählt hat.
Wie ist dein SaveFile Dialog konfiguriert? (Ein Stück Code wäre nicht schlecht)

Gruß

25.10.2017 - 11:56 Uhr

Also ich hab entweder keine bekommen oder kann diese nicht finden 😄

18.10.2017 - 11:28 Uhr

Bei 5 Zeilen würde dir im übrigen nicht das GUI einfrieren, wenn du das Sleep rausnehmen würdest.

17.10.2017 - 08:21 Uhr

Wenn ich das richtig verstehe möchte er ja nur lesen.

Ist es nicht möglich die Datei im Abstand von X in ein temp Ordner zu kopieren und dann öffnen zum Lesen?

Das Kopieren müsste doch auch während die Datei offen ist gehen oder?

Gruß Thomas

13.10.2017 - 09:50 Uhr

Nein, "autos" ist ja die Liste.
du muss deinen: "fileContent" nehmen und den als Inhalt wegschreiben.

File.WriteAllText(@"Name.csv", fileContent);
13.10.2017 - 09:33 Uhr

Du hast jetzt lediglich, den Dateiinhalt zusammen gebaut. Nun musst du mithilfe von File den Inhalt in eine Datei schreiben.

05.10.2017 - 10:38 Uhr

public static void BearbeitePerson()
        {
            Console.WriteLine("Wähle eine Person, die du bearbeiten willst:");
            Console.WriteLine("\n");
            for (int i = 0; i < _personen.Count; i++)
            {
                Console.WriteLine(i.ToString() + " " + _personen[i].ToString());
            }
            //Benutzer muss den zu bearbeitenden Index eingeben
             int index = Convert.toInt32(Console.Readline()); //hier kann das Programm abstürzen, wenn z.B. ein Buschstaben eingegeben wird. Hier müssten Fehler bei der Eingabe abgefangen werden, aber das ist ein komplexeres Thema
            //Person(Objekt) das zu bearbeiten ist holen
             Personen myPerson = _personen[index];
            //neuen Namen einlesen
             string neuerName = Console.ReadLine();
           //neuen Namen der myPerson zuweisen
          
          //myPerson in der Liste _personen an der Stelle index zurückschreiben

            Console.ReadLine();
        }

Die beiden letzten Zeilen habe ich bewusst frei gelassen, durch die Kommentare müsstest du eigentlich erkennen was dort gemacht werden muss.

Gruß

05.10.2017 - 09:40 Uhr

Hallo,

Coffeebean hat das schon gut erklärt.
Eins vorweg, deine Klasse Personen ist falsch benannt, da diese immer nur eine Person als Objekt enthält. besser wäre Person als Einzahl. In der Liste sind dann mehrere Personen somit kann der Name dort bleiben:

List<Person> _personen

Du musst dir vorstellen deine Liste ist im Hintergrund eine Tabelle.

index|Objekt mit Persoenen (List<Personen> _personen)
0|_personen.Vorame="Thomas",_personen.Nachname="Müller"
1|_personen.Vorame="Maike",_personen.Nachname="Pocher"
2|_personen.Vorame="Markus",_personen.Nachname="Meyer"
....usw

Und dann kannst du dir Sachen aus der Tabelle holen:

Personen myPerson = _personen[1];

enstpricht dann Objekt Personen (_personen.Vorame="Maike",_personen.Nachname="Pocher")

string myPersonName = myPerson.Vorname;

entspricht dann string aus dem Objekt myPerson (Maike)

Das solltet ihr aber eigentlich auch gezeigt bekommen haben wenn ihr am C# lernen seid.
Gruß Thomas

04.10.2017 - 13:44 Uhr

Ich habe das Problem übrigens selber gefunden, habe eine if Schleife gemacht 😃 aber vielen dank an euch alle!

Hallo,

nur mal als Info, eine If Schleife gibt es nicht. Da legen Lehrer oder Profs meiner Erfahrung nach Wert drauf.

if,switch = Anweisung
for,foreach,while = Schleife

Gruß
Thomas

26.09.2017 - 15:32 Uhr

und hier mal ein kleines Beispiel für die Hastable:


        private TextBox txtüberschrift;
        private Hashtable tabelleTextBox = new Hashtable();
        

        public Form1()
        {

            txtüberschrift = new TextBox();
            txtüberschrift.Name = "Überschrift";
            txtüberschrift.Location = new Point(0, 0);
            this.Controls.Add(txtüberschrift);
           

            tabelleTextBox.Add(txtüberschrift.Name, txtüberschrift);

            InitializeComponent();
            
        }

        public void FeldLeer(string valueFeldLeer)
        {
            TextBox textBoxtemp;
            textBoxtemp = (TextBox) tabelleTextBox[valueFeldLeer];
}
26.09.2017 - 12:11 Uhr

Vermutlich musst du erst ein Befehl senden damit, der was auch immer dir die Temperatur schickt.(Request)

26.09.2017 - 10:27 Uhr

Eigentlich ist es besser wenn man ich es selbst erarbeitet, aber ich war mal so nett und hab ein klienes Beispiel erstellt:


 public partial class Form1 : Form
    {
        private List<ChartObject> listChartObject = new List<ChartObject>();

        public Form1()
        {
            InitializeComponent();
            listChartObject.Add(new ChartObject("Ausgang", 22));
            listChartObject.Add(new ChartObject("Wasauchimmer", 1000));
            MessageBox.Show(listChartObject[0].ToString());
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Close();
        }
    }

    class ChartObject
    {
        private string state;
        private int count; 

        public ChartObject(string state, int count)
        {
            this.state = state;
            this.count = count;
        }
        public override string ToString()
        {
            return state + " - " + count;
        }
    }
26.09.2017 - 10:10 Uhr
  
        private void myport_DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)  
        {  
            try //Könnte eine Ausnahme auslösen  
            {  
                string line= myport.ReadLine();  
                UpdateLabel1( label1,line);  
                
            }  
            catch (Exception) //Behandelt die Ausnahme  
            {  
                return;  
  
            }  
        }  
        
  

Auf dem ersten Blick sehe ich hier ein mögliches Problem, da du nur eine Zeile aus dem SerialPort ließt. Wenn dein Temperatur Controller zu beginn ein Leerzeile oder ähnliches sendet dann bekommst du auch nur diese.

Versuche mal den kompletten String aus dem SerialPort zu lesen.

Gruß

12.07.2017 - 15:56 Uhr

Wenn ich das richtig verstehe, dann kopiert er im Desinger von VS 2010 die Steuerelemente hin und her. Dies sollte eigentlich auch mit mehreren Steuerelementen wunderbar funktionieren.

Die Frage ist wie genau du das machst. Hast du 2 Instanzen von dem VS offen?
Wenn ja dann versuche mal die Form, aus der du die Elemente kopieren möchtest bei deinem Zielprojekt in die Projektmappe zu importieren um sie dann zu kopieren und danach dann wieder die Form aus der Projektmappe zu löschen.

Ich weiß ist ein bisschen umständlich, aber was besseres fällt mir gerade nicht ein.

MFG
Thomas

06.07.2017 - 11:12 Uhr

Wie Abt schon sagte:

Du hast keinen Zugriff auf ein Volume Ordner. Normalerweise hat hier nie ein normaler Benutzer Zugriff, sondern wenn überhaupt ein Admin und Anwendungen, die im Admin-Kontext laufen.

Selbst, wenn du bei dir Admin bist und drauf Zugreifen kannst, wird das Programm dann bei anderen Usern die nicht als Admin angemeldet sind nicht funktionieren.

Daher wirst du nicht ohne Exception Handling auskommen. Stichwort Try and catch.

Wir versuchen dir hier bestmöglich zu helfen. Doch leider ist es oft so, dass viele Informationen die zur Hilfe benötigt werden einfach weggelassen werden. Daher wurde hier ein umfangreichen FAQ geschrieben. Wenn du "motzige" Antworten vermeiden möchtest, dann musst du am besten beim Erstellen eines Beitrages die Eintrag Wie poste ich richtig durchgehen, damit du alle benötigten Informationen in deinem Thread hast.

Gruß.. der der auch mal klein angefangen ist und aus Hobby programmiert.

29.03.2017 - 14:30 Uhr

Ich kenne jetzt SharpPcap leider nicht.

Aber der Teil in der Main wird ja nur einmal ausgeführt zur Laufzeit. Du willst vermutlich das er dauerhaft abhört, dann müsste das doch auch ein Event sein, dass immer wenn er Pakete empfängt abfragt, ob es zu dem Filter passt und dann ggf. ausgibt. bzw. in dem bestehenden Event mit integrieren.

Gruß

29.03.2017 - 11:15 Uhr

Dein Post hört sich so als ob du schon eine Lösung hast, aber erwartest, das wir dir trotzdem eine Lösung schreiben sollen.
Das wird hier aber keiner machen.

Wenn du ein Problem hast mit deinem Code, dann bitte den Code hier Posten und beschreiben was genau nicht funktioniert.

Gruß

29.03.2017 - 11:04 Uhr

Okay also haben wir das schonmal geklärt.

Jetzt die nächste Frage. Dein aktuelles Problem ist, dass das Event "device_OnPacketArrival" nicht ausgeführt wird?

Wenn ja dann könntest du schauen, ob du das korrekte Device ausgewählt hast mit "Devices[0]", dass du abhören möchtest.

Oder funktioniert nur die Filterung nicht?

Gruß

28.03.2017 - 09:19 Uhr

Hallo,

ich glaube du verstehst uns nicht ganz. Schaut dein Code so aus?

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            #region  Adapter anlegen und Pakete erfassen
            ICaptureDevice device = Devices[0];                                                         // Erstellen eines Gerätes aus der Liste          
            device.OnPacketArrival += new SharpPcap.PacketArrivalEventHandler(device_OnPacketArrival);  // EventHandler
            int readTimeoutMilliseconds = 1000;
            device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds);                               // Öffnet Geräteschnittstelle
            Console.WriteLine("-- Gerät {0} auslesen",device.Description);
            device.StartCapture();                                                                      // Prozess Start
            Console.ReadLine();
            Console.Clear();
            device.StopCapture();                                                                       // Prozess Stop
            device.Close();                                                                             // Schließt Geräteschnittstelle
            #endregion

            #region Pakete mit Filter
            // device.OnPacketArrival += new SharpPcap.PacketArrivalEventHandler(device_FilterPacket);  // EventHandler
            device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds);                               // Öffnet Schnittstelle                                                                                                    
            string filter = "ip and tcp";                                                               // Filter für IP und TCP
            device.Filter = filter;                                                                     // Filter dem Gerät zuweisen
            device.Capture();                                                                           // Start Paketerfassung
            Console.WriteLine("-- Angewendeter Filter \"{0}\"",filter);
            Console.WriteLine("-- Abhören von Schnittstelle {0}: ",device.Description);
            Console.ReadLine();
            device.Close();
            #endregion

       }

        private static void device_OnPacketArrival(object sender, CaptureEventArgs packet)
        {
            DateTime time = packet.Packet.Timeval.Date;
            int len = packet.Packet.Data.Length;
            Console.WriteLine("{0}:{1}:{2},{3} Len={4}",
            time.Hour, time.Minute, time.Second, time.Millisecond, len);
         }
    }
}
27.03.2017 - 15:29 Uhr

Da fehlt immer noch etwas Code.

Die Frage ist wann wird der erste Code Ausschnitt aufgerufen/verarbeitet?

Gruß

22.03.2017 - 18:40 Uhr

Du gibst die Referenz von list weiter, bearbeitest sie dann wohl gleichzeitig in zwei Threads - ohne lock().
Entweder als Listen-Kopie übergeben (list.Tolist()) oder entsprechend Thread-Safe arbeiten.

Okay das wird es gewesen sein. Zumindest hatte ich schon lange keine Abstürze mehr.

22.03.2017 - 09:39 Uhr

Meine DataReceived Methode sieht wie folgt aus:

void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            System.IO.Ports.SerialPort spL = (System.IO.Ports.SerialPort)sender;
            string received = spL.ReadExisting();
            List<string> list = received.Split('\n').ToList<string>();
            while (list.Contains(""))
            {
                list.Remove("");
            }
            listView1.Invoke((Action)(() => listViewadapt.setGPSData(GPSDataConverter.convertNmeaToGPSData(list, listGPSData))));
            foreach(string line in list)
            {
                log.write(line);
            }
        }

Durch das Invoke bin ich doch thread-safe oder?

@MarsStein
Den Stacktrace kenne ich nicht, habe aber gerade danach gegooglet. Den muss ich dann erst einprogrammieren oder zeigt VS Express 2013 den direkt an?

Gruß und danke schonmal für die Hilfe

21.03.2017 - 17:23 Uhr

@Cat

Das habe ich auch erst gedacht, aber beim bnt_start ist da das selbe und dort funktoniert alles wie es soll und dann habe ich mir das Beispiel in kurz nachgebaut:

private void button1_Click(object sender, EventArgs e)
        {
            button1.Visible = false;
            button2.Visible = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            button2.Visible = false;
            button1.Visible = true;
        }

Dort funktioniert alles.

Wenn ich beide Buttons mit Enable true und false beschreiben dann bleibt der Startbutton immer da und wird nur ausgegraut. Wenn ich nur den Stop Button von Visible durch bnt_stop.Enabled = false; ersetzte passiert das gleiche wie in ersten Post. An der Zeile wird die Exception geworfen.

Ich glaube so langsam das es irgendwie mit dem dataGridView zusammen hängt kann aber nicht sagen wie.

EDIT:Auch mit Invoke stürtz es bei Visible ab

public static void ButtonInvoke(Button _Button, bool _Visible, bool _Enable)
        {
            _Button.Invoke(new EventHandler(delegate
            {
                _Button.Visible = _Visible;
                _Button.Enabled = _Enable;
            }));
        }
21.03.2017 - 16:43 Uhr

Hallo,

ich habe ein Problem unzwar habe ich ein Programm, welches GPS Daten über die COM Schnittstelle einliest, diese dann verarbeitet und in einen dataGridView ausgibt. Das funktioniert auch soweit. Aber wenn ich die Verarbeitung starte und das dataGridView dann ca. 2 Einträge habe und dann Stoppe stürtz das Programm bei folgender Zeile ab:

bnt_stop.Visible = false;

mit folgendem Fehler:> Fehlermeldung:

Ein Ausnahmefehler des Typs "System.IndexOutOfRangeException" ist in System.Windows.Forms.dll aufgetreten.

Zusätzliche Informationen: Der Index -1 hat keinen Wert.

Mein Problem ist, dass ich keine Ahnung habe was bei dem Button, der übrigens mit dem Designer erstellt wurde, der Index sein soll.

Was ich bis jetzt herausgefunden habe ist, dass wenn ich das dataGridView nicht fülle(bzw. keine Daten über die Com Schnittstelle empfange) ich auch kein Absturz habe.

hier der Code der Buttons bnt_start und bnt_stop:

private void bnt_stop_Click(object sender, EventArgs e)
        {
            //try
            //{
                
                //try
                //{
                    bnt_start.Visible = true;
                    //new Fehler("" + bnt_Stop.ToString()+ "|" + bnt_Stop.Controls.ToString());
                   [COLOR] bnt_stop.Visible[/COLOR] = false;
                //}
                //catch { throw new ArgumentException("Button Visible Fehler"); }
                log.LoggingAktiv = false;
                ToolstripCOMPort(false);
                serialPort.CloseCOMPort();
                
            /*}
            catch (Exception ex)
            {
                //toolStripStatusLabel2.Text = ex.Message;
                bnt_stop.Visible = true;
                bnt_start.Visible = false;
                log.LoggingAktiv = true;
                ToolstripCOMPort(true);
                new Fehler("Stop Button konnte nicht komplett verarbeitet werden. Fehlertext: " + ex.Message);
                MessageBox.Show("Fehler beim Schließen des COM Ports", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }*/

        }
 private void bnt_start_Click(object sender, EventArgs e)
        {
            try
            {
                string settings = loadSettings();
                if (settings != null && settings != "")
                {
                    serialPort = new SerialPortverwal(settings);
                }
                serialPort.DataReceived += serialPort_DataReceived;
                bnt_stop.Visible = true;
                bnt_start.Visible = false;
                log.LoggingAktiv = true;
                ToolstripCOMPort(true);
                Properties.Settings.Default.positionGPSData = 0;
                Properties.Settings.Default.Save();
                listGPSData = new List<GPSData>();
                dataGridView1.DataSource = new List<GPSData>();
                dataGridView1.DataSource = listGPSData;
            }
            catch(Exception ex)
            {
                //toolStripStatusLabel2.Text = ex.Message;
                bnt_stop.Visible = false;
                bnt_start.Visible = true;
                log.LoggingAktiv = false;
                ToolstripCOMPort(false);
                if (serialPort != null)
                    if (serialPort.isOpen)
                        serialPort.CloseCOMPort();
                new Fehler("Start Button konnte nicht komplett verarbeitet werden. Fehlertext: " + ex.Message);
                MessageBox.Show("Fehler beim Öffnen des COM Ports", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    
            }
        }

Hier die Oberfläche, damit man sich es besser vorstellen kann.:

Wenn ihr noch mehr Infos braucht dann bitte melden.
Gruß Thomas

09.03.2017 - 09:17 Uhr

Ich verstehe die Frage nicht ganz, das Programm hat doch Kommentare aus den man grob erkennen was gemacht wird.

Des Weiteren ist eine reine Interpretation ohne die Funktionsweise des komplette Programms zu kennen.

08.03.2017 - 13:37 Uhr

Danke.

Es kann so einfach sein aber manchmal sieht man den Wald vor lauter Bäumen nicht 😄

Gruß

08.03.2017 - 12:59 Uhr

Hallo Leute,

ich habe ein Problem in einem Projekt mit der Anzeige in einem DataGridView. Der einfachhalber habe ich das Problem Quick und Dirty nach gebaut, damit ihr es einfacher verstehen könnt.


namespace KlasseinKlasseinDatagridview
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            List<Daten> daten = new List<Daten>();
            Daten dat = new Daten();
            dat.Datenstring = "Test 1";
            dat.Teil = new Teile();
            daten.Add(dat);
            Daten dat1 = new Daten();
            dat1.Datenstring = "Test 2";
            dat1.Teil = new Teile();
            daten.Add(dat1);
            dataGridView1.DataSource = daten;
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
    }

    class Daten
    {
        private string datenstring = "data";
        private Teile teil = new Teile();

        public Daten() { }

        public string Datenstring
        {
            get { return this.datenstring; }
            set { this.datenstring = value; }
        }
        public Teile Teil
        {
            get { return this.teil; }
            set { this.teil = value; }
        }

    }

    class Teile
    {
        private int teil1 = 0;
        private int teil2 = 10;

        public Teile() { }
    }
}

Wie auf dem Bild im Anhang zu sehen, wird im GridView nicht die Inhalte der Klasste Teile angezeigt sondern die Klasse. Wie kann ich dem DataGridview sagen, dass er die Klasse in die int Werte auflösen soll?

Ich kann es leider nicht besser erklären, aber wenn ihr etwas nicht versteht dann fragt ruhig.

Gruß Thomas

24.02.2017 - 06:45 Uhr

Hallo,

du solltest die Kosten beachten.

Eine App in den Android App Store zu stellen Kostet 25$. Die App so zu verteilen ist kostenlos.
Eine App für Apple kostet 100$ schon alleine wenn man die App zum Testen auf das Gerät lädt.

Gruß

15.02.2017 - 12:44 Uhr

Hallo,

irgendwie hast du ein Denkfehler. Aber der Ansatz ist schon nicht schlecht.
Also die dritte for Schleife ist über.

Du musst bevor du ein neues Item in die "list" einfügst prüfen ob schon vorhanden

Konzept:

 
for(int i = 0; i <= strArrayA.Lenght-1;i++)
{
  if(//prüfen ob Item schon in list vorhanden(hast du mit deiner foreach Schleife gemacht))
 {
   //Wenn nicht vorhanden dann hinzufügen mit list.Add(strArrayA[i]);
  }
}

Gruß