Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo Leute,

eine Frage an euch, ich hab ein Problem und iwie ein Brett vorm Kopf.

Also dabei sei gesagt, ich bin noch blutiger Anfänger was das programmieren anbelangt.

Ich hab eine WindowsForms Anwendung mit zwei Forms. Und zwar hab ich eine EingabeForm und eine Ausgabe Form und ein Klasse in der die Eingaben berechnet werden, in einer Methode.

Ich hab das Problem, das ich die Eingaben, die in einem Array gespeichert sind ich nicht aus der Klasse rausbekomme, der übergibt die nicht, wie mache ich das sinnvollerweise ?

Vielen Dank für eure Antworten.

Was genau meinst du mit: Er übergibt sie nicht?

Zeig uns vielleicht mal den entsprechenden Quelltext.

Also es geht einfach darum, allgemein, wie kann ich aus Form1 ein Array in eine andere Form übergeben, zB. in Form2 in der ich dieses Array nacher wieder in einer ListBox ausgeben möchste. Ist sicher ganz simpel nur ich hab grad iein Logikfehler.

Wenn ihr mir das sagen könnten wäre das lieb.

Bearbeitet von Joerg1990

dann zeig doch mal den Quelltext, damit wir den Fehler finden können. Denn das Übergeben eines Arrays ist normalerweise von der Syntax her nicht anders, als wie wenn ich eine einzelne Variable übergebe.

Der Fehler muss also woanders liegen

Hey, hier ist der Teil aus dem code.

So das ist der Teil aus Form1.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication1

{

public partial class Funktionseingabe : Form

{

public Funktionseingabe() // Form1 wird erstellt, Standardkonstruktor, wird automatisch ausgeführt.

{

InitializeComponent();

}

string[] nullstellen = new string[8];

public ErgebnisseÜbergeben ErgebnisseÜbergeben = new ErgebnisseÜbergeben();

private void button1_Click(object sender, EventArgs e)

{

Funktionsausgabe fa2 = new Funktionsausgabe();

fa2.Text = Text;

fa2.Show();

if (radioButtonsin.Checked == true)

{

int x = -1;

Funktionsausgabe fa = new Funktionsausgabe();

fa.Text = Text;

fa.Show();

decimal Ausgabe;

for (int i = 0; i <= 7; i++)

{

Rechnung sinus = new Rechnung(textBoxVerschiebung.Text, textBoxAmplitude.Text, textBoxSchwingung.Text, textBoxPhasenverschiebung.Text);

Ausgabe = sinus.Nullstellensinus();

nullstellen = Ausgabe.ToString();

ErgebnisseÜbergeben.einlesen(nullstellen);

}

}

}

}

Form 2 hier:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication1

{

public partial class Funktionsausgabe : Form

{

public ErgebnisseÜbergeben ErgebnisseÜbergeben = new ErgebnisseÜbergeben();

public string[]ausgabe = new string[7];

public Funktionsausgabe()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Funktionseingabe fi = new Funktionseingabe();

for (int x = 0; x <= 1; x++)

{ listBoxNullstellen.Items.Add(ErgebnisseÜbergeben.einlesen(fi.nullstellen[x]));

}

}

}

}

Hier dir Form 3, hier eine Klasse für Ergebnisübergabe:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication1

{

#region

public class ErgebnisseÜbergeben

{

string nullstelle;

public string[] ergebnis = new string[7];

public void einlesen(decimal[] Ergebnisse)

{

Funktionsausgabe fa = new Funktionsausgabe();

for ( int i=0; i <= 6; i++)

{

ergebnis = Ergebnisse[0].ToString();

fa.ausgabe = ergebnis;

}

}

public string ausgeben()

{

return this.ergebnis[0];

}

}

#endregion

}

Das war alles, ich bekomme einfach das ergebnis nicht ausgegebenm, die Rechnungen funktionieren 100% ;)

Der Code ist natürlich bissel gekürzt, bei Rückfragen, fragen, ich wäre euch unendlich dankbar für Hilfe.

Bitte beim nächsten Mal die Code-Tags verwenden.

Sehe ich das richtig, dass du mit der Form Funktionseingabe beginnst, und das Ganze dir dann in Funktionsausgabe anzeigen lassen willst?

Wenn ja, ist es klar, dass es nicht funktioniert:

Du klickst in der Funktionseingabe auf den Button. Dann wird ein neues Objekt von Funktionsausgabe erstellt und angezeigt.

Dann klickst du in Funktionsausgabe auf den Button, damit ja alles auch ausgegeben wird. Und hier sit der Fehler:

du erstellst ein neues Objekt vom Typ Funktionseingabe. In diesem Objekt wird auch dein Array nullstellen neu erstellt. allerdings werden bei dir in dieses array noch keine werte geschrieben.

Wenn du dann in Funktionsausgabe über dieses Array iterierst (wo du sowieso nur die ersten 2 Werte nimmst), ist es klar, dass er darin keine Werte findet.

Das Problem ist hier nicht die Übergabe eines Arrays, sondern eher die fehlende Kapselung und ein gewisses Logikproblem innerhalb deiner Anwendung.

Hallo, ja danke dir, ich weiß ich hab da nen paar Fehler gemacht, ich muss sagen ich muss erstmal lernen gescheiht zu programmieren, wie gesagt noch blutiger Anfänger, aber besten Dank.

Entweder du übergibst das Array direkt an die Zielklasse oder das Array wird in einer dritten Klasse, nennen wir es mal DatenTransferObject (DTO), gekapselt. Bei diesem Szenario muss aber dann das komplette DTO übergeben werden.

ACHTUNG: PseudoCode.

1. Szenario


// Constructor Ziel-Klasse

public TargetClass (string[] values)

{

  //

}


//Aufruf für die Übergabe

string[] strArray = new string[8];

TargetClass target = new TargetClass(strArray);

target.DoSomething();
2. Szenario

// Constructor DTO

public DTO (string[] values)

{}


public string[] GetArray()

{

return //;

}


// Constructor TargetClass

public TargetClass (DTO dto)

{

 _dto = dto;

}


public string[] GetArray()

{

 return _dto.GetArray();

}


// Implementation

string[] strArray = new string[8];

DTO dto = new DTO(strArray);


TargetClass target = new TargetClass(dto);

target.GetArray();

Vielen Dank, hab das selbst gelöst, war einfach nur ein Logikfehler meinerseits und halt Unkenntniss, diese ist jedoch beseitigt worden, zumindest was das Problem anbelangt.;)

mfg Jörg

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.