Laden...
B
BlauerTeddy myCSharp.de - Member
Telefonvermittlung Österreich Dabei seit 02.05.2019 4 Beiträge
Benutzerbeschreibung
Ich bin blutiger Anfänger. Aber ich will es einfach lernen 😁

Forenbeiträge von BlauerTeddy Ingesamt 4 Beiträge

02.08.2019 - 09:22 Uhr

Ich habe aktuell das Problem, dass ich in WPF keine klassische Main-Methode habe.
Vielmehr wird die MainMethode vom System laufend neu zurück gesetzt und lässt sich auf normalem Weg nicht manipulieren.
Das zwingt mich dazu, Objekte (Instanzen einer Klasse) in den C#-Codes der Fenster und Frames des WPF anzulegen. Allerdings nimmt er mir die Objekte und auch einfache Variablen nicht mit zu den anderen Fenstern und Frames, da diese jeweils eigene C#-Codes haben. Lediglich mit dem Konstruktor kann ich diese übergeben.

Bisher habe ich folgende "Umgehungen" überlegt.

  1. Ich lasse alles in einem Fenster ohne Frames laufen. Dort kann ich die Objekte erzeugen und problemlos im gesamten Code darauf zugreifen. Dafür muss ich aber alle Buttons, Images usw. in einem Fenster erzeugen und auf Width = 0 setzen, wenn ich sie ausblenden will. Will ich sie anzeigen oder ausblenden, dann manipuliere ich mittels C#-Code diese Breite und zeige sie je nach Position im Spiel an. Das ist natürlich recht unübersichtlich in der Programmierung und Gestaltung mit all den Buttons usw. Aber.. Ich kann objektorientiert programmieren.
  2. Ich arbeite mit einem Fenster und vielen Frames. Hier kann ich je nach Position im Spiel die ensprechend gestalteten Frames ins Fenster laden. Aber.. es stirbt damit die objektorientierte Programmierung, da ich alles mittels Konstruktor übergeben muss und der mir keine Objekte nimmt. Eventuell habe ich noch nicht gecheckt, wie man Objekte über diesen überträgt. Also übergebe ich hunderte Variablen mit dem Konstrukor in das nächste Frame. Und das bei bisher etwa 10 Frames. Es ist wahnsinnig unübersichtlich und mühsam. 😦
  3. Ich lege eine Datenbank an und lese und schreiben einfach in allen Fenstern und Frames die benötigten Werte aus dieser aus oder manipuliere sie.

Mein Traum ist jedoch, dass ich in WPF über mehrere Frames hinweg die gleichen Objekte benutzen kann. So wie in einem "normalen" C#-Code.

Erzeugung des Objekts HausBaden:

namespace Laufhaus_Imperium
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Häuser HausBaden = new Häuser();
            HausBaden.Name = "Schneckenhaus";
        }

        private void HalloWeiterButton_Click(object sender, RoutedEventArgs e)
        {
            MainFrame.Content = new Startseite(); // 
        }
    }
}

In all den folgenden Frames existieren die Objekte nicht mehr. Sodass ich es aktuell mit der 2. Version versuche. Aber es scheint mir so verrückt zu sein, die objektorientierung umgehen zu müssen, um WPF mit mehreren Frames zu nutzen. Das kann nicht im Sinn der Sache sein. (ich schreibe das Spiel ja um zu lernen. Auf eine grafische Oberfläche mag ich jedoch nicht verzichten..)

Leider habe ich keine Ahnung wie die vorgeschlagene Variante mit dem Konstrukor aussehen könnte. Dafür bin ich wohl noch nicht weit genug. You-Tube-Videos zur Übergabe von Werten in WPF finde ich auch nur für einfache Variablen.

28.07.2019 - 11:44 Uhr

Hallo liebe Alle,

Die Monate vergingen und ich habe ein leider sehr essentielles Problem nicht lösen können.
Wenn ich in WPF ein Objekt erzeuge (Beipiel: das Objekt "Marco" der Klasse "Held"), so bleibt es plump gesagt in dem Frame, in dem ich es erzeuge. Das nächste Frame, das ich in eine Form lade weiss nichts von dem Objekt. Natürlich kann ich Werte mit dem Konstruktor übergeben, doch eben keine Objekte. und bei über 150 Variablen (wenn ich Klassen und Objekte umgehe) ist das echt mühsam und komplex.
Ich bat einen C++ Programmierer um Hilfe. Allerdings stieß er recht überrascht auf das gleiche Problem.
Ich bitte Euch abermals um Rat, wie ich nicht nur Variablen, sondern ganze Objekte von einem Frame zu dem nächsten übergeben kann.

In den Büchern "Einstieg in C# für mit Visual Studio 2019" und "Windows Presenter Foundation", sowie der Videoreihe C# Masterkurs aus programmieren-starten.de. Fand ich keine Behandlung meines Problems.

Zur Zeit arbeite ich wieder in Umgehung der Objektorientierung nur mit vielen Variablen ohne Klassen und Objekte dafür anzulegen.

Ich wäre Euch WIRKLICH dankbar, wenn ihr mir da einen Hinweis auf mein fehlerhaftes Verständnis geben würdet. Wo denke ich so falsch, dass in keinem Buch oder so auch nur Jemand an so ein Problem denken braucht?

03.05.2019 - 08:58 Uhr

Ich glaube es dank deiner Hilfe gelöst zu haben! 😃

{
	public partial class Window1 : Window
	{
		Helden Marco = new Helden();
		Helden Tobias = new Helden();
		
		
		public Window1()
		{
			InitializeComponent();
			
			Marco.alter=40;
			Marco.name="Marco";
			Tobias.alter=38;
			Tobias.name="Tobias";
		}
						
		void button1_Click(object sender, RoutedEventArgs e)
		{
			string Ergebnis = ""+Marco.alter;
			TextBox1.Text = Ergebnis;
		}
	}
}

Es scheint als läge die Lösung darin die Objekte in der äußersten geschweiften Klammer zu erzeugen.
Die Eigenschaften dürfen dann aber erst später behandelt werden. Sonst kommts wie bei mir so oft zu Fehlermeldungen.
Allerdings dachte ich schon öfter ich hätte es gelöst. 😄

Ist das ein passender Weg? Oder bringt dieses Vorgehen später andere Probleme?

02.05.2019 - 21:07 Uhr

Hallo liebe Programmierer!

Ich habe ein Problem für das ich seit Wochen in meiner Freizeit eine Lösung suche. Bitte lacht Euch nicht kaputt, wenn ihr mein Problem seht. Aber ich kapiers einfach nicht..

Ich möchte nachdem ich eine Klasse angelegt habe, Objekte davon anlegen. Soweit klappt das auch alles. Aber wenn ich die Methoden des Objekts oder seine Eigenschaften ansprechen möchte, bekomme ich nur eine Fehlermeldung.

Ich schreibe in C# mit WPF, aber ich denke nicht, dass es ein WPF-Problem ist.

namespace Objekte_und_Methoden_Test
{
    class Helden
    {
        public string name { get; set; }
        public int alter;
        public int stärke;
        public int lebensenergie;

        public void Kampf(int schaden)
        {
            lebensenergie = stärke - schaden;
        }

        public void Heilung()
        {
            lebensenergie++;
        }
    }
}

Mein eigentlicher Programmcode:

namespace Objekte_und_Methoden_Test
{

    public partial class MainWindow : Window
    {
            
        public MainWindow()
        {
            InitializeComponent();
            Helden Marco = new Helden();
            {
                Marco.alter = 20;
                Marco.name = "Marco";
                Marco.lebensenergie = 20;
                Marco.stärke = 10;
            }
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Marco.alter++; //<--- FEHLER
        }
    }
}

Mein Problem ist, dass er "Marco.alter" nicht erkennt. Er sagt dann immer > Fehlermeldung:

"CS0103 Marco ist im aktuellen Kontext nicht vorhanden."