Laden...

Forenbeiträge von chilic Ingesamt 2.122 Beiträge

20.03.2020 - 06:32 Uhr

Weißt du etwas mehr darüber?

Ich will jetzt nicht die Aktion an sich schlechtreden. Aber wenn man sich nach dem Lesen der verlinkten Seite fragt
* was hat das mit der Coronakrise zu tun?
* was passiert da "vs Virus"?
* was für eine Art von Problemen sollen da eingereicht/gelöst werden?
* um was geht es ganz grundsätzlich?
weil das alles nirgends ersichtlich wird, dann fehlt in diesem Aufruf noch das Wesentliche 😉

Ich hab eigentlich nur eins gelernt, nämlich dass man Text nicht nur durch Gendersternchen sondern auch durch Doppelpunkte verstümmeln kann 😉

14.03.2020 - 07:58 Uhr

Ich vermute stark dass die Stückzahlen von Artikel zu Artikel variieren. Beim einen gibt es zwei Rabattstufen, beim anderen vier. Beim einen gibts ab 5 Stück 10% Rabatt, beim nächsten erst ab 20 Stück 5% dafür aber ab 50 Stück 15% und ab 100 20%.
Das heißt, diese Einstufungen werden Teil des jeweiligen Artikels sein und individuell gestaltet sein. Oder zumindest es gibt eine Vorgabe die verwendet wird wenn ein Artikel keine eigenen Vorgaben macht.

Da würde ich mit einer Liste arbeiten. Sie enthält Stückzahl und Rabatt, davon so viele Einträge wie es aktuell eben gibt.
Dann schaust du in welchem Bereich die aktuelle Bestellung liegt und nimmst den passenden Rabatt.

13.02.2020 - 06:32 Uhr

Das erfordert dass am anderen Ende auch gerade jemand sitzt und dir antwortet.
Dass es sowas für umsonst gibt, ist eher unwahrscheinlich 😃

20.12.2019 - 06:18 Uhr

Ich finds ja schon gut wenn man auch mal eine eigentlich unnötige Variable einführt, um damit eine Formel leserlicher zu machen. Etwa wenn Zwischenschritte bei einer Berechnung eingeführt werden, statt alles in eine einzige Formel zu packen.
Aber 14 Variablen für 3 Zeilen Code finde ich dann doch recht krass. Das kann jetzt auch wieder keiner mehr durchblicken.

Was ich ändern würde wäre
Convert.ToInt32 rauswerfen für Left und Top. Die sind doch bereits int.
Double nach int konvertieren: (int)weiteButtonNeu statt Convert.ToInt32(weiteButtonNeu) - ist kürzer und einfacher zu lesen.
button.Left und button.Top nicht extra in eigene Variablen packen - wieder kürzer und spart einen Gedankenschritt. Genauso die neuen Maße des Forms.
"faktor" statt "vergrößern" und "breite" statt "weite" verwenden, das würde mir schneller sagen was gemeint ist.

Ein schneller Versuch, weil ich schon wach bin 😃


            int weiteFormAlt = this.ClientSize.Width;
            int höheFormAlt = this.ClientSize.Height;

            this.WindowState = FormWindowState.Maximized;

            double vergrößernx = this.ClientSize.Width / weiteFormAlt;
            double vergrößerny = this.ClientSize.Height / höheFormAlt;

            button.Size = new Size(
                    (int)(vergrößernx * button.ClientSize.Width),
                    (int)(vergrößerny * button.ClientSize.Height));
            button.Location = new Point(
                    (int)(vergrößernx * button.Left + button.ClientSize.Width * vergrößernx),
                    (int)(vergrößerny * button.Top + button.ClientSize.Height * vergrößerny));

Damit lässt sich dann einfacher debuggen und schauen was für welchen Button passiert.
Nach inhaltlichen Fehler hab ich noch nicht gesucht. Vielleicht steigt ja die Methode mit einer Exception aus, die du evtl. abfängst und daher nichts von ihr merkst? Ich glaube ich hatte mal den Fall dass in irgendeinem Zustand 0 als Breite oder Höhe zurückkam. Dann ist klar dass du beim Dividieren ein Problem kriegst.

Ich wäre mir übrigens gar nicht sicher ob der Aufruf WindowState=... sofort das Fenster ändert, oder ob das erst nach deiner Methode vollständig im Hintergrund passiert. Dann hättest du direkt nach dieser Zeile noch keine endgültig richtigen Werte in this.ClientSize.

08.12.2019 - 17:20 Uhr

Dein Problem nennt sich "Travelling Salesman", damit findest du einige Lösungsansätze und auch die Erklärung warum dieses Problem nicht sehr effizient zur optimalsten Lösung kommt.

Wenn du immer genau x Vereine in einer Gruppe haben willst, wird es darauf hinauslaufen dass du zusammenliegende Vereine auseinander reißen musst.
Auch bei deinem Vorschlag (20 Vereine, 10 beste suchen, Rest bildet wieder eine Gruppe) hast du zwar eine optimale Gruppe, aber die andere Gruppe enthält den Rest mit möglicherweise katastrophaler Aufteilung.

Stell dir 20 Vereine vor. 18 davon sehr eng beisammen, der 19. ist 50 km nördlich davon und der 20. 50 km südlich. Wie willst du das machen?

Letztendlich kommt die Lösung auf deine Vorgaben an. Wirklich alle Voraussetzungen komplett passend wird ein Wunschtraum bleiben. Willst du lieber manche Gruppen sehr optimal haben und die anderen dürfen notfalls auch schlecht sein? Oder alle etwa gleich? Oder das Ergebnis begründbar haben?
In allen Fällen werden dir die Fahrer vorwerfen du hättest es falsch gemacht 😃

Die Aufteilung in kleinere Grüppchen zunächst ist schon sinnvoll. Wenn du 10-er Gruppen machst, brauchst du nur die sagen wir mal 20 naheliegendsten Vereine ansehen. Oder mehr, oder weniger... je nachdem wie die verteilt sind.

Ich stelle mir gerade eine Landkarte vor auf der die ganzen Orte eingezeichnet sind. Da könnte es sich lohnen die Programmierzeit lieber für eine Überlegung zu investieren, wie man das selbst machen würde. Klingt zwar sehr untechnisch, könnte aber vielleicht schneller sein.
Zumindest versuchen würde ich es, dadurch gewinnst du dann einige Erkenntnisse wie dein Programm vorgehen könnte.

Edit: Brute force mit 160 Vereinen... das könnte dann dauern 😉

04.12.2019 - 06:03 Uhr

Was kommt bei Timespan = 30 Stunden heraus?
Habe es nicht nachgeprüft, aber ich kann mir gut vorstellen dass der TimeSpan alles größer als 23,x Stunden auf Tage umbricht.
Am besten rechnest du dir die Zahlenwerte selber um.

02.12.2019 - 06:28 Uhr

Eigentlich wollte ich noch viel mehr reintun, aber dann habe ich die Lust dran verloren, eben wegen dem Code.

Da wäre interessant was für ein Code das ist, was du an ihm warum ändern willst.

Wenn du 10 Datenfelder zum Thema Geschwindigkeit und Drehmoment usw hast, und 8 Datenfelder zu Temperatur, dann noch einiges zur Position anderer Fahrzeuge etc, dann könntest du diese Felder in separate einzelne Klassen packen. Das kann hilfreich sein, wenn du dadurch mehr Übersicht bekommst. Code der die Daten umrechnet wie deine genannten Berechnungen und Spielereien kommt dann in die Klasse zu den Daten die er bearbeitet.

Kann aber auch völlig nutzlos sein.
Du schreibst es geht nur um die Anzeige verschiedener Datenfelder.
Wenn du dir jetzt denkst, ich übernehme ein Datenfeld einmal vom Wrapper und dann lese ich es an einer anderen Stelle einmal wieder aus, mehr passiert da nicht, also wozu soll ich das in verschiedene Codeteile aufsplitten... dann kann das durchaus auch ein Argument sein.
Schön brav - und sinnlos, grundlos - alles umzusetzen was man hört, ist nicht ratsam. Dann hast du am Ende zig Codedateien und Klassen mit nur wenig Inhalt, nutzt Interfaces "wegen der Erweiterbarkeit" weil du das mal wo gelesen hast - ohne Plan was bei dir überhaupt erweiterbar sein könnte usw.

Wenn ich dann seitenweise lese, was nicht einmal annähend in die Richtung geht, wo sich mein Problem befindet

Wo befindet es sich denn?
Ich habe das Gefühl du willst gerade irgendetwas anders machen, hast aber keine Idee wie anders und nicht mal warum es überhaupt anders gemacht werden soll. Und nachdem von uns anderen niemand weiß was du bisher machst, stoßen wir mit Tips natürlich spätestens jetzt an eine Grenze.
Kannst du ein Beispiel zeigen wie es jetzt ist, sowie was dir daran nicht gefällt?

01.12.2019 - 12:09 Uhr

Du suchst Beispiele für OOP.

Was willst du mit Patterns und sonstigen Architektur Tipps, wenn du nicht weißt warum und wie du das ganze Konzept überhaupt machen sollst.

Als nächstes brauchst du ein Projekt in dem sich OOP wirklich lohnt. Wenn du mit aller Kraft versuchst in einem Miniprogramm alle OOP Dinge umzusetzen die du kennst, wird das auf dich völlg unsinnig wirken.
Das ist das Problem vieler Beispiele. Da wird eine Basisklasse erstellt und erweitert, ohne dass irgendein tieferer Sinn dahinter steckt. Dass da niemand ruft "aha dazu brauche ich das also" ist kein Wunder. Viel eher ist zu erwarten "wo ist jetzt der Mehrwert in diesem Beispiel?".

Am besten wäre es zu wissen was dein aktuelles Projekt macht. Da wäre ein Aha-Effekt vielleicht am schnellsten zu erreichen.

12.11.2019 - 17:20 Uhr

Bevor du das wegwirfst, vielleicht gibt es eine Möglichkeit die Accessdatei in den SqlServer zu importieren oder irgendwie umzuwandeln.
Dann kannst du vernünftig damit arbeiten und dir auch die Spaltennamen auslesen lassen.

Wenn du das selbst schon angefangen hast, vielleicht bist du ja schon fast am Ziel? In den Table Objekten stehen die Spaltennamen drin und die Typen sollten auch irgendwo vermerkt sein.
Brauchst du wirklich für jedes Element eine eigene Klasse oder kannst du direkt mit den Daten aus den Tabellenobjekten arbeiten?

190 Spalten in einer Tabelle halte ic für grenzwertig, da läuft vielleicht was übelst schief. Aber es scheint als hättest du keine andere Wahl als das zu nehmen wie es ist.

08.11.2019 - 06:23 Uhr
  • Entweder weise ich jedem ListenElement ein Event in der Liste hinzu, oder
  • ich leite alle Events vom ListenElement an die Liste weiter (wie in dem Code-Beispiel)

Ist da ein Unterschied? Du machst doch beides.

13.10.2019 - 08:53 Uhr

Eine gesicherte Variante von FTP wäre auch eine Möglichkeit, sofern die Daten nicht unbedingt direkt im Prozess ankommen sollen sondern nur irgendwo abgelegt werden sollen.
Dafür gibt es schon etliches.

06.10.2019 - 15:09 Uhr

Ich will halt keine 2. Windows.Form zur reinen abfrage

Aus welchem Grund? Das tut genau das was du brauchst. Eine MessageBox ist auch ein separates Form.

06.10.2019 - 11:38 Uhr

Du schreibst es soll ein Fenster erscheinen, aber ohne zweites Fenster 😃

Das ließe sich lösen indem du ein Panel einblendest, in dem deine Controls sitzen. Das sollte dann am besten verschiebbar sein. Also eigentlich schon eine Aufgabe für ein zweites nicht modal angezeigtes Fenster. Was spricht gegen es?

28.09.2019 - 17:19 Uhr

Zu deinem Code.

Die Klasse die die Grafik erzeugt sollte nur den darzustellenden Wert bekommen, aber nicht wissen müssen, woher sie ihn bekommt.
Du verwendest zweimal Variablen mit dem Namen "t". Die eine wird nie verwendet und auch bei der anderen ist t kein Name, dem man auch nur im geringsten ansieht was er macht.

27.09.2019 - 17:11 Uhr

Zum rein visuellen ansehen könnte man die Datei mit einem sehr einfachen Programm in einzelne Teile zerlegen, die ein Editor dann als Text öffnen kann.

Sich 8 GB ansehen dürfte eine Weile dauern.
Wenn du aber weißt dass die Datei ein paar Millionen gleicher Datensätze hat, reicht es sich den ersten Teil anzusehen um die Struktur zu verstehen.
Daraus ließe sich dann - je nach dem wie einfach sie aufgebaut ist - ein Schema erstellen (lassen) und dieses auf die komplette Datei anwenden um zu sehen ob sie komplett auf dieses Schema passt.

Wenn sie wenige und dafür sehr große Elemente enthält wie etwa Binärdaten, könnte ein Programm mit einem seriellen XML Reader diese Elemente leeren und die Datei dadurch um einiges verkleinern. Dann kann man sich den Rest ansehen.

25.09.2019 - 13:11 Uhr

Dein foreach scheint das komplette Array auszulesen. Du möchtest aber nur [0, i] auslesen.
Das ist verständlicher als eine Schleife die zunächst aussieht als würde sie das ganze Array durchlaufen, es dann aber doch nicht tut.

20.09.2019 - 14:01 Uhr

oder String.Format um diesen String dann im TryParse weiterzuverarbeiten.

Du willst aber bitte nicht ernsthaft einen double den du bereits hast, wieder in einen String mit passendem Trennzeichen umwandeln, nur damit er dann durch dein Parse geht.

14.09.2019 - 19:13 Uhr

Dass man einen String nicht in eine Zahl umwandelt um ihn zu vergleichen, hast du also selbst gefunden 😃

Man kann in C# mit Strings auch switch-case veranstalten. Das ist ein kleines bisschen weniger zu schreiben.

Du könntest das ReadKey nach den if Tests aufrufen, das passiert nämlich immer.

Ich schreibe zwar auch nicht für jedes if die { } drum herum, aber in deinem Fall solltetst du das dringend tun. Wozu deine ifs gehören ist bei der Verschachtelung nämlich nicht so leicht ersichtlich und wenn du da irgendwas nachträglich einfügst kann es sein dass du ein Laufzeitverhalten kriegst das du so gar nicht wolltest.

Dann schau dir mal an was du da prüfst.
Das erste if wird betreten wenn choice NICHT N ist. Das zweite wird betreten wenn choice NICHT A ist.
Die inneren if prüfen dann ob choice N oder A ist. Wenn das der Fall wäre, wäre dein Programm gar nicht an diese Stelle gekommen.
Das bedeutet du brauchst die ersten zwei if gar nicht.

Und im ersten Beispiel prüfst du auf == 'E', im zweiten auf != 'E'.

Ergänzung: du kannst auch einfach schreiben


            string message = "Treffen Sie eine Wahl:\n\n" +
                "(N) - Neues Spiel\n" +
                "(A) - Altes Spiel fortsetzen\n" +
                "(E) - Beenden\n";

17.08.2019 - 09:20 Uhr

Zum Verständnis, was da passiert.

  1. es wird ein neuer Thread gestartet.
  2. Dieser Thread lagert dann alles weitere sofort wieder in einen anderen Thread um.
    Also kannst du diesen Thread auch auslassen.

Die Lösung für deinen Fehler ist das noch nicht (siehe Beitrag von Th69), war nur gedacht um zu erklären was du da noch für einen Denkfehler drin hast.

16.08.2019 - 15:45 Uhr

Lass dir das Feld sortiert ausgeben, vielleicht erkennst du dann was da wie drin stand und warum es im Juli geklappt hat.

08.08.2019 - 12:36 Uhr

Und auch die Praxistauglichkeit im Auge behalten.
Wer meldet sich wirklich am PC an und ab? Was sagt es aus wenn jemand nicht angemeldet ist, kann der trotzdem im Haus sein, nur eben nicht am PC?

28.07.2019 - 16:23 Uhr

Dass man beim Start von D&D erst auf eine Bewegung wartet um den normalen Klick zu unterscheiden, ist normale Vorgehensweise.

Sobald DoDragDrop aufgerufen wird, passiert meines Wissens alles innerhalb dieser Routine, bis die Maus losgelassen wird. Ich vermute du hast da noch ein Problem mit den vielen Hilfsvariablen. So kompliziert muss das eventuell gar nicht sein.

Ich würde zuerst die Methoden so benennen dass man sieht was sie tun. Evt_DragStarten ist nicht "drag starten" sondern "Mouse move". Selbes mit dem Event QueryContinueDrag, da steckt eine Methode namens Evt_DragAbbrechen drin. Wenn der Name einem etwas anderes vorgaukelt als dahinter steckt, kannst du nur verlieren.

So wie ich Evt_DragStarten aufgebaut habe, wird dieses genau 2 mal ausgeführt

Wie stellst du das fest? Messageboxen halte ich dafür nicht geeignet, die setzen sich in den Vordergrund und bringen dir die ganzen Zustände durcheinander.

Es könnten durch aus Fehler enthalten sein, da ich vieles direkt im Browserfenster geschrieben habe...

Das heißt der Code wurde so gar nicht ausgeführt? Es wäre schon hilfreich über Auswirkungen zu reden die zum gezeigten Code passen.

Such dir wirklich ein gescheites Tutorial dazu. Ich habs gerade selbst versucht, hab spontan nichts gefunden das sich nicht mit zig Nebenschauplätzen befasst sondern nur auf D&D eingeht. Aber es muss irgendwas dazu geben.
Schau dir auch die Doku zu allen beteiligten Methoden an, die geben sicher auch Hinweise auf die Wechselwirkungen.

20.07.2019 - 12:59 Uhr

Ich habe zwar schon etwas mit D&D gemacht, aber es ist schon etwas her und das Thema fand ich damals nicht selbsterklärend.
Details weiß ich spontan leider nicht mehr. Könnte mir aber vorstellen dass es normal ist, in jedem Fall ein DragDrop Event zu erhalten. Schließlich lässt der Nutzer die Maus los, egal ob dann gedroppt wird oder ob das inzwischen abgebrochen wurde.
Steht in den DragEventArgs nichts hilfreiches darüber? Dann müsstest du im Abbruchfall in diesem Event einfach nichts weiter machen.

Würde dir raten, ein Beispiel zu suchen und das unter die Lupe zu nehmen.

15.07.2019 - 06:08 Uhr

Ich würde das über eine Schleife machen.

Vorher würde ich darüber nachdenken ob du das wirklich brauchst. So ein Ansatz deutet auf einen Fehler bei den Überlegungen hin. Eine zweite Tabelle die auf die erste verweist und die die 365 Spalten jeweils als eigene Zeile speichert, könnte deine Anforderung sauberer lösen.

11.07.2019 - 06:11 Uhr

Ich möchte auf diese Aussage eingehen, denn ich habe das Gefühl die ist das Verständnisproblem in diesem Beitrag.

Und wenn ich dann einen längeren Text als "Hallo Welt", sagen wir einen Text mit 200 Zeichen verschicken will, dann kann ich mein Verfahren wie oben beschrieben anwenden und könnte dann sowas wie "jfI0" rausbekommen mit einem Zahlensystem mit einer sehr hohen Basis und dann verschicke ich nur diese 4 Zeichen.

Sagen wir du hast eine 4 stellige Zahl im Hexsystem und betrachtest die jetzt als 2 Bytes im "Byte System".
In deiner Aussage verwendest du den Begriff "Zeichen" verschieden. In meinem Beispiel wäre das einmal "4 Zeichen Hex" und "2 Zeichen als Byte". Du siehst hier den Vorteil dass du aus vier Zeichen zwei machen kannst. Es handelt sich aber nicht um den selben Zeichenvorrat!
Du musst nämlich auch berücksichtigen dass ein Byte doppelt so breit ist wie eine Hexziffer.
Es gibt 16 Hexziffern, aber 256 Byteziffern. 4 Hexziffern brauchen 4 x 4 Bit, die 2 Bytes brauchen 2 x 8 Bit. Also nichts gespart.
Die Sichtweise mit dem höheren Zahlensystem ist also rein gedanklich. Du hast 16 Bits und betrachtest die einmal als vier Hexziffern und das andere mal als zwei Bytes. Aber es bleiben trotzdem 16 Bit.

In deinem Beispiel schreibst du umgerechnet, du stellst einen Text mit 50 Zeichen durch ein einziges Zeichen dar. Auch hier ist Zeichen nicht gleich Zeichen.
Sagen der Text besteht aus 50 Bytes, also jede Stelle im Text kann 256 Möglichkeiten annehmen. Das ist der Zeichenvorrat "Typ A".
50 solche Bytes hintereinander ergeben 25650 Möglichkeiten für den Text. (Zur Vorstellung, das ist eine Zahl mit 121 Stellen)
Dein Zeichenvorrat "Typ B", bei dem du für den Text nur ein einziges Zeichen brauchst, müsste also 256
50 verschiedene "Typ B Ziffern" enthalten.
Das heißt du hast dann gedanklich zwar nur eine einzige "Typ B Ziffer", aber um diese eine Ziffer eindeutig darzustellen wäre sie in Bits betrachtet wiederum so breit dass du den selben Platz brauchst.

28.05.2019 - 06:02 Uhr

Mal als Gedankenstütze. Deine Idee (Schritte 1-5) würde ich etwas abändern.

Du brauchst einen eindeutigen Schlüssel, an dem du erkennst welche Bestellung aus Liste A der Bestellung in Liste B entspricht. Das könnte die Bestellnummer sein.

Eine der Listen packst du in ein Dictionary in dem du die Einträge anhand des Schlüssels wiederfindest. Dann durchläufst du alle Einträge der anderen Liste, suchst dir das passende Gegenstück aus dem Dictionary heraus und führst die Daten zusammen.
Die bearbeiteten Einträge werden aus dem Dictionary gelöscht, das Ergebnis kommt in eine dritte Liste. Was danach im Dictionary noch übrig ist musst du entsprechend behandeln.

Zum Zusammefnführen bau dir eine Methode die zwei Bestellungen übergeben bekommt und davon die Properties abgleicht.
Baue dir Hilfsmethoden, die beispielsweise zwei Strings übergeben bekommen und den nicht-leeren wieder zurückgeben. Dann sind das bei 14 Properties im besten Fall gerade mal 14 Aufrufzeilen.

Wenn du während der Programmierung erkennst dass ein Schritt sich mit vorgegebenen Funktionen optimieren lässt, bau es natürlich entsprechend um. Von Beginn an eine Automatik darauf loslassen dürfte schwierig werden, denn du weißt nur selbst was in welchem Fall ergänzt werden soll.

20.05.2019 - 12:45 Uhr

Hier mal zum kopieren und einfügen: . . . . .
Dann versteht man die Frage zwar immer noch nicht ausreichend, aber sie sieht wenigstens nach etwas mehr Mühe aus 😃
Ich würde zeigen was du gemacht hast, sonst kann dazu doch niemand was hilfreiches sagen.

18.05.2019 - 07:17 Uhr

Ich würde das anders machen. Hier ein Vorschlag.

Ich würde die Zeit in Minuten speichern. Das was drauf addiert werden soll ist dann 15 oder 30, daran sieht man schon wieder besser was das wird, anstatt wenn du einen Teiler angibst.
Wenn du das in Stunden umrechnen willst teilst du den Wert durch 60. Entweder als Ganzzahldivision wenn du nur die vollen Stunden brauchst, oder als double Division wenns eine Kommazahl werden soll.
Ein Schleifenzähler heißt normalerweise i. Darunter versteht man automatisch dass das in einer for-Schleife steckt.

Dann sieht deine Formel so aus


int startZeit = 60 * 8 + 30; // für 8:30 Uhr

... dann in der Schleife
zeit = startZeit + i * schrittweite;

und dann entweder
int stunden = zeit / 60;
int minuten = zeit % 60;
für zeit = 555 ergibt das stunden = 9 und minuten = 15.

oder
double stunden = zeit / 60.0;
für zeit = 555 ergibt das stunden = 9,25.

Oder du nimmst eben direkt DateTime als Datentyp, sofern du das dann im Zeitformat ausgeben oder sonst wie berechnen oder irgendwohin übergeben willst.

17.05.2019 - 13:59 Uhr

Neben dem Typ von hypersurf der dein Problem evtl. schon löst, noch grundsätzliches zu deiner Beschreibung.

Was für Datentypen sind denn deine Variablen? Wie steht die Zeit da drin?
Wenn du von Anfang an den Variablen den passenden Typ gibst brauchst du kein Convert. Die ganzen Convert... sind grausam zu lesen, da geht die ganze Formel unter.
Welcher Typ hängt von deinen Anforderungen ab. Wenn du nur in Minuten auflöst und alle Werte in Minuten sind, reicht ein int.

Wenn du ein Beispiel gibst was du damit erreichen willst, wirds vielleicht klarer.

Ich würde die Variablen umbenennen. Statt "val" oder "tme" lieber in etwas woran man sieht dass das jetzt Stunden oder Minuten sind, oder was es eben gerade darstellt.

19.04.2019 - 18:32 Uhr

Hallo Abt,
ich möchte da nichts großes in Bewegung bringen. Es passiert ja wirklich nicht oft und man kann mit hoher Sicherheit vermuten dass der Beitrag wirklich einfach gelöscht wurde.
Wenn sich herausfinden lässt dass ein aufgerufener Beitrag gelöscht oder verschoben wurde - und dass nicht die Anmeldung schuld ist - wäre das schon Aussage genug.
Wenn nicht - auch nicht dramatisch.

Grüße!

19.04.2019 - 11:36 Uhr

Hallo zusammen, heute möchte ich etwas fragen das mir immer wieder mal auffällt.
Ab und zu passiert es dass ich einen Beitrag verfolgen möchte, oder auch auf eine Antwort Benachrichtigung klicke und dann nicht der Beitrag erscheint, sondern "Seite wurde entfernt...".
Als Beispiel möchte ich diesen Link nennen. https://www.mycsharp.de/wbb2/thread.php?postid=3817787

Es kommt nur das entfernen in Frage, denn ich bin angemeldet und habe mich an der Diskussion beteiligt. Gibt es nähere Infos warum ein Thread entfernt wurde?

14.04.2019 - 18:13 Uhr

Inzwischen gibt es neues, nämlich WPF. (F - nicht S)
Unbrauchbar ist Forms deswegen nicht. Man kann immer noch all das machen was man vorher auch konnte.

Es dürfte sehr viele in Forms geschriebene Anwendungen geben die auch weiterhin gepflegt werden. Warum? Einfach weil ständig was neues zu lernen zwar in und hip und soweiter ist, aber wer mit Programmierung wirklich Geld verdienen muss, kann sein Projekt nicht oft komplett umstellen ohne dem Anwender neues zu bieten.

Wenn man sowieso gerade einsteigt schaden Kenntnisse in WPF sicher nicht.

29.03.2019 - 14:04 Uhr

Ah jetzt 😃))

Tip: am Montag kommen solche Postings sicher besser an...

19.03.2019 - 08:51 Uhr

Auch wenn bestimmt jemand zu etwas fertigem rät, am flexibelsten bist du wenn du dir diese Ansicht selbst zeichnest.
Das heißt ein einziges Bild, in das alles so gezeichnet wird wie es gerade aussehen soll. Nicht zig oder gar hunderte verschiedene GUI Elemente aufs Formular packen.

14.03.2019 - 19:48 Uhr

Indem du dir alle x Schritte eine Richtung aussuchst, mit vorgegebenen x und y Differenzen, und in den nächsten Schritten die Bewegung um diese Differenzen ausführst. Dazu musst du dir die Differenzen pro Objekt merken.
Nach wieder x Schritten änderst du die Richtung und behältst sie wieder eine gewisse Zeit bei.
Die Anzahl der Schritte kannst du natürlich auch wieder zufällig wählen.

14.03.2019 - 17:11 Uhr

Momentan hast du programmiert dass deine Objekte bei jedem Schritt zufällig um 2 Pixel hin oder her zittern. Der Durchschnitt davon ist Null, da bewegt sich also kaum was.
Eine gleichmäßigere Bewegung erreichst du wenn du dich einmalig für eine Richtung entscheidest und dann ein Stück weit in diese Richtung weiter gehst.

12.03.2019 - 17:22 Uhr

Du kannst zumindest nativ eine Datei schon an einer bestimmten Stelle lesen. Was .NET dafür bereitstellt weiß ich nicht auswendig, habs noch nie gebraucht.
Das Problem dabei ist: wo ist die gewünschte Stelle?
Das bringt dir nur dann etwas wenn du weißt wie lang die Zeilen sind die du überspringen willst. Sprich wenn die Zeilen alle gleich lang sind kannst du sagen, jetzt ab der aktuellen Position x Bytes weiterspringen.
Das springen ist auch nur dann sinnvoll wenn du wirklich sehr viel überspringst.

Wenn du das nicht weißt musst du eben die Zeilen einlesen und selber überspringen.

Unter uns, wenn es wirklich nur das überspringen von Zeilen ist wirst dir keine extra Library antun wollen nur um das bisschen Code dazu nicht selbst schreiben zu müssen? Den Rest der Bearbeitung musst du ja sowieso selbst übernehmen.

File.ReadAllLines tut schon das gröbste dabei. Dann hast du eine Ansammlung von Zeilen die du mit einem Index durchlaufen kannst. Den zählst du um 10 weiter wenn du die nächsten 10 Zeilen nicht brauchst. Das war jetzt praktisch schon dein Snippet.

26.02.2019 - 20:05 Uhr

Videos halte ich für katastrophal zum lernen. Ist sicher sehr subjektiv, aber bei einem Video stört mich auf die vorgegebene Geschwindigkeit angewiesen zu sein. Es gibt kein Inhaltsverzeichnis oder Links, man kann das Video spulen aber da findet man ja auch nichts mehr wieder. Dann das ewige Gelaber in vielen Videos ... bis die mal endlich zum Punkt kommen.
Ich hab da lieber einen Text vor mir, den kann ich so lesen wie ich will.

Das wichtigste aber ist nach meiner Meinung: du brauchst ein Ziel.
Nimm dir ein Projekt vor das du realisieren willst. Dann hast du etwas das dir Anforderungen stellt, die kannst du dann erfüllen und dir dazu anschauen wie das geht.

Zuerst suchst du dir einen Einstieg was es alles gibt in dieser Sprache. Hängenbleiben wird da noch nicht alles, aber du hast es mal gehört.
Dann machst du dich ans ausprobieren und schaust nochmal nach wie denn dies und das gleich wieder ging.

24.02.2019 - 09:36 Uhr

Fenster verwalten ist kompliziert. Reicht es nicht auch, ein einziges bildschirmfüllendes Fenster zu haben und auf dem viele verschiedene Grafikobjekte anzuordnen?

20.02.2019 - 06:05 Uhr

Eine Liste kann man sortieren. Dann steht der erste/kleinste Eintrag an erster Stelle.
Auslesen kann man diesen Eintrag natürlich auch.

Wenn du Code hast der diese Buchstaben rausfindet, dann siehst du dem doch an wie er es macht. Ich würde in solchen Fällen immer empfehlen, den Code nicht einfach nur reinzukopieren sondern zu verstehen. Programmieren ist nicht nur zusammenklicken 😉

18.02.2019 - 16:23 Uhr

Für das sequentielle gibt es Transaktionen. Die sollten immer genutzt werden wenn solche Datenänderungen passieren.
Das InArbeit könnte aus anderen Feldern geschlossen werden. Zum Beispiel zugeteilt aber noch nicht abgeschlossen bedeutet: ist in Arbeit.

18.02.2019 - 06:04 Uhr

Gib den Daten ein Sperrflag. Der nächste Mitarbeiter der Daten überprüfen will bekommt dann nur die nächsten 100 anstehenden Datensätze. (oder beliebige Zahl) Diese werden gesperrt damit sie kein anderer auch noch zugeteilt bekommt.
Die Änderungen die er macht werden dann wieder gespeichert und das Sperrflag entfernt, dafür müssen die Datensätze als bearbeitet gekennzeichnet werden.

Damit muss man nichts mehr im Voraus aufteilen und noch viel wichtiger, die Mitarbeiter brauchen sich nicht mehr absprechen.

Wenn die Daten nach einer bestimmten Zeit automatisch wieder entsperrt werden sofern das Programm des Mitarbeiters die Sperre nicht neu setzt, werden die Daten wieder freigegeben und ein anderer kann sie bearbeiten. Damit kann jemand sein Programm beenden und die ihm zugeteilten Datensätze bleiben nicht auf ewig gesperrt.

Muss man sicher noch ein bisschen ausarbeiten, aber die starre Einteilung die bisher stattfindet lässt sich bestimmt auch in deinem Fall umgehen.

17.02.2019 - 09:30 Uhr

Reicht dazu nicht einfach ein Array?

12.02.2019 - 18:40 Uhr

Eine h Datei ist etwas anderes als verschiedene cs Dateien. In den h Dateien werden Funktionen und sonstiges bekannt gemacht, für alle die es mal irgendwo benötigen.
In C# ist das überflüssig, denn was schon ausprogrammiert ist kann auch ohne eigene Definitionsdatei bekannt sein.
Ich vermute die Ursachen für Headerfiles liegen im Compiler. Der wollte für C lieber vorher schon wissen was es alles gibt.

10.02.2019 - 11:46 Uhr

Eine Zahl in einen Text umwandeln und diesen dann aus der Anzeige wieder rauszulesen, zurückzuwandeln und vergleichen ist Unsinn. Nutze dazu direkt die Variable aus der der Text stammt.

Deine TextChanged Methode tut überhaupt nichts. Sie legt einen bool an, setzt den auf true und danach beendet sich die Methode und wirft den bool wieder weg, ohne dass er eine Auswirkung hat.

Und jetzt soll, wenn sich die variable lebendeZellen nicht mehr ändert, die Funktion tick beendet werden.

Zum Verständnis: Tick wird immer wieder aufgerufen und beendet sich nach jedem Durchlauf. Was du in Wirklichkeit willst ist, dass Tick nicht mehr ständig aufgerufen wird. Th69 hat das ja schon angedeutet.

03.02.2019 - 10:21 Uhr

Prinzipiell hast du in deiner GUI ein Element auf das du klicken kannst. Dieses Element kennt eine ID anhand der aus der Datenbank der anzuzeigende Text kommt. Der wird dann dort angezeigt wo du ihn haben willst.
Was genau meinst du mit der Verknüpfung?

02.02.2019 - 14:55 Uhr

Und bitte angewöhnen das "== true" wegzulassen, denn es genügt zu schreiben "wenn die Box gecheckt ist", statt "wenn es wahr ist dass die Box gecheckt ist" 😉

30.01.2019 - 06:03 Uhr

Da scheint tatsächlich noch verschiedenes unklar zu sein. Trotzdem möchte ich auf die eigentliche Frage eingehen. Dass der String natürlich auch außerhalb der Schleife erzeugt werden kann weißt du sicher.

Man könnte natürlich sofort einen normalen String bilden a-z und in der Schleife direkt per substr zugreifen.
Aber dann hätten das char Array und der String zwar denselben Inhalt, aber sie wären zwei unterschiedliche Objekte.

Der String ist ein anderes Objekt als das Array. Das ist doch unabhängig davon wo du ihn generierst.

Du könntest auch gleich einen String erzeugen der aus den gewünschten Zeichen besteht, ohne den Umweg über das Array. Da du das so zeigst, scheint etwas mehr dahinter zu stecken als wir wissen. Wenn du dein tatsächliches Problem lösen willst solltest du mehr darüber erzählen.

27.01.2019 - 12:00 Uhr

Rucksack hat nochmal einen weiteren Wertebereich den man abgleichen muss.

Wie viele Zahlen sind es? Der einfachste Ansatz für das jetzige Problem ist, jede Zahl entweder zu wählen oder nicht zu wählen und dann zu prüfen ob die Summe erreicht ist.
Wenn es um viele Zahlen geht kann das länger dauern, dann müsste etwas mehr Strategie dazu kommen.

25.01.2019 - 06:14 Uhr

Was Excel da macht weiß ich leider nicht.
Brauchst du wirklich Excel um die Daten zu bearbeiten? Eine Tab-getrennte Zeile aufsplitten und wieder zu einer solchen zusammensetzen ist recht simpel, sofern die Daten einem passenden Muster folgen. Das was du dann draus machen willst passiert sowieso schon in C# und nicht in Excel. Also warum diesen umständlichen Umweg gehen?