Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von MarsStein
Thema: [erledigt] Thread wird nicht durch While Schleife abgebrochen
Am im Forum: Grundlagen von C#

Hallo,

die Schleife in Run(), die jedesmal einen Thread startet, sicht grauselig aus - aber das wurde ja schon angemerkt.

Der Kern des Problems aus der Fragestellung ist der:

                            while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                var pos = ms.Position;
                                ms.Position = ms.Length;
                                ms.Write(buffer, 0, read);
                                ms.Position = pos;
                            }

Dieser inneren Schleife (im inneren Thread) ist es völlig schnuppe, ob beende auf true gesetzt wird. Die läuft also munter weiter, solange Daten ankommen. Und damit auch der (innere) Thread.

Gruß, MarsStein

Thema: System.Collections.Generic.List: eigenartiges Verhalten der Methode Contains(T item)
Am im Forum: Grundlagen von C#

Hallo,

Abt war mal wieder schneller...

um es etwas auszuführen, und damit ich nicht umsonst getippt habe:
Arrays sind Referenztypen, und es wird ein Instanzvergleich durchgeführt wenn man sie vergleicht.

Da Du mit new immer wieder eine neue Instanz erzeugt, sind die Objekte zwar möglicherweise inhaltlich gleich, aber es handelt sich doch um unterschiedliche Objekte.
Deshalb wird das neue Array, nach dem Du suchst, in der Liste nicht gefunden. Es steckt halt nicht drin.

Gruß, MarsStein

Thema: [MVVM WPF] [Erledigt] Viewmodelgröße- /struktur - Best Practise?
Am im Forum: GUI: WPF und XAML

Hallo,

@Blaster: WTF?
Du hattest einfach nur Vererbung in den Raum geschmissen. Das eignet sich im Bzug auf die Fragestellung überhaupt nicht.
Ach sooo, Du hattest bei der Vererbung sowieso Komposition im Hinterkopf? Dann hättest Du's auch gleich dazuschreiben können :evil:
Was Du jetzt hier mit dem generischen <T> willst, erschließt sich mir im Kontext der Frage auch nicht... aber seis drum. Die Frage ist beantwortet, und ich diskutiere hier nicht weiter.

Gruß, MarsStein

Thema: ItemsControl-Item Listenelement bei klick auf Element löschen
Am im Forum: GUI: WPF und XAML

Hallo,

die Löschfunktion muss ja ohnehin dort ausgeführt werden, wo die Liste gehalten wird. Das Element kann sich ja nicht selbst löschen.
Das ist aber relativ einfach. Dein Ansatz ist auch schon ganz gut. Einen Verweis auf das übergeordnete ViewModel brauchst Du aber in den Items nicht.

Es reicht ja, wenn Dein ICommand zum Löschen das ItemViewModel als Parameter bekommt.
Dann musst Du eben nur das Command aus dem übergeordneten DataContext (dem ViewModel, das die Liste enthält) binden.

<Button Content="X"
        Command="{Binding DataContext.RemoveElement, RelativeSource={RelativeSource AncestorType=ItemsControl}}" 
        CommandParameter="{Binding}"/>

Gruß, MarsStein

Palladin007 war schneller. Ob ich hier allerdings einen BindingProxy nehmen würde... Kanonen, Spatzen und so...

Thema: [MVVM WPF] [Erledigt] Viewmodelgröße- /struktur - Best Practise?
Am im Forum: GUI: WPF und XAML

Hallo,

Zitat von Blaster
Vererbung!
Nein. Komposition.
Verschiedene Sub-ViewModels, von denen jeweils ein Property in den ViewModels, die sie benötigen. Und dann mit entsprechenden Bindings auf der View in die SubVMs klettern.
Das ist wesentlich flexibler.
Die SubVMs dann möglichst logisch so einteilen, dass sie wiederverwendbar sind. Das gleiche gilt für die View und UserControls.

Gruß, MarsStein

Thema: Lesen von Live Datenstrom eines Drucksensors
Am im Forum: Rund um die Programmierung

Hallo,

Zitat von Abt
Für Windows 7 x64 gibt es RTX.
Kenne das aber auch ur aus der Theorie. Nie eine Industrieanlage damit gesehen.
Das haben wir bei einem unserer Geräte im Einsatz (nicht bei dem, an dem ich arbeite).

Ist aber wenn ich das richtig mitbekommen habe jetzt nix, wo man sich eben mal kurz einarbeiten kann.
Das ist Real-Time Programmierung mit C++, das hat wieder ganz eigene Anforderungen und ist quasi eine Welt für sich.
Wir haben da extra einen Spezialisten eingestellt - das ist für ein Praktikum bestimmt nicht geeignet.

Gruß, MarsStein

Thema: Ohne Reflektion, this Parameter übergeben und (z.B. aus Variablenname) eine ID generieren
Am im Forum: Grundlagen von C#

Hallo,

Zitat
Stadtessen ist die Operator-Überladung das, was der Mehrheit aufstößt?
Ja - mir auch.
Und zwar aus einem einfachen Grund: Das Verhalten ist völlig missverständlich, und zwar vor allem, weil Du auch noch eine implicit-Konvertierung nach int hast.

Folgender Code:

SynchronizedObject mySync = new SynchronizedObject(...);
int myInt = mySync;

if(mySync == myInt) // true

// -----

mySync |= 8;
myInt |= 8;

if(mySync == myInt) // false
Das halte schon für verwirrend und vor allem inkonsistent und würde davon unbedingt absehen.
Früher oder später verwechselt jemand da etwas und dann fliegt es Euch um die Ohren.

Daher eigent sich IMO auch kein anderer Operator, zumindest keiner, der auch auf int anwendbar wäre.

Die Semantik ist hier ganz klar die einer Set-Methode und sollte dann auch so implementiert werden.
Was ist daran eigentlich so schlimm? Dank Intellisense musst Du noch nicht mal mehr tippen, auch wenn die Zeile 2 Zeichen(!) länger wird als mit dem Operator.


Gruß, MarsStein

Edit: Diese Antwort bezieht sich nur auf die Operator-Überladung an sich. Nicht auf das gesamte Konzept. Da würde ich auch zusehen, ob man das nicht ganz anders umsetzt.

Thema: [Gelöst]Custom Exception Popup-Dialog selbst implementieren
Am im Forum: GUI: WPF und XAML

Hallo,

Du könntest ein Popup dafür verwenden.

Gruß, MarsStein

Thema: Selbstzweifel für die Eignung zum Programmieren
Am im Forum: Smalltalk

Hallo,

Es ist wie ein Puzzelspiel.

Zitat
Ich weiß was Schleifen sind, Vererbung, Klassen, Objekte, Methoden, Datentypen, arrays usw.
Das sind alles Puzzleteile, die sich erst mit der Zeit zu einem Gesamtbild zusammenfügen. Und je größer das Bild wird, desto leichter programmiert es sich.

10 Wochen sind viel zu wenig, um jetzt schon die Flinte ins Korn zu werfen. Die meisten Programmierer brauchen viel(!!) länger, um überhaupt eine Sprache vollständig zu beherrschen - dazu kommt dann noch die Kenntnis des Frameworks, das braucht also alles seine Zeit. Erwarte einfach am Anfang nicht zuviel von Dir selbst, damit Du den Spaß nicht gleich wieder verlierst.

In diesem Sinne, Kopf hoch!

Gruß, MarsStein

Thema: TabControl Multiline - Zeilenwechsel verhinden
Am im Forum: GUI: Windows-Forms

Hallo,

witzig - MrSparkle hat eigentlich genau richtig erklärt, warum sich TabControls so verhalten, und es ist ja nun mal das Standardverhalten und mag so auch sinnvoll sein.

Ich persönlich konnte mich aber auch bis heute nicht dran gewöhnen, dass Tab-Zeilen durch die Gegend springen.

Gruß, MarsStein

Thema: Invalidate DataGrid - welches Event nutzen? [Gelöst, INotify nicht implementiert]
Am im Forum: GUI: WPF und XAML

Hallo,

wenn Foo INotifyPropertyChanged richtig implementiert und "IsOnline" ein gebundener Wert ist, sollten Änderungen an de Property direkt sichtbar werden.

Gruß, MarsStein

Thema: Wie kann ich einen Counter im UpdateProgress anzeigen?
Am im Forum: Web-Technologien

Hallo,

das ist alles schon etwas länger her... aber wenn ich mich richtig erinnere, geht das so mit einem UpdateProgress nicht.
Wenn Du einen Partial Postback durchführst, wird ein Teil der Seite neu geladen und anschließend der gesamte neu geladene Teil gerendert. Da kommst Du so einfach nicht dazwischen.

Um so was mit WebForms zu realisieren, bräuchtest Du einen Timer, der auf dem Server den Status pollt - z.B. per WebMethod - und diesen dann entsprechend anzeigt.
Oder Du müsstest in mehreren Schritten arbeiten - das läuft dann auf mehrere UpdatePanels raus, eines für jeden Schritt.

Beides nicht schön, aber wie Du Dir das vorstellst geht es out of the box eben nicht.
Es gibt vermutlich in Netz noch irgenwelche WebForms-Controls die sowas können, könntest Du mal suchen.

Aber Abt hat schon recht, Du reitest ein totes Pferd.

Gruß, MarsStein

Thema: Task.ContinueWith mit Parameter aufrufen
Am im Forum: Grundlagen von C#

Hallo,

t = new Task(() =>
    {
        …
        t.ContinueWith(…);
    });
Das geht böse aus. Du kannst die Variable t nicht verwenden, bevor sie zugewiesen ist.
Die Zuweisung erfolgt aber erst nach dem Konstruktor.
Unsinn. Du benutzt es ja erst in der Action.


async/await wäre auf jeden Fall zu empfehlen, ich bin da gestern nicht drauf eingegangen, weil explizit nach ContinueWith gefragt wurde.
Das wurde eingeführt, um einfacheren (und damit besser lesbaren und wartbaren) Code zu schreiben. Alles was hinter einem await steht, ist sozusagen die Contiuation. Das funktioniert auch wunderbar und der Code wird stark vereinfacht.
Allerdings muss man es wenn man damit anfängt auch durchziehen. Du kannst await nur in Methoden benutzen, die async sind und dementsprechend void, Task oder Task<T> zurückgeben (man sollte immer Task statt void nehmen, ausser man schreibt asynchrone EventHandler).
Das ist also viral. Bei neuen Projekten auf jeden Fall zu empfehlen, in alten Projekten ggf. aufwändig einzupflegen, lohnt sich IMO aber trotzdem.

Gruß, MarsStein

Thema: Task.ContinueWith mit Parameter aufrufen
Am im Forum: Grundlagen von C#

Hallo,

hast Du schon mal in die Doku geschaut?
Alle Überladungen von Task.ContinueWith wollen einen Delegaten, der als ersten Parameter die ursprüngliche Task annimmt. Das ist bei Dir nicht der Fall.

Zusätzlich gibt es jede Menge Überladungen, die als zweiten Parameter ein object state annehmen.
Das Objekt, das dann an den Delegaten übergeben wird, kannst Du beim Aufruf von ContinueWith mitgeben. Damit kannst Du Dir theoretisch alle möglichen Parameter übergeben, Du musst sie nur in eine Klasse verpacken und innerhalb des Delegaten auf den richtigen Typ zurückcasten.
Das müsste dann so aussehen:

class MyFancyParamsClass
{
    public string Param1 { get; set; }
    public int Param2 { get; set; }
    ...
}

private void ZahlungseingaengeGespeichert(Task prevTask, object state)
{
    var parameters = (MyFancyParamsClass)state;
    ...
}

task.ContinueWith(ZahlungseingaengeGespeichert, new MyFancyParamsClass { Param1 = "whatever", Param2 = 7 }, TaskScheduler.FromCurrentSynchronizationContext());
Und wenn Dir das nicht gefällt, kannst Du auch mit einer Lambda-Expression arbeiten, und mit Closures.
Dann würde es so aussehen:

task.ContinueWith(t => ZahlungseingaengeGespeichert(/* hier kannst Du alles mögliche übergeben, z.B. auch t.Result */), TaskScheduler.FromCurrentSynchronizationContext());

Gruß, MarsStein

Thema: SerialDataReceived Event wird nur auf einer Seite angezeigt
Am im Forum: GUI: Windows-Forms

Hallo,

nur zu Richtigstellung:

Zitat von panicJonny
du list ja in deinem Event den seriellen Port erst aus.
Ist soweit richtig.
Zitat von panicJonny
Also ist der Buffer vom Port beim zweiten Aufruf des Events bereits leer und nichts kann gelesen werden.
Ist etwas unglücklich formuliert. Man müsste eher schreiben:
Also ist der Buffer vom Port beim Aufruf des zweiten Eventhandlers (für das selbe Event) bereits leer und nichts kann gelesen werden.
Zitat von panicJonny
SerialDataReceived += func1
SerialDataReceived += func2

ruft das Event zwei mal auf

Ist so also nicht ganz richtig. Es werden vielmehr jedesmal, wenn das Event vom SerialPort ausgelöst wird, beide registrierte Handler nacheinander aufgerufen. Wenn der erste Handler dann die Daten vom Port liest, bleibt für den zweiten Handler eben nichts mehr übrig.
Das Event selbst wird dadurch aber nicht öfter ausgelöst.

Beim SerialPort darf man sowas generell nicht machen - es könnte sogar sein, dass zwischen den Aufrufen der beiden Handler schon wieder neue Daten anfallen, die dann dieser zweite Handler liest. Dadurch kann sehr schnell ziemlich viel durcheinandergeraten.

Gruß, MarsStein

Thema: "Type" als generischen Parameter verwenden
Am im Forum: Grundlagen von C#

Hallo,

Zitat von Sir Rufo
Ist nur die Frage, ob man das wirklich will.
Und diese Frage sollte man sich unbedingt auch stellen. Nur weil es geht, heisst das nicht, dass es auch gut ist, das zu tun.

In fast allen Fälle weisen solche Probleme wie hier beschrieben auf Mängel in der Architektur hin und mit einem anderen Ansatz lösen sie sich von selbst.

Gruß, MarsStein

Thema: Wie kann ich mehrere Schleifen schachteln (Würfelspiel)?
Am im Forum: Grundlagen von C#

Hallo,

leider hast Du nicht genau beschrieben was Du willst.

Wenn Du einfach nur die einzelnen Würfel betrachten willst, brauchst Du nichts zu schachteln.
Dann reicht es, die Anzahl der Würfel mit der Anzahl Wiederholungen zu multiplizieren, weil es keinen Unterschied macht, bei welcher Wiederholung ein Würfel geworfen wurde.

Wenn Du die Summen der einzelnen Wiederholungen zählen willst, musst Du für zwei Dinge sorgen:

  1. Das Objekt (bei Dir das Array), in dem die Anzahl gespeichert wird, muss groß genug sein, um alle möglichen Summen aufnehmen zu können. Dann eignet sich statt einem Array ggf. besser ein Dictionary<int,int>.
  2. Du musst dafür sorgen, dass für jede Wiederholung (äußere Schleife) soviele Würfe addiert werden, wie es Würfel gibt (innere Schleife).
Also sowas in der Art (nicht getestet):

           var resAndNumber = new Dictionary<int,int>();

            // für jede Wiederholung...
            for (int i = 0; i < numberRepeats; i++)
            {
                // ...rolle Anzahl Würfel und addiere Ergebnisse
                int rolledResult = 0;
                for (int i = 0; i < numberDice; i++)
                {
                    rolledResult1 += DiceRandomGenerate.Next(1, 7);
                }

                // wenn diese Summe noch nicht geworfen wurde, einen Eintag dafür im Dictionary anlegen
                if(!resAndNumber.ContainsKey(rolledResult))
                {
                    resAndNumber[rolledResult1] = 0;
                }

                // bisherige  Anzahl für diese Summe hochzählen
                resAndNumber[rolledResult1]++;
            }


Bei der Ausgabe dann mit foreach das ganze Dictionary durchlaufen (sechsmal reicht ja dann nicht mehr).

Finde ich übrigens sehr gut, dass Du als Einsteiger erst mal auf der Konsole arbeitest statt Dich direkt auf grafische Oberflächen zu stürzen (persönliche Meinung)

Gruß, MarsStein

Thema: Prozess auf Server von Client aus manuell starten
Am im Forum: Rund um die Programmierung

Hallo,

Zitat
Über eine Konf Datei in der das Clienttool einen paramter setzt und der Server es dauernd abprüft!?
Wohl eher nicht -> dann brauchst Du ja auf dem Server auch einen Prozess, der die Prüfung übernimmt.
Dann kann dieser Prozess aber auch gleich ein (Windows-)Service sein, der im Netzwerk auf Anfragen wartet und dann bei einer entsprechenden Anfrage den Prozess startet.
Und dann könntest Du (optional) letztendlich die Funktionalität des Tools auch direkt im Service unterbringen.

Gruß, MarsStein

Thema: Dividiere List<T> Property bevor Sum()
Am im Forum: Grundlagen von C#

Hallo,

Zitat
Folgendes habe ich versucht:

double ges_netto = itemList.Sum(item => item.StaticPreis / 1.19);
Das müsste doch funktionieren.

Aber eigentlich müsste es doch reichen, die Summe zu teilen:

double ges_netto = itemList.Sum(item => item.StaticPreis) / 1.19;
ansonsten, falls Du die Einzel-Nettopreise brauchst:

var nettoPreise = itemList.Select(item => item.StaticPreis / 1.19);
double ges_netto =nettoPreise.Sum();
Aber ob das einen Vorteil gegenüber Deinem Code bringt...

Es gäbe noch die Möglichkeit, ein Dictionary zu erzeugen, um die einzelnen Nettopreise den Positionen zuzuordnen:

var nettoDict = itemList.ToDictionary(item => item, item =>  item.StaticPreis / 1.19);
var double ges_netto = dict.Values.Sum();
// dann kannst Du den Einzelnettopreis auch abfragen über
var itemNetto = nettoDict[item];

Elegant wäre auch eine Erweiterungsmethode für den Nettopreis, die könntest Du überall verwenden, wo Du eben den Nettopreis benötigst:

public static double NettoPreis(this ItemType item)
{
    return item.StaticPreis / 1.19;
}

// Aufruf für Dein Beispiel:
itemList.Sum(item => item.NettoPreis())
(Code nur runtergetippt, nicht getestet)

Gruß, MarsStein

Thema: BackgroundWorker im ViewModel: Liste ist, je nach timing, noch nicht instanziiert
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

vermutlich gibt es im worker_DoWork eine Exception, bevor die TmpListe erstellt und zugewiesen ist.
Dann raucht Dir der BackgroundWorker ab, und Du bekommst es nicht mit, weil Du in worker_RunWorkerCompleted die e.Error-Property nicht auswertest. Da sollte die Exception drinstehen.

Zitat von Jessimaus
jedenfalls bei Aufruf von refresh_GeraeteListe() durch den Konstruktor. Wenn ich refresh_GeraeteListe() über das Command CmdRefreshGeraeteliste aufrufe, tritt das Problem scheinbar nicht auf.
Wenn das Ding einmal durchgelaufen ist, ist TmpListe ja schon initialisiert. Wenn der BackgroundWorker dann eine Exception verursacht, wird auch keine neue Liste zugewiesen. Im diesen Fall arbeitest Du dann aber mit den alten Daten aus dem letzten gelungenen Durchlauf.

Gruß, MarsStein

Thema: Vorraussetzungen um programmieren zu lernen?
Am im Forum: Smalltalk

Hallo,

ich glaube auch nicht, dass Du mit Anfang 30 zu alt dafür bist.
Ich selbst habe meine ersten Codezeilen auch erst mit 25 geschrieben, und dann mit 26 eine Ausbildung in dem Bereich begonnen - und bin letztlich noch ein recht ordentlicher Programmierer geworden (jedenfalls glaube ich, das behaupten zu können).

Was man dazu braucht?
Die wichtigsten Punkte waren für mich immer logisches Verständnis sowie ein gutes Abstraktionsvermögen. Aber das ist nur meine persönliche Einschätzung.

Zitat von Skydanith
dass das Thema programmieren riesig istt und dass man eigentlich nie "ausgelernt" hat.
Das ist übrigens völlig korrekt. Es ist in der Tat ein sehr weites Feld, und es gibt ständig neue Technologien. Da nicht am Ball zu bleiben, bedeutet Stillstand, und der ist in der Branche tödlich.

Gruß, MarsStein

Thema: Ausbildung abgeschlossen, nun Jobsuche --> Erfahrungen?
Am im Forum: Smalltalk

Hallo,

Zitat von Prodigio
Sind die meist explizit ausgeschrieben?
Zumindest oft.
Gabs auch hier in der Jobbörse schon zuhauf: Forumssuche nach junior

Gruß, MarsStein

Thema: (A)Sync HttpWebRequest.GetResponse(): Wieso muss für ein separater Thread aufgemacht werden?
Am im Forum: Grundlagen von C#

Hallo

Zitat
Wird bei dem Aufruf

HttpWebRequest request = HttpWebRequest.Create(/*url*/) as HttpWebRequest;
using(HttpWebResponse response = request.GetResponse() as HttpWebResponse /* <-- here */)
{ /* stuff */ }
nicht gewartet, bis die Response voll da ist ?
Doch.
Zitat
Ich vergleiche das ein wenig mit

string s = File.ReadAllText(/*fullPath*/*)

Wenn die Datei sehr groß ist, dann hängt dieser Block eben ein wenig, aber der Leseprozess bricht nicht einfach mittendrin ab.
Korrekt. GetResponse verhält sich genauso.

Nur wer BeginGetResponse sagt, muss auch EndGetResponse sagen. Das ist dann eben asynchron, und Du wirst per Callback informiert wenn die Response geladen ist.
Damit erreichst Du, dass die aufrufende Methode nicht blockiert wird während die Response geladen wird.

Mittlerweile würde man das aber ehen über async/await lösen (die Methode GetResponseAsync ist seit .NET 4.5 vorhanden):

HttpWebRequest request = HttpWebRequest.Create(/*url*/) as HttpWebRequest;
using(HttpWebResponse response = await request.GetResponseAsync() as HttpWebResponse)
{ /* stuff */ }

Gruß, MarsStein

Thema: Konstruktor überladen - das effizienteste Vorgehen für meine App?
Am im Forum: Grundlagen von C#

Hallo,

noch eine kleine Anmerkung:

Zitat von GeneVorph
Ich hatte genau diese Frage hier schon mal gepostet, bezüglich dessen, ob ich eine Form für 2 Aufgaben nutzen kann, wenn sie von der GUI her genau gleich daherkommt, lediglich einmal für das Editieren und einmal für das Neuerstellen benutzt wird. Damals wurde mit DRY argumentiert.
Sicher meinst Du damit den Thread Würde man in der Praxis eine Form für zwei versch. Verwendungszwecke nutzen?
Wenn Du den jetzte nochmal liest, wirst Du feststellen, dass die Antworten von Sir Rufo und chilic keineswegs dem widersprechen, was hier geschrieben wurde, sonder im Gegenteil sehr gut dazu passt

Gruß, MarsStein

Thema: Konstruktor überladen - das effizienteste Vorgehen für meine App?
Am im Forum: Grundlagen von C#

Hallo,

Zitat von GeneVorph
ob man SRP DRY gegenüber vorzieht. Gibt es da eine Hierarchie?
Hmm... in einer guten Umsetzung sollten sich die beiden Prinzipien gar nicht (oder nur minimal) widersprechen, sondern beide brücksichtigt werden.
Für eine Schichtentrennung, die das erlaubt, gibt es eine ganze Reihe Patterns. Für WPF gibt es das maßgeschneiderte MVVM, für eine Umsetzung in WinForms eignet sich z.B. MVP (Model-View-Presenter) ganz gut.

Als Basis hättest Du dann ein z.B. ein Model für Deine Schulklasse, und eine View die sich um die Darstellung kümmert. Dazwischen der Presenter, der sich darum kümmert, der View Daten zur Verfügung zu stellen, und auf Ereignisse der View zu reagieren (z.B. ein Event, das ausgelöst wird, wenn die Bearbeitung beendet ist).
Nun könnte man den Presenter entscheiden lassen, was für Texte im Titel/auf den Knöpfen stehen (dazu dann in de Schnittstelle der View entsprechende Properties vorsehen) oder man könnte eine EditView und eine CreateView haben, die jeweils auf einer gemeinsamen Basisklasse basieren oder oder oder... es sind nur Patterns, eine richtige Umsetzung kann auf unterschiedleiche Weise erreicht werden.

Schau Dir am besten mal ein paar Beispiele dazu an.
Es muss auch nicht MVP sein, wie gesagt gibt es eine ganze Reihe an Pattern (z.B. MVC), die unterschiedlich Ansätze der Zuständigkeiten der einzelnen Teile verfolgen, sich aber vom Prinzip her ähneln.

Schau z.B. mal Differences between MVC and MVP for Beginners
Da werden auch die Pattern nochmal erklärt.

Gruß, MarsStein

Thema: Konstruktor überladen - das effizienteste Vorgehen für meine App?
Am im Forum: Grundlagen von C#

Hallo,

zunächst mal möchte ich LaTino beipflichten.

Und dann noch einen Hinweis nachschieben zu überladenen Konstruktoren, da das auch konkret ein Teil der ursprünglichen Fragestellung war (Stichwort DRY): Du kannst von einem überladenen Konstruktor auch einen anderen aufrufen.
In Deinem Fall (auch wenn es hier nicht wirklich angebracht ist) würde das so aussehen:

public classNewOrEdit(MenuItemTasks taskName): this(taskName, "new")
        {
        }

public classNewOrEdit(MenuItemTasks taskName, string SchoolClassLabel)
        {
            InitializeComponent();
            SetForm(taskName, SchoolClassLabel);
        }

Ich sehe das Problem hier aber auch eher in der Architektur - und wenn Du schon auf DRY anspielst, dann denk auch an das Single-Responsibility-Prinzip, Deine Form hat nämlcih jetzt definitiv mehrere Verantwortlichkeiten.

Gruß,MarsStein

Thema: Informationen speichern beim wechseln der Form
Am im Forum: Grundlagen von C#

Hallo,

Zitat
Ob nun deine GUI-Instanzen neu erzeugt werden, oder wiederverwendet werden, spielt dann keine Rolle.
Natürlich spielt das eine Rolle, vor allem wenn die Instanzen nicht mit Close geschlossen, sondern mit Hide versteckt werden - die bleiben ja dann erst mal im Speicher rumliegen, und das ist zumindest unschön wenn nicht sogar schlicht falsch.

Gruß, MarsStein

Thema: Informationen speichern beim wechseln der Form
Am im Forum: Grundlagen von C#

Hallo,

bitte versteh das nicht falsch, Du hast ja schließlich im Grundlagenforum gepostet, und da sind solche Fragen (zumindest in meinen Augen) schon OK
Mit den genannten Informationen solltest Du Dich dann aber halt erst mal auseinandersetzen.
Den Kern des Problems habe ich Dir ja genannt, und in dem Link von emuu wird auch beschrieben, wie man sowas löst.

Gruß, MarsStein

Thema: Informationen speichern beim wechseln der Form
Am im Forum: Grundlagen von C#

Hallo,

Zitat von emuu
oder über eine statische Variable
Bitte nicht. Das löst jedenfalls nicht das Problem, das beim gezeigten Code vom TE beim hin- und herwechseln ständig neue Instanzen der Forms erstellt werden.

@az96: Genau das ist nämlich Dein Problem. Die Instanz, die Du aus FormB mit new FormA() erstellst, ist eben eine neue Instanz, und hat keine Ahnung davon, dass in einer anderen Instanz derselben Klasse irgendein Haken gesetzt wurde.
Dabei handelt es sich um Grundlagen, die wir hier voraussetzen.
Zitat von az96
Da ich vor ungefähr 1 Monat erst angefangen habe und mir das schritt für schritt selber beibringe
Dazu eignet sich am besten ein Buch, z.B. das im Menü links verlinkte openbook: Visual C#.
Auch hier findest Du hilfreiche Informationen: [FAQ] Wie finde ich den Einstieg in C#?

Wenn man einmal ein solches Grundlagenbuch durch hat, stellen sich solche Fragen i.d.R. nicht mehr.

Gruß, MarsStein

Thema: Wie kann ich Benutzereingaben in Konsole blockieren?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

warum den Input blockieren und nicht einfach ignorieren?
Sprich, in einer bool-Variablen sich merken, dass Down gedrückt wurde, und wenn der Stein den Boden erreicht, diese wieder zurücksetzen.
Bei den anderen Pfeiltasten dann den Input nur in Abhängigkeit von der Variablen verarbeiten.

Gruß, MarsStein