Sådan fik jeg løst problemet, hvad der er smartest ved jeg ikke:
HOVEDFORMEN private void buttonEdit_Click(object sender, EventArgs e) { int test = 33; FormEditModel formeditmodel = new FormEditModel(test); formeditmodel.ShowDialog(); }
og i form nummer2 public partial class FormEditModel : Form { private int nyvar; public FormEditModel(int test) { InitializeComponent(); nyvar = test; }
Det er overhovedet ikke huld i hovedet. Det er præcist sådan man gør det.
Du behøver dog ikke at abonnere på FormEditModal_Load eventet. Du kan godt sætte din label i konstruktøren.
public partial class FormEditModel : Form { private int nyvar; public FormEditModel(int test) { InitializeComponent(); nyvar = test; label1.Text = test.ToString(); } }
Hvis du gør det på denne måde, behøver du heller ikke at have den private nyvar variabel, med mindre du skal bruge den fra flere steder i koden.
Så du kan egentlig nøjes med: public partial class FormEditModel : Form { public FormEditModel(int test) { InitializeComponent(); label1.Text = test.ToString(); } }
Det var netop fordi jeg skal bruge variablen i koden at jeg lavede det kunststykke.
Nu er det meget små data og små ressourcer der bliver brugt i windows-appl., men jeg var ikke helt tryg ved at have variablen lokalt. Så en lidt bøvlet vej til at undgå dette kunne måske være at: 1) bruge dit sidste forslag 2) lave label1 usynlig 3) hente variablen ind derfra.
Der er ingenting i vejen med at have variablen lokalt! Men, aldrig gør en kontrol usynlig, for at have en variabel der. Det er der noget galt i!
En lokal privat variabel er måden at gøre det på, der er ikke nogen alternativer. Der er mange der vælger at pakke den ind i en property, men da vil den stadig ligge i en lokal variabel.
Sådan her, ville det se ud, hvis jeg skulle gøre det.
public partial class FormEditModel : Form { public FormEditModel() { InitializeComponent(); }
public FormEditModel(int tal) : this() { this.Tal = tal; }
private int _tal;
//Her opretter jeg en property. Denne kan også være //protected, internal, protected internal eller private. //Når propertien sættes, kommer tallet automatisk ind i labelen. public int Tal { get { return _tal; } set { _tal = value; this.label1.Text = value.ToString(); } } }
Fra den første form, kan du nu gøre det på 2 måder. Enten: private void buttonEdit_Click(object sender, EventArgs e) { int etTal = 33; FormEditModel formeditmodel = new FormEditModel(etTal); formeditmodel.ShowDialog(); }
eller private void buttonEdit_Click(object sender, EventArgs e) { int etTal = 33; FormEditModel formeditmodel = new FormEditModel(); formeditmodel.Tal = etTal; formeditmodel.ShowDialog(); }
Grunden til jeg tænkte som jeg at variablen var global skal ses af #5, hvor variablen er "global" i hele windows-formen.
Men jeg er med på hvad du mener, takket være sidste forklaring ;)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.