Hur gör jag i C++ för att koppla samman flera formulär? Från Formulär1 öppnar jag Formulär2, men sedan vill jag klicka på en knapp i Formulär2 som t ex tömmer en textruta i Formulär1. Utan att ha sett din lösning är det svårt att säga varför header-filerna skulle orsaka problemet. Tack för ditt svar. Om du har publika kontroller, så är det inget problem. Du måste däremot ha en referensvariabel, det går inte att komma åt på något annat sätt. Tack för svaret. Ok, är det alltså omöjligt att instansiera Form1 i Form2 samtidigt som jag instansierar Form2 i Form1? I de andra (VB/C#) språken så gills inte cirkulärreferenser. Detta låter typiskt som en sådan... Det ska bli ett enkelt spel. Jag hade tänkt att man i form1 skriver karaktärens namn, och sedan ska kunna ha 3 olika val. Beroende på vilket man väljer, öppnas form2, form3 eller form4. I det nyöppnade formuläret skriver man in data för karaktären, och när man sparar dessa stängs formuläret ner och sammanställningen visas i form1. Det lättaste är nog att deklarera båda/alla formulär i Main() och sedan skapa de som du vill ha i Main()Flera formulär
Hur berättar jag alltså för Formulär2 vad Formulär1 är?
Det verkar vara något problem med inkluderingen av header-filerna, för när jag inkluderar Formulär2.h i Formulär1.h (eller i stdafx.h), så vet inte längre Formulär 2 vad Formulär1 är... och vice versa.Sv: Flera formulär
Dock - en möjlig lösning är att låta kommunikationen mellan Formulär2 och Formulär1 ske genom en event. När du klickar på knappen i Formulär2, meddelas Formulär1 genom händelsen och Formulär1 tömmer då det som tömmas ska.
På så vis behöver Formulär2 inte veta nåt om Formulär1.Sv:Flera formulär
Men i detta fallet rör det sig om en rad kontroller som jag måste kunna komma åt från det andra formuläret.
Jag vet inte om jag krånglar till det mer än nödvändigt. Alltså, i en ny Windows Forms Application lägger jag till ett extra formulär (Form2). Hur gör jag sedan så att Form1 och Form2 kommer åt varandras publika kontroller? Var inkluderar jag Form2.h?Sv: Flera formulär
Du måste alltså:
Deklarera en variabel (f2) av typen Formulär2
Instansiera f2 från Formulär1
Accessa kontrollerna med f2.Kontrollnamn.
Du kommer INTE åt dem med Formulär2.Kontrollnamn!
/mickeSv:Flera formulär
Så långt är jag med. Jag instansierar Form2 i Form1 såhär:
Form2 * form2 = new Form2;
form2->form1 = this;
form2->Show();
...och i Form2 lägger jag till instansen av Form1:
public: Form1 * form1;
Men här uppstår problemet. Jag kan nu inte få klassen Form2 att komma åt klassen Form1:s publika kontroller eftersom Form2 inte vet vad Form1 är. Om jag skriver:
#include "Form1.h"
längst upp i Form2.h, så vet istället inte längre Form1 vad Form2 är.
Jag antar att jag bara inkluderat någon header fel, eftersom ovanstående fungerar utan problem i C#.Sv: Flera formulär
Sv:Flera formulär
Vad vill du göra, det kanske finns ett smidigare sätt??
/mickeSv: Flera formulär
Är det smidigare att för detta skapa en 'karaktärs-klass' som sparar allt?
Det konstiga är att ovanstående 'cirkulärreferens' faktiskt funkar i C#!Sv:Flera formulär
Då kan du sätta referenser till båda formulären. - eller en klass, som du skrev...
/micke