Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Affje

Treue Seele

  • »Affje« ist der Autor dieses Themas

Beiträge: 89

Beruf: Student

  • Private Nachricht senden

1

29.04.2011, 23:03

[C#] Kommunikation verschiedener Formen

Hey,

ich hab mal wieder eine Frage, auch diese ist bestimmt wieder im untersten Niveau einzuordnen ;)

Ich bastle jetzt schon seit längerer Zeit an einer C#-Anwendung mit grafischer Oberfläche. In den einzelnen Formen klappt soweit eigentlich auch alles ganz gut, wenn ich jetzt aber z.b. in der Form vom Optionsmenü im

C#-Quelltext

1
private void comboBoxBackground_SelectedIndexChanged(object sender, EventArgs e)


Event was ändere, soll sich das Bild im PictureBox-Container der Main-Form ändern. Doch wie genau kann ich die verschiedenen Formen überreden, doch noch irgendwie miteinander zu kommunizieren?
Ich habe in den Eigenschaften des PictureBox-Containers das entsprechende Attribut Modifiers(?) bereits auf Public gestellt, aber ich kann trotzdem nicht drauf zugreifen.

Vielleicht kann ja jemand Licht ins Dunkel bringen.
MfG Sascha

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

29.04.2011, 23:11

Übergib einer Form eine Referenz auf die Form(s) mit denen sie Kommunizieren können soll.

Also wenn du eine MainForm und eine SubForm hast, dann hat SubForm so einen Konstruktor:

C#-Quelltext

1
2
3
4
5
6
7
8
9
class SubForm : Form
{
   public SubForm( MainForm main )
   {
      Main = main;
   }

   MainForm Main;
}


Und aus der MainForm erstellst du die SubForm dann so:

C#-Quelltext

1
SubForm sub = new SubForm( this );


In der SubForm kannst du dann ganz normal über "Main" auf die Methoden und Eigenschaften der MainForm zugreifen.

Affje

Treue Seele

  • »Affje« ist der Autor dieses Themas

Beiträge: 89

Beruf: Student

  • Private Nachricht senden

3

30.04.2011, 10:58

Irgendwie krieg ich das nicht gebacken.
Meine Optionen-Form sieht "oben" so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
namespace Schiessen
{
public partial class Optionen : Form
{

    public Optionen()
    {
        InitializeComponent();
    }
    .
    .
    .


Meine Main ähnlich:

Quellcode

1
2
3
4
namespace WindowsFormsApplication1
{
public partial class Main : Form
{


Wo genau muss das jetzt hin?!

Noch eine andere Frage, die aber auch etwas mit dem thema zu tun hat. Wenn mein Programm startet, wird in der Main() ein LoadOptions(); aufgerufen, um meine Optionen aus einer Datei zu lesen. Das klappt auch gut, die passenden Werte werden gesetzt.
Ich habe ein Attribut, ob eine automatische Update-prüfung durchgeführt werden soll. Falls dieser Wert auf true ist, öffnet sich ein Fenster (eine Form..), wo eben bisschen was angezeigt werdne soll, Status etc.
Das ist auch nicht das Problem, das problem ist, dass sich die Update-Form VOR der Main-Form öffnet, das sieht einfach banane aus, ich will das Main-Window, dann darüber das Update-Fenster.
Ich habe jetzt schon eine halbe Stunde im Code rumgekruschdelt, finde aber absolut keinen grund, warum das Main-Fenster erst nach dem Update Fenster geöffnet wird.
Im Hauptfenster wird eine Grafik geladen, kann es vlt. daran liegen? Dass eben das laden minimal länger dauert und er deshalb die Update-Form vorher öffnet?

Quellcode

1
2
3
4
5
6
7
8
9
10
namespace Schiessen
{
    public partial class Main : Form
    {

        public Main()
        {
            InitializeComponent();
            LoadOptions();
        }


Weiter unten dann:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        Update UpdateForm = new Update();
        public void ClientUpdate(int version)
        {
            try
            {
                System.Net.WebClient Client = new System.Net.WebClient();
                int nummer = Convert.ToInt32(Client.DownloadString(Link entfernt));
                //MessageBox.Show(Convert.ToString(nummer));
                /*
                if (version == nummer)
                    MessageBox.Show("Sie benutzen bereits die aktuellste Version.");
                else if (version < nummer)
                    MessageBox.Show("Eine neuere Version ist verfügbar");
                */

                UpdateForm.Show();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }


Woran könnte das liegen?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Affje« (30.04.2011, 18:32)


Affje

Treue Seele

  • »Affje« ist der Autor dieses Themas

Beiträge: 89

Beruf: Student

  • Private Nachricht senden

4

30.04.2011, 21:00

Ok Sylence, ich hab das jetzt so gemacht, wie du das geschrieben hast.
Da ich aber aus Unkenntnis vorher das Optionen Optionen = new Optionen(this); global gemacht habe, fehlen jetzt 4 Objektverweise.
Mache ich zu Testzwecken in jede Methode, die einen Objektverweis braucht, eben die Zeile Optionen Optionen = new Optionen(this); habe ich zwar keine Fehler mehr, aber das Programm braucht innerhalb kurzer zeit 600MB Speicherplatz :D

Ich weiss nicht so recht :D
Falls sich irgendjemand den Code anschauen möchte, kann ich ihm gern eine PN schicken, zumindest die wichtigen Teile.

Werbeanzeige