24. november 2005 - 13:01
Der er
43 kommentarer og 1 løsning
opdaterer array i form1 fra form2
Jeg har et array på min form1 der indeholder nogle værdier. Disse værdier indsættes i textbokse på form2. Herfra vil jeg gerne kunne opdatere mit array på form1, således at hvis jeg lukker form2 og åbner den igen vil de rettede værdier nu stå i mine textbokse. Her er hvad jeg gør når jeg smider værdierne ind i form2: Form2 form2 = new Form2(this); form2.textBox1.Text = behold[0,0].ToString(); form2.textBox2.Text = behold[1, 0].ToString(); form2.textBox3.Text = behold[2, 0].ToString(); form2.textBox4.Text = behold[3, 0].ToString(); form2.textBox5.Text = behold[4, 0].ToString(); form2.textBox6.Text = behold[5, 0].ToString(); form2.textBox7.Text = behold[6, 0].ToString(); form2.textBox8.Text = behold[7, 0].ToString(); form2.textBox9.Text = behold[8, 0].ToString(); form2.textBox10.Text = behold[9, 0].ToString(); form2.Show(); Giv gerne et eksempel på hvordan jeg herefter gør i form2 for at opdatere form1. Med Venlig Hilsen Suhr
Annonceindlæg fra SoftwareOne
24. november 2005 - 13:05
#1
ligger behold[] som en variabel i form1 ?
24. november 2005 - 13:22
#2
Ja det er defineret public double[,] behold = new double[10,2]; øverst i form1
24. november 2005 - 13:29
#3
du sender Form1 med som this når du opretter en instans af Form2. Den variabel som du får ind i konstruktøren i Form2 kan du bruger på denne måde: du har noget i denne stil public Form2(Form owner) { //typecast owner. Form1 form1 = (Form1)owner; //nu kan du bruger behold i hele form2 form1.Behold[] osv }
24. november 2005 - 13:29
#4
håber det giver minimalt mening
24. november 2005 - 13:30
#5
du sender en reference til form1 med til form2 i og med du bruger Form2 form2 = new Form2(this);
24. november 2005 - 13:41
#6
Umiddelbart er det så kun oppe i konstruktøren at jeg har tilgang til form1 arrayet.
24. november 2005 - 13:48
#7
sæt private Form1 form1 i toppen af din side og skift Form1 form1 = (Form1)owner; ud med form1 = (Form1)owner; så kan du bruge den på hele siden.
24. november 2005 - 13:55
#8
Nu har jeg tilgang til arrayet på min form 2, men hvis jeg laver en: form1.behold[0, 1] = Convert.ToDouble(textBox1.Text); opdateres arrayet ikke på form1.
24. november 2005 - 13:57
#9
form1.behold[0, 1] = Convert.ToDouble(textBox1.Text); er self sat på textBox1_TextChanged
24. november 2005 - 14:08
#10
er det ikke fordi du skal bruge double.Parse() ? i så fald vil din linje skulle være: form1.behold[0,1] = double.Parse(textBox1.Text.ToString());
24. november 2005 - 14:11
#11
double.Parse() hjælper ikke på situationen. Det virker som om at der skabes en instans af form1, og denne opdateres men ikke den originale form1.
24. november 2005 - 14:14
#12
du skal kalde invalidate på form1.
24. november 2005 - 14:18
#13
Hvor kaldes den ?? Jeg er meget grøn inden for c#
24. november 2005 - 14:22
#14
prøv at kalde form1.Invalidate(); npr du har ændret værdien i din tekst box. eller form1.Refresh();
24. november 2005 - 14:25
#15
Det er stadig det samme, når jeg lukker min form2 efter at have rettet værdien, og herfeter åbner den igen fra form1 er værdien den samme som før jeg rettede. Så jeg har ikke fået opdateret mit array.
24. november 2005 - 14:27
#16
har du en funktion som du bruger til at indsætte værdier i dine tekst bokse ?
24. november 2005 - 14:28
#17
ja på form1-form_load : for (int i = 0; i < 10; i++) { behold[i,0] = 1; behold[i,1] = 15; } men jeg reloader jo ikke min form1, så det burde ikke have indvirkning på dette
24. november 2005 - 14:30
#18
prøv lige at kopier hele din kildekode herind. tror måske at du har en lille fejl.
24. november 2005 - 14:32
#19
form1: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication2 { public partial class Form1 : Form { public double[,] behold = new double[10,2]; double[,] coins = { {0.25,3,0}, {0.50,3,0}, {1,3,0}, {2,2,0}, {5,1,0}, {10,3,0}, {20,3,0} }; double[,] indkastet = { {0.25,0}, {0.50,0}, {1,0}, {2,0}, {5,0}, {10,0}, {20,0} }; double indkast, rest, udbetal; public Form1() { InitializeComponent(); } private void retursystem() { for (int i = 6; i >= 0; i--) { if (rest >= coins[i, 0] && coins[i, 1] == 0) { if (i == 0) { label7.Text = "Indkast kun lige penge"; break; } else { i--; } } while (rest >= coins[i, 0] && coins[i,1] > 0) { rest = rest - coins[i, 0]; coins[i, 2] = coins[i, 2] + 1; if (coins[i, 1] > 0) { double temp = coins[i, 0] * coins[i, 2]; udbetal = udbetal + temp; label6.Text = udbetal.ToString(); if (coins[i, 2] > 0) { coins[i, 1] = coins[i, 1] - coins[i, 2]; coins[i, 2] = 0; } } else { i--; //udbetal = 0; } } } } private void opdater_kasse() { for (int i=0; i <= 6; i++) { coins[i, 1] = coins[i,1] + indkastet[i, 1]; indkastet[i, 1] = 0; } } private void testing() { for(int i=0;i<=6;i++) { MessageBox.Show(coins[i,0].ToString() + "kr - " + coins[i,1].ToString() + " tilbage"); } } private void knaptryk(int a, string b) { if (behold[a,0] > 0) { label1.Text = "Varen koster " + behold[a,1].ToString() + " kr"; label2.Text = "Indkast venligst "+ behold[a,1].ToString() + " kr"; if (indkast > 0) { if (indkast >= behold[a, 1]) { behold[a, 0] = behold[a, 0] - 1; //MessageBox.Show(behold[a,0].ToString()); rest = indkast - behold[a, 1]; label2.Text = b; if (rest > 0) { // udbetal rest retursystem(); if (udbetal == 0) { label4.Text = "Det er desværre ikke muligt at give penge tilbage"; } else { label4.Text = udbetal.ToString() + " kr retur"; } udbetal = 0.0; rest = 0.0; } } else { rest = behold[a, 1] - indkast; label2.Text = "Indkast yderligere " + rest; } button1.Enabled = false; button2.Enabled = false; button3.Enabled = false; button4.Enabled = false; button5.Enabled = false; button6.Enabled = false; button7.Enabled = false; button8.Enabled = false; button9.Enabled = false; button10.Enabled = false; comboBox1.Enabled = false; timer1.Enabled = true; } //læg penge i kassen (opdater coins) opdater_kasse(); } else { label2.Text = "Der er ikke flere tilbage"; } } private void Form1_Load(object sender, EventArgs e) { label1.Text = "Iskold ColaCola"; label2.Text = "15 kr"; for (int i = 0; i < 10; i++) { behold[i,0] = 1; behold[i,1] = 15; } } private void button1_Click(object sender, EventArgs e) { knaptryk(0,button1.Text); } private void button2_Click(object sender, EventArgs e) { knaptryk(1,button2.Text); } private void button3_Click(object sender, EventArgs e) { knaptryk(2,button3.Text); } private void button4_Click(object sender, EventArgs e) { knaptryk(3,button4.Text); } private void button5_Click(object sender, EventArgs e) { knaptryk(4,button5.Text); } private void button6_Click(object sender, EventArgs e) { knaptryk(5,button6.Text); } private void button7_Click(object sender, EventArgs e) { knaptryk(6,button7.Text); } private void button8_Click(object sender, EventArgs e) { knaptryk(7,button8.Text); } private void button9_Click(object sender, EventArgs e) { knaptryk(8,button9.Text); } private void button10_Click(object sender, EventArgs e) { knaptryk(9,button10.Text); } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { indkast = Convert.ToDouble(comboBox1.SelectedItem) + indkast; indkastet[comboBox1.SelectedIndex, 1] = indkastet[comboBox1.SelectedIndex, 1] + 1; label3.Text = "Der er nu indkastet " + indkast.ToString() + " kr"; timer2.Enabled = true; } private void timer1_Tick(object sender, EventArgs e) { indkast = 0; button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; button4.Enabled = true; button5.Enabled = true; button6.Enabled = true; button7.Enabled = true; button8.Enabled = true; button9.Enabled = true; button10.Enabled = true; comboBox1.Enabled = true; label1.Text = "Iskold ColaCola"; label2.Text = "15 kr"; label3.Text = ""; label4.Text = ""; timer1.Enabled = false; } private void timer2_Tick(object sender, EventArgs e) { comboBox1.Text = "Indkast mønter"; timer2.Enabled = false; } private void button11_Click_1(object sender, EventArgs e) { label3.Text = ""; label4.Text = indkast.ToString() + " kr tilbage"; indkast = 0; timer1.Enabled = true; } private void button12_Click(object sender, EventArgs e) { Form2 form2 = new Form2(this); form2.textBox1.Text = behold[0,0].ToString(); form2.textBox2.Text = behold[1, 0].ToString(); form2.textBox3.Text = behold[2, 0].ToString(); form2.textBox4.Text = behold[3, 0].ToString(); form2.textBox5.Text = behold[4, 0].ToString(); form2.textBox6.Text = behold[5, 0].ToString(); form2.textBox7.Text = behold[6, 0].ToString(); form2.textBox8.Text = behold[7, 0].ToString(); form2.textBox9.Text = behold[8, 0].ToString(); form2.textBox10.Text = behold[9, 0].ToString(); form2.Show(); } } } form2: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication2 { public partial class Form2 : Form { private Form1 form1; public Form2(Form owner) { form1 = (Form1)owner; //form1.behold[0, 1] = Convert.ToDouble(textBox1.Text); InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { //TextBox[] textBox = new TextBox[10]; //textBox[1] = textBox1; //textBox[1].Text = "hejsa"; } private void textBox1_TextChanged(object sender, EventArgs e) { //Form1 form1 = new Form1(); //form1.behold[0, 1] = Convert.ToDouble(textBox1.Text); form1.behold[0, 1] = double.Parse(textBox1.Text.ToString()); form1.Refresh(); MessageBox.Show(form1.behold[0, 1].ToString()); } } }
24. november 2005 - 14:39
#20
i MessageBox.Show(form1.behold[0, 1].ToString()); er værdien så ændret ?
24. november 2005 - 14:39
#21
ja det er den
24. november 2005 - 14:41
#22
ok hvor er det at værdierne fra behold vises ?
24. november 2005 - 14:44
#23
ved et knapklik på form1 indsættes værdierne i teksbokse på form2, og form2 vises.
24. november 2005 - 14:46
#24
ja det har jeg forstået men vises de ikke på form1 noget sted ?
24. november 2005 - 14:47
#25
Jeg har lige prøvet at lave udskrivningen i form2, og dette går fint. Men jeg kan stadig ikke skrive til arrayet, altså kun læse.
24. november 2005 - 14:48
#26
nej de vises ikke på form1 dog testes der på om indholdet er større end 0
24. november 2005 - 14:51
#27
hmm prøv at lave behold til et static array.
24. november 2005 - 14:56
#28
så kan jeg ikke kalde den i form2
24. november 2005 - 14:58
#29
hmmm drop det med static. er ved at løbe tør for ideer.
24. november 2005 - 15:06
#30
Takker da for din tid, og lader spørgsmålet stå.
24. november 2005 - 15:09
#31
prøv lige at se om din form load bliver kaldt når du lukker form2 og trykker på knappen igen.
24. november 2005 - 15:22
#32
form load på form1 bliver ikke kørt.
24. november 2005 - 15:25
#33
og den bliver på intet tidspunkt kaldt kaldt inden du igen trykker button 12?
24. november 2005 - 17:35
#34
Brug din debugger, så finder du nok fejlen..... kan ikke lige umildbart se noget..... er nok en lille dum fejl et sted..... men via debuggenren kan du se om dataen ren faktisk også bliver sat.... // ouT
25. november 2005 - 08:12
#35
Tjae data bliver sat, det blir bare sat på instansen af form1, og ikke på originalen.
25. november 2005 - 08:13
#36
du har kun de 2 forms ?
25. november 2005 - 08:23
#37
jeps der er kun de 2 forms.
25. november 2005 - 08:29
#38
I form1 kunne du lave en UpdateUI funktion public void UpdateUI() { button1.PerformClick(); button2.PerformClick(); button3.PerformClick(); button4.PerformClick(); button5.PerformClick(); button6.PerformClick(); button7.PerformClick(); button8.PerformClick(); button9.PerformClick(); button10.PerformClick(); } Den kalder du så fra form2, når du har opdateret arrayet
25. november 2005 - 08:29
#39
har du noget sted på form1 hvor du viser værdierne ?
25. november 2005 - 09:09
#40
nej jeg har ikke lige noget sted der udskriver arrayet på form1, dog blir der tjekket på om værdien er større end 0. Men jeg kan hurtigt sætte et label til at udskrive den første værdi, den som jeg tester på.
25. november 2005 - 09:42
#41
dr_chaos smid et svar, private Form1 form1 skulle lige ændres til public så kørte det. Tak for hjælpen.
25. november 2005 - 09:59
#42
svar :)
25. november 2005 - 11:51
#43
det giver da ingen mening..... så burde du da have fået en compile fejl eller andet... // ouT
25. november 2005 - 12:12
#44
nej fordi at han parsede en instans af form1 til en private form1 i Form2. På den måde kunne han ændre data i form1 men det blev aldrig ført ned til Form1 instansen. p.ga. private. så galdt ændringerne kun i Form2.
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.