Avatar billede lasserasch Juniormester
08. juni 2006 - 22:44 Der er 7 kommentarer og
1 løsning

Public Variabel i .net med C#

Hejsa.

Sidder med et lille PDA program, som jeg har fået bikset sammen i visual Studio! Består af 2 forms.

Programmet har som sådan ingen funktion, er kun lavet for at jeg kan lære lidt om programmeringen i Visual Studio med en C# kode.

I går aftes fandt jeg endelig ud af hvordan man åbner en form fra en anden, idag har jeg så sat mig for at finde ud af hvordan man arbejder med en variabel mellem de 2 forms!

Dvs. Jeg har på første form en label1. Her udover har jeg en knap der åbner form2.

I form2 har jeg en textbox og en OK knap! Jeg ville gerne kunne skrive noget tekst i textboksen og klikke på OK! Herefter skulle form2 så lukke sig igen og form1 blev så vist igen! Men nu ville jeg gerne at label1.text var = den tekst jeg netop har indtastet i form2.

Så jeg har vel brug for at oprette en eller anden form for public variabel. Hvor skal den oprettes?

I form1 eller form2? Og hvordan kan man kalde værdien af denne variabel fra de forskellige forms?

Findes der en .net haj herinde, som kunne give et meget simpelt eksempel på det?

Jeg er VB 6 mand, og ikke nybegynder i programmering overhovedet. Men har aldrig skrevet i C# eller .net for den sags skyld!

Håber virkelig en kan hjælpe!


/Lasserasch
Avatar billede arne_v Ekspert
08. juni 2006 - 22:50 #1
Form1:

Form2 f2 = new Form2(this);
...
public void setLabel1(string s)
{
    label1.Text = s;
}

Form2:

private Form1 f1;
public Form2(Form1 f1)
{
    this.f1 = f1;
}
...
f1.setLabel1(textbox1.Text);
Avatar billede arne_v Ekspert
08. juni 2006 - 22:51 #2
et gammelt eksempel som dog gaar den anden vej:

using System;
using System.Drawing;
using System.Windows.Forms;

namespace E
{
    public class MainForm : Form
    {
        private Button button1;
        private TextBox textBox1;
        public MainForm()
        {
            InitializeComponent();
        }
        private void InitializeComponent()
        {
            textBox1 = new TextBox();
            button1 = new Button();
            SuspendLayout();
            textBox1.Multiline = true;
            textBox1.Location = new Point(50, 50);
            textBox1.Size = new Size(200, 50);
            button1.Location = new Point(50, 150);
            button1.Size = new Size(200, 50);
            button1.Text = "Åben sub form";
            button1.Click += new EventHandler(Button1Click);
            ClientSize = new Size(300, 250);
            Controls.Add(button1);
            Controls.Add(textBox1);
            Text = "Main Form";
            ResumeLayout(false);
        }
        public string TB
        {
            get
            {
                return textBox1.Text;
            }
        }
        void Button1Click(object sender, System.EventArgs e)
        {
            SubForm sf = new SubForm(this);
            sf.ShowDialog();
        }
    }
    public class SubForm : Form
    {
        private MainForm mf;
        private TextBox textBox1;
        public SubForm(MainForm mf)
        {
            this.mf = mf;
            InitializeComponent();
        }
        private void InitializeComponent()
        {
            textBox1 = new TextBox();
            SuspendLayout();
            textBox1.Multiline = true;
            textBox1.Location = new Point(50, 50);
            textBox1.Size = new Size(200, 50);
            textBox1.Text = mf.TB;
            ClientSize = new Size(300, 150);
            Controls.Add(textBox1);
            Text = "Sub Form";
            ResumeLayout(false);
        }
    }
    public class TestClass
    {
        [STAThread]
        public static void Main(string[] args)
        {
            Application.Run(new MainForm());
        }
    }
}
Avatar billede lasserasch Juniormester
08. juni 2006 - 22:55 #3
Hey Arne! Altid på pletten! Kan du prøve at forklare første eksempel du giver?
Hvad de forskellige linier helt præcist gør!

/LAsse
Avatar billede arne_v Ekspert
08. juni 2006 - 23:03 #4
vi sender en reference til Form1 med over i Form2's constructor

Form2's constructor gemmer den reference

Form1 har en public metode til at goere det du vil

Form2 kan nu kalde en metode via Form1 reference
Avatar billede lasserasch Juniormester
08. juni 2006 - 23:32 #5
Jeg er ked af det, men jeg har stadig ikke helt forstået det.Koden, som den står i mine 2 forms pt. har jeg skrevet herunder.

I form1 har jeg en label1 som skal få værdien af det jeg skriver i tekst boksen på form2.

Form2 har jeg så tekstboksen ved navn textbox1

Her form 1, som den ser ud pt.

-------------

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DeviceApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 Inputform = new Form2();
            Inputform.Show();
        }
    }
}

------------



Og her form2.


-------------


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DeviceApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
}

-------------------


Kan du sætte det ind, så det burde virke? Så har jeg måske lidt at holde mig til! Er lidt nemmere tror jeg! Hvis jeg skal forstå det helt rigtigt!

/Lasse
Avatar billede arne_v Ekspert
09. juni 2006 - 00:45 #6
utestet:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DeviceApplication1
{
    public partial class Form1 : Form
    {
        private Label label1;
        public void SetLabel1(string s)
        {
            label1.Text = s;
        }
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 Inputform = new Form2(this);
            Inputform.Show();
        }
    }
}

------------

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DeviceApplication1
{
    public partial class Form2 : Form
    {
        private Form1 f1;
        private TextBox textbox1;
        public Form2(Form1 f1)
        {
            this.f1 = f1;
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            f1.SetLabel1(textbox1.Text);
            Close();
        }
    }
}
Avatar billede lasserasch Juniormester
09. juni 2006 - 00:52 #7
Jeps, bortset fra en enkelt fejl så var den der! Takker! Vil jeg kigge på nu, og se om jeg kan forstå hvad det er der sker! Send lige svar for points ik!

/Lasse
Avatar billede arne_v Ekspert
09. juni 2006 - 00:54 #8
svar
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB