Avatar billede _et Praktikant
02. september 2004 - 22:53 Der er 19 kommentarer og
1 løsning

Hjælp til "transport" af data fra form til form og tilbage

Jeg har en form med et arraylist. Denne form åbner form2. I  form2 skal der så rettes i arraylisten

Hvordan gøres det?

kan jeg i form2 få direkte adgang til arraylisten?
Avatar billede m_els Nybegynder
02. september 2004 - 23:51 #1
ja det kan du godt...det du gør er at i form1 sætter du din arraylist som public static.

Og herefter kan du kalde den i form2: form1.arraylistnavn
Avatar billede dna Nybegynder
03. september 2004 - 06:49 #2
form2 skal vel have en reference med til form1??
Avatar billede finger Nybegynder
03. september 2004 - 08:23 #3
du kan evt give en reference til form1 med i forms2's constructor.
Avatar billede _et Praktikant
03. september 2004 - 14:40 #4
Hvordan laves en reference?
Avatar billede arne_v Ekspert
03. september 2004 - 14:45 #5
I det konkrete tilfælde kan du sikkert bruge this.
Avatar billede finger Nybegynder
03. september 2004 - 14:46 #6
i form1:

form2 minForm2 = new form2(this);

i form2:

public class form2 : System.Forms.Form
{
private refTilForm;

  public form2(form minReference)
  {
      refTilForm = minReference;
  }
}
Avatar billede _et Praktikant
03. september 2004 - 14:48 #7
kom lige med lidt kode. jeg ved ikke helt hvad jeg skal referer til og hvordan
Avatar billede _et Praktikant
03. september 2004 - 14:52 #8
nåå
Avatar billede _et Praktikant
03. september 2004 - 15:06 #9
Jeg kan ikke helt få det til at virke..

Kan i se hvad der er galt?

...
public ArrayList V_KundeListe = new ArrayList();
...
private void knp_Ret_Click(object sender, EventArgs e)
{
    Ret_Interface Ret_I = new Ret_Interface(this);
    Ret_I.Show();
}
...
Anden Form:
...
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace Kundelist
{
    public class Ret_Interface : System.Windows.Forms.Form
    {
        private Form Ref_til_Interface;

        private System.ComponentModel.Container components = null;

        public Ret_Interface(Form MinRef)
        {
            Ref_til_Interface = MinRef;
            InitializeComponent();
        }

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code

        private void InitializeComponent()
        {

            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Name = "Ret_Interface";
            this.Text = "Ret Kunde";

        }
        #endregion

        private void test()
        {
        }
    }
}
Avatar billede _et Praktikant
03. september 2004 - 15:09 #10
Jeg kan godt få fat i form1, men variablen kan jeg ikke se -

Jeg har prøvet:
        private void test()
        {
            Ref_til_Interface. (Men så findes arraylist ikke?)
        }
Avatar billede finger Nybegynder
03. september 2004 - 15:14 #11
den vil findes runtime. grunden til den ikke er der i intellisense er at di reference er baseret på "Form" ikke "Form1".

private Form1 Ref_til_Interface;

        private System.ComponentModel.Container components = null;

        public Ret_Interface(Form1 MinRef)
        {
            Ref_til_Interface = MinRef;
            InitializeComponent();
        }
Avatar billede _et Praktikant
03. september 2004 - 15:26 #12
Nu har jeg rettet den som du skriver. Men den findes stadig ikke i intellesense, burde den ikke det?

Min første form hedder Interface.


    public class Ret_Interface : System.Windows.Forms.Form
    {
        private Interface Ref_til_Interface;

        private System.ComponentModel.Container components = null;

        public Ret_Interface(Interface MinRef)
        {
            Ref_til_Interface = MinRef;
            InitializeComponent();
        }
Avatar billede finger Nybegynder
03. september 2004 - 15:31 #13
lig akkurat Interface er ikke et så heldigt navn. det er vist et reserveret ord i .NET.
prøv at kalde den noget andet og rekompiler
Avatar billede _et Praktikant
03. september 2004 - 15:37 #14
Jeg har løst det på en anden måde, istedet for at sende hele formen

    Ret_Interface Ret_I = new Ret_Interface(this);

Så sender jeg bare Arraylisten i stedet.

    Ret_Interface Ret_I = new Ret_Interface(V_KundeListe);

Så resten med referencen fint.

Men hvad så hvis jeg retter i noget data, er det så i Interface det bliver rettet eller Ret_Interface, eller begge steder?
Avatar billede finger Nybegynder
03. september 2004 - 15:41 #15
Da det er en reference til et object er det instansen der bliver opdateret. dvs den bliver opdateret som du ønsker.
Læs evt noget om Object orienteret programmering.
Avatar billede _et Praktikant
03. september 2004 - 15:47 #16
Jeg prøver - men det er hårdt bare at læse fra A-Z, så jeg læser når jeg har brug for noget

Svarer en referance til en pointer i c++
Avatar billede finger Nybegynder
03. september 2004 - 15:50 #17
jeps
Avatar billede finger Nybegynder
03. september 2004 - 15:52 #18
men i modsætning til c++ kan man ikke i C# have en pointer til en pointer.
desuden sørger .NEt selv for at rydde op i gamle "pointers" (referencer) når de ike er i brug mere.
En undtagelse til dette er dog referencer til åbne filer o.l.
Avatar billede arcanex Nybegynder
03. september 2004 - 16:01 #19
_et tag evt, et kig på dette spg. Jeg har selv haft næsten samme problem, bare med en label jeg ville ændre.

http://www.eksperten.dk/spm/531838
Avatar billede _et Praktikant
03. september 2004 - 16:02 #20
Cool, nu virker det.

Egentlig burde jeg vide at jeg kunne sende data på den måde.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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