Laden...

Forenbeiträge von Brymax Ingesamt 22 Beiträge

13.05.2020 - 16:54 Uhr

@Th69

Das mit dem FormattingEnabled ist mir auch aufgefallen hatte es vorhin vergessen zu schreiben 🙂

13.05.2020 - 16:44 Uhr

Also ich habe jetzt mit einem Testprojekt exakt den selben Aufbau der Comboxen vorgenommen mit den exakt selben Eigenschaften wie du. Ergebnis mit und ohne FormattingEnabled ist das es funktioniert. Auch wenn ich vorher alles auf "" setze.

13.05.2020 - 15:36 Uhr

Ach Mensch Harry2001. Der Link wird doch wieder entfernt 🤔 Es ist ausdrücklich untersagt Links auf externe Filehoster zu posten.

Option wäre noch das du deine Oberflaeche.cs Datei einzeln hochlädst. Ich denke der Großteil deiner Logik wird hier drin sein. Und damit diese die 256kb übersteigt muss diese schon mehrere 1000 Zeilen Code haben.

13.05.2020 - 11:53 Uhr

Hallo Harry2001,

ich habe in einem kleinen Testprojekt deinen Code ausgeführt und bei mir funktioniert alles wie gewünscht. Die Eigenschaften der ComboBoxen habe ich unverändert gelassen bis darauf das ich Items hinzugefügt habe. Eventuell hast du einen Codeschnipsel hier beim Posten entfernt der diesen Fehler verursacht.

Hier musst du wie es Abt geschrieben hat wohl mal den Debugger anwerfen 😉

Grüße

Brymax

13.05.2020 - 11:34 Uhr

wie es der Name sagt

Mit sowas musst du vorsichtig machen 😉 Für dich sagt der Name alles. Für jemand außenstehendes ist das aber eventuell nicht so. Da ich auch vor erst knapp 2 Jahren meine Umschulung zum Fachinformatiker beendet habe weiß ich aber wie schwer es ist nicht alles nur aus der eigenen Sicht zu sehen.

11.05.2020 - 11:59 Uhr

Hallo triceps,

hast du konkrete Probleme beim Lösen der Aufgabe oder möchtest du das wir dir die Arbeit abnehmen und sagen wie du es Programmieren kannst? Der Bereich Braille-Schrift ist jetzt auch für die meisten Programmierer in diesem Forum nichts womit Sie ihr täglich Geld verdienen.

Ob dein Gedankengang korrekt ist oder überdacht werden muss kannst du dir am besten selbst beantworten. Was ist die Anforderung an dich? Führt dein Gedankengang zur Erfüllung dieser Anforderung? Wenn ja dann ist dein Gedankengang korrekt.

Solltest du Probleme bei der Implementierung deines Gedankenganges haben kannst du gerne dein Problem schildern und dir wird sicherlich geholfen 🙂

Grüße

Brymax

11.05.2020 - 11:19 Uhr

Dann sollte ich mich vielleicht mit #regions auch ein bisschen zurückhalten. Da wir nur für intern entwickeln und nach außen hin kein Code gelangt bekommt man solche Empfehlungen leider nicht so schnell mit.

11.05.2020 - 09:57 Uhr

@chillic:

Genau deswegen habe ich geschrieben und explizit drauf hingewiesen das es sich um meine persönlichen Präferenzen handelt und das diese drastisch abweichen können. Wenn du es bevorzugst steht es dir frei gerne deinen Code zu Kommentieren wie es dir beliebt 🙂

Vielleicht habe ich es aber auch ein wenig zu drastisch geschrieben.

Ich habe in meinem Arbeitsumfeld festgestellt das Kommentare wie Konfetti in den Code geschrieben werden. So kommt auf 10 Zeilen Code 10 Zeilen Kommentare. Für mich macht es den Code schlecht leserlich und hat keinen Mehrwert für mich.

Bsp.:


// Prüfen ob foo "A" enthält
if(foo.Contains('A'))
{
    // Tu was
    DoWork();
}

Ich halte Kommentare nicht für Sinnlos oder Überflüssig. Nur sollte man sich Gedanken machen wann ein Kommentar einen nutzen für den nächsten Programmierer oder für einen selbst hat bevor man ihn im Code belässt.

@Abt:

Der Beitrag mit den regions ist interessant. Mir persönlich helfen Sei ungemein. Ist das jetzt eine grundsätzliche Empfehlung regions nicht oder nur sehr begrenzt zu nutzen oder eine persönliche Präferenz der Entwickler die den Beitrag geschrieben haben?

11.05.2020 - 08:36 Uhr

Hallo Rico913,

Generelle Optionen die dir Visual Studio bereitstellt:

1.) #region

Hiermit kannst du ganze Codeblöcke Gliedern.

2.) <summary>

Zum beschreiben einer Methode um gleich von außen zu sehen welche Funktion sie erfüllt ohne den Methodenkörper zu öffnen.

Persönliche Präferenzen:

Meine persönliche Präferenzen unterscheiden sich teilweise drastisch von anderen. Sie erleichtern es mir meinen Code besser zu lesen. Ob es bei dir auch hilft muss du selber rausfinden 😉

1.) Ich vermeide Kommentare so gut es geht. Code sollte selbsterklärend sein. Nichts ist für mich schlimmer als Code zu lesen der mehr Kommentare als eigentlichen Code enthält.

2.) Ich strukturiere jede Klasse gleich. Von oben nach unten

  • Eigenschaften, Felder, Enums, Structs, usw...
  • Konstruktoren
  • Methoden

3.) Ich versuche die Methoden immer in der Reihenfolge von unten nach oben zu schreiben in der Sie aufgerufen werden. Bsp. Start() -> DoWork() -> Dispose(). Start() steht über DoWork(). DoWork() steht über Dispose(). Methoden die mehrfach aufgerufen werden schreibe ich dann unter Dispose().

4.) Ich nutze immer die geschweiften Klammern auch wenn sie nicht immer notwendig sind.

Bsp.:


f (true) 
{
    DoWork()
}

statt


if (true)
    DoWork()

Zum Schluss noch Tipps:

1.) Orientiere dich an den Codekonventionen.

2.) Orientiere dich an den Namenskonventionen.

3.) Setzte dich mit dem Begriff Clean Code auseinander.

Hoffe das ein oder andere hilft dir 🙂

Grüße

Brymax

08.05.2020 - 15:21 Uhr

Hallo Alex,

wo fangen wir an 😉

  1. Er schreibt den Text in die txt_box nicht übereinander sondern er überschreibt den Text.

Hier ein paar Tipps:

Schau dir die TextBox.Multiline Eigenschaft an.
Schau dir die TextBox.AppendText() Methode an.
Schau dir den "+=" Operator an.

  1. Der Text wird nicht aktualisiert weil ein Forms-Programm immer nur mit einem Thread arbeitet.

Hier ein Tipp:

Schau dir diesen Link Label text doesn't get updated until the whole loop is completed an. Die Antwort auf die Frage ist sehr gut.

Das geht in Richtung Threading. Ich denke aber das das aktuell noch deine Kenntnisse drastisch übersteigt. Daher versuch erstmal nur zu verstehen warum es nicht geht. Eigne dir dann erstmal die Grundlagen an und irgendwann kannst du dich wieder dem Threading zuwenden. Das ist nicht böse gemeint sondern schützt dich vor Frust das Programmieren aufzugeben 😉

Grüße

Brymax

08.05.2020 - 14:26 Uhr

Hallo Jonas,

anbei ein Link zur MSDN Doku:

Control.PreviewKeyDown Event

Hier steht alles drin. Links unten auf der Seite kannst du sogar die Region auswählen. Wenn du es hier auf Deutsch stellst kommt eine einigermaßen brauchbare Übersetzung dabei rum.

Die Pfeiltasten dienen zur Navigation auf der Form. Daher werden sie von deinem Button ignoriert. Aber nett wie Microsoft ist gibt es dafür eine Lösung:

Punkt 1 hast du erledigt.


private void btn_start_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    e.IsInputKey = true;
}

Durch setzten dieser Eigenschaft wird auch das Event btn_start_KeyDown getriggert.

Und hier kannst du wieder ansetzen 😉

17.03.2020 - 12:58 Uhr

Ui da schäme ich mich ja 🙁

Hast recht war mein Fehler...

16.03.2020 - 17:01 Uhr

Ich weiß nicht ob ich jetzt damit richtig liege. Kann es sein das du nicht auf die Row sondern auf die Column (Spalte) zugreifen möchtest?

Mit diesem Code

dr = dt.Rows[i];

hast du exakt eine Row.

Mit diesem Code

dr[10].ToString() == "Offen"

versuchst du auf das 10 Row Element deiner einen Row zuzugreifen.

Das wird nicht funktionieren 😉

Was funktioniert ist

dr[0].GibMirDenWertAusSpalte[10].ToString() == "Offen"
16.03.2020 - 14:19 Uhr

Das sieht doch schonmal nicht schlecht aus.

Aber du muss das Event TimeChanged deines MediaPlayer Objekts trotzdem abbonieren. Wenn dieses Ausgelöst wird kanns du wiederum dein neues VideoTimeChanged auslösen. Und genau dieses Event sollte auch deine Form1 abonniert haben. So bekommt diese auch Kenntnis über das Ereignis. Sprich was du machst ist eine Kettenreaktion auslösen.

MediaPlayer Ereignis löst Ereignis in Form 2 aus welche von deiner Form 1 abonniert wurde.

Form 1


         Screen[] screens = Screen.AllScreens;
         newMainView = new MainView();
         newMainView.Show();
         newMainView.On_VideoTimeChanged += newMainView_On_VideoTimeChanged
         newMainView.Location = Screen.AllScreens[1].WorkingArea.Location;
         newMainView.WindowState = FormWindowState.Maximized;

Form 2


        public event EventHandler _VideoTimeChanged;

        protected virtual void On_VideoTimeChanged(EventArgs a)
        {
            _VideoTimeChanged?.Invoke(this, a);
        }

        public void Start_Content(string DateiPfad, bool isMuted = true)
        {
            string media = DateiPfad;
            _mp.Play(new Media(_libVLC, media, FromType.FromPath));

            if (isMuted != true)
            {
                _mp.ToggleMute();
            }

            _mp.TimeChanged += _mp_TimeChanged;
        }

        void _mp_TimeChanged(object sender, MediaPlayerTimeChangedEventArgs a)
        {
            On_VideoTimeChanged(EventArgs.Empty);
        }

Edit: Hilfreicher Link zu Ereignissen

14.11.2019 - 11:55 Uhr

Deine Fragestellung ist sehr schwierig zu deuten.

Wohin sollen die Werte übertragen werden?
Was ist mit Qualität E gemeint?
Was für Stück? Stück Paletten? Stück Ware?
Was ist mit a1 und a10 gemeint?

Dein hochgeladener Code ist auch nicht hilfreich. Hier werden einfach nur lokale Variablen mit Werten belegt.

Auch wenn ich der selben Meinung wie Abt bin, versuch mal genau zu erklären was du versuchst zu erreichen bzw. auf was für eine konkrete Frage wir dir Hilfestellung geben sollen.

25.09.2019 - 14:52 Uhr

Ich habe auch mal was aus dem Kopf gemacht 😉


int count = 0;

for (int i = 0; i < mass2ndm.Length / mass2ndm.Rank; i++)
{
    if (mass2ndm[0, i] <= weight)
    {
        Console.WriteLine(mass2ndm[0, i].ToString());
        count++;
    }
}

Alle Daten die du benötigst um die gewünschte Anzahl an Dimensionen zu durchlaufen gibt dir dein Array selbst. Eine Sache die noch wichtig ist. Bekommst du einen Link zu einer Dokumentation ist diese nicht der einzige Link der im WWW existiert. Mit einer Suche über Google, wären vllt. für dich verständlichere Dokus oder Tutorials gefunden worden 🙂

05.09.2019 - 11:21 Uhr
  
catch (Exception ex)  
{  
      string m = ex.Message;  
}  
  

Im Sinne der Wiederverwendbarkeit des Codes ist es keine Sinnvolle Lösung die Fehlermeldung der Exception in einer Variablen zu speichern auf die niemand Zugriff hat.

Gehen wir davon aus du nutzt eine andere Methode die die Methode mit deinem Code ausführt. Woher soll die Aufrufende Methode wissen das eine Exception aufgetreten ist. Die Fehlermeldung steht in deiner Variablen "m" und wird vergessen.

29.11.2018 - 13:39 Uhr

So läuft der erste Server der auch Produktiv im Einsatz ist und er verrichtet sein Dienst auch zuverlässig. Zugegeben die Auslastung ist bei maximal 5 angemeldeten Clients noch sehr gering.

Aktuell gibt es nur ein Subscriber aber nach deinem letzten Beitrag werde ich die Idee verwerfen und es wie bekannt umsetzen.

Ich Danke für eure Antworten mir wurde geholfen 😃

29.11.2018 - 12:32 Uhr

Laut einem StackOverflow Beitrag ist es möglich.

Beitrag

Nur gibts hier Probleme welcher Wert dann entgültig zurück gegeben wird. Der der als letztes das Event abonniert hat gewinnt. Das natürlich sehr Unschön 😉

29.11.2018 - 12:09 Uhr

Dank euch mal 😃

T-Virus so in der Art ist das ganze geplant.

Was ich mir vorgestellt habe ist das der Subscriber des Events die Antwort an den TcpServer zurückliefert ohne das ich hierfür noch zusätzlich einen Methodenaufruf starten muss.

So in der Art: byte[] response = OnRequestReceived(byte[] request)

Aber ich habe mich nochmal ein bisschen schlau gelesen und Events sind wohl dafür wie du meintest nicht gedacht. Eine Rückgabewert ist hier nicht vorgesehen.

29.11.2018 - 09:29 Uhr

Vllt. mal zur Veranschaulichung die Funktion die in dem Task der Klasse TcpServer ausgeführt wird:

private void ClientRequestConnection(Socket socket)
        {
            socket.ReceiveTimeout = 5000;

            int requestLength = 0;

            byte[] requestArray = null;
            byte[] requestLengthArray = new byte[4];

            #region Empfang der Anfrage
            try
            {
                socket.Receive(requestLengthArray);

                if (BitConverter.IsLittleEndian)
                {
                    Array.Reverse(requestLengthArray);
                }

                requestLength = BitConverter.ToInt32(requestLengthArray, 0);
                requestArray = new byte[requestLength];

                if (requestLength > 0)
                {
                    try
                    {
                        socket.Receive(requestArray);
                        OnRequestReceived(requestArray); // <-- Event auslösen
                    }
                    catch (SocketException)
                    {
                    }
                }
            }
            catch (Exception ex)
            {
            }
            #endregion

            // Warten bis XYZ- Klasse die Antwort generiert hat

            #region Senden der Antwort
            try
            {
                // Antwort senden
            }
            catch (Exception ex)
            {
            }
            #endregion
        }

Der TcpServer löst nur das Event aus das eine andere Klasse abonniert hat. Würde dann der Task nicht einfach weiterlaufen da die Funktion ja nicht weiß ob die Funktion der XYZ-Klasse abgeschlossen ist oder nicht? Vllt. Steh ich hier auch auf dem Schlauch.

Vorher habe ich statt ein Event zu senden einfach XYZ.GetRespone() aufgerufen um die erforderliche Antwort zu erhalten.

P.S. Die leeren catch-Blöcke sind nur Platzhalter und werden später natürlich noch gefüllt 😉

29.11.2018 - 08:16 Uhr

Hallo zusammen,

ich Programmiere gerade meinen 2ten TCP-Server nach dem Request-Response Prinzip. Mein erster TCP-Server wandelt den Stream auch gleich in einen String um und sendet diesen an eine ander Klasse die wiederum anhand des Strings die angeforderten Daten dem Server bereitstellt der wiederum die Antwort an den Client sendet.

Sprich TCP-Server -> Stream in String wandeln -> an Klasse Foo senden --> Foo String auswerten -> Antwort generieren -> an TCP Server senden -> String in Stream wandeln -> an Client senden.

Jetzt möchte ich das ganze "besser" machen.

Der TCP-Server soll die Umwandlung in einen String nicht mehr vornehmen sonder nur ein Event triggern den beliebige Klasse XYZ abonnieren kann. Als Argument erhält dann Klasse XYZ den Stream und kann damit arbeiten. Bis die Klasse XYZ fertig ist mit seiner Antwort soll der TCP-Server warten und den Task erst weiter ausführen wenn Klasse XYZ seine Arbeit verichtet hat.

Sprich TCP-Server -> Event auslösen und warten -> Klasse XYZ Stream umwandeln -> Antwort generieren -> an TCP-Server senden -> TCP-Server antwort an Client senden.

Wie kann ich hier vorgehen?

Dank euch schonmal für eure Antworten.

Grüße

Brymax