Avatar billede SvenneStrande Nybegynder
18. december 2009 - 01:27 Der er 9 kommentarer

Akut! Problem med Textbox på tværs af klasser.

Jeg sidder lige pt og har en rigtig trist problem i min Windows Forms Application.
Jeg har en Form1 klasse som starter sådan her:

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

Der er så oprettet en masse ting i, blandt andet nogle text boxs.

Jeg har ligeledes nogle forskellige klasser, og det er så her mit store problem kommer.

Hvis jeg har en customer klasse, hvor jeg har en variable "Customer_name" som jeg gerne vil have skrevet i "Customer_name_textBox" som ligger i Form1, hvordan gør jeg så dette?

Jeg har forsøgt mig i stor stil med:
"Form1 mainform = new Form1();"
//denne skrives i den respektive klasse (evt. en Customer klasse)

&

"Klassenavn Klasse_a = new Klassenavn()"
//denne skrives i Form1 klassen.

Jeg kan simpelthen ikke få min Customer klasse til at skrive, og vise en tekst i de Textboxe som er oprettet i Form1.

Jeg håber virkelig på noget hurtig hjælp da det som sagt, er lidt akut!
Avatar billede SvenneStrande Nybegynder
18. december 2009 - 01:30 #1
Skal måske lige siges at den måde jeg har forsøgt mig på er ved at skrive følgende:

mainform.textBox_navn.Text = 'variable'

men dette simpelthen ikke virker som ønsket, og der kommer ikke til at stå noget i den pågældene textBox.
Avatar billede SvenneStrande Nybegynder
18. december 2009 - 01:47 #2
Lige endnu en lille ting.

En metode jeg har i Form1 klassen:

private void GetCus_b3_t1_Click(object sender, EventArgs e)
      {
        Customer customer1 = new Customer();
        int C_id = Convert.ToInt32(CusID_textBox_t1.Text);
        customer1.GetCustomerToBox(C_id);
      }

Den går altså ind og finder ud af hvad der står i den pågældende textBox (ved button tryk) og så kalder den en metode fra klassen "Customer" som hedder "GetCustomerToBox".

Det der så sker inde i metoden i "Customer" er at jeg henter kunde informationen fra en database, og vil så fra metoden i "Customer" klassen, skrive den information jeg har trukket ud af databasen, i nogle tekstbox, som er oprettet i Form1.

Håber virkelig der er nogle der ude der kan hjælpe mig!
Avatar billede Syska Mester
18. december 2009 - 02:03 #3
I din Form1 ... har du ikke oprettet dine TextBox som public ... ret sikker på de som standard er private ...

Dvs:
Form1 form = new Form1();

form1.DinTextBox ikke er tilgændelig fordi den er private i din Form1 klasse.

Løsning
lave dine textbox's public
eller
lade din constructor tage en parameter Customer ... og så sætte de forskellige variable din Load eventuen på din Form1.

Håber du forstår.
Avatar billede SvenneStrande Nybegynder
18. december 2009 - 02:10 #4
Jeg har været inde under de textBoxs som skal bruges af andre klasser til "public".

Problemet ligger lidt, hvis jeg i en anden klasse forsøger at smide noget ind i den pågældende textbox fra Form1, så kan jeg også godt hente en værdi ud af den (eks. MessageBox.Show()).

Altså tror min Customer klasse at der rent faktisk er en værdi i den pågældende textbox.

Ligeledes kan min Customer klasse ikke "se" at der står noget i den rigtige textbox, da værdien jeg evt. har indtastet, ikke kan ses i Customer Klasse.
Avatar billede Syska Mester
18. december 2009 - 02:21 #5
Du bliver nødt til at poste din kode ... for nogen af dine forklaringer på hvad der sker ... og hvad du tror der sker hænger ikke helt sammen ...

Et gæt et tågen ville være at du måske ikke retter i de rigtige reference af din Form1 og din Customer, men igen ... gæt.

// ouT
Avatar billede SvenneStrande Nybegynder
18. december 2009 - 02:46 #6
Okay, smider det lige afsted:

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

      Customer customer;
     
      ...
      private void GetCus_b3_t1_Click(object sender, EventArgs e)
      {
        Customer customer = new Customer();
        customer.GetCustomerToBox(Convert.ToInt32(CusID_textBox_t1.Text));
      ...
      }
  }

---

public class Customer
      {
        Form1 mainform = new Form1();
        public ArrayList Cust_info = new ArrayList();
        ...
public void GetCustomerToBox(int Cust_id)
        {
           
            if (mainform.CusID_textBox_t1.Text != "")
            {
              GetCustomer(Cust_id);
              int iasd = Cust_info.Count;
              if (iasd != 0)
              {
                  CustomerInfo CUSI = (CustomerInfo)Cust_info[0];
                  string C_NAME = CUSI.getCNAME();
                  string C_ADDRESS = CUSI.getCADDRESS();
                  int C_PH1 = CUSI.getCPH1();
                  int C_PH2 = CUSI.getCPH2();
                  string C_EMAIL = CUSI.getCEMAIL();
                  int C_SB_ID = CUSI.getCSB();

                  mainform.CusID_textBox_t1.ReadOnly = true;
                  mainform.Cname_textBox_t1.Text = C_NAME;
                  mainform.Caddress_textBox_t1.Text = CUSI.getCADDRESS();
                  mainform.Cphone1_textBox_t1.Text = Convert.ToString(C_PH1);
                  mainform.Cphone2_textBox_t1.Text = Convert.ToString(C_PH2);
                  mainform.Cemail_textBox_t1.Text = C_EMAIL;
                  mainform.SB_comboBox_t1.SelectedIndex = C_SB_ID;   
                   
              }
              else
              {
                  message1.NoCustWithThatIDError();
              }

            }

            ...

Hvis du vil have koden til hvad jeg gør ved "GetCustomer(Cust_id);" siger du bare til, men egentlig henter jeg kunde information ud af en database, smider det ind i et objekt, og smider det objekt ind i en arraylist.
Avatar billede Syska Mester
18. december 2009 - 02:56 #7
Okay, nu har jeg set det her ... nu er jeg lidt mere med.

Men jeg kan ikke helt gennemskue hvad det er du siger dit program ikke gør ...

// ouT
Avatar billede SvenneStrande Nybegynder
18. december 2009 - 03:02 #8
Programmet kan ikke skrive noget i de textbox som jeg beder den om i Customer klassen.
Altså følgende virker ikke:

                mainform.CusID_textBox_t1.ReadOnly = true;
                  mainform.Cname_textBox_t1.Text = C_NAME;
                  mainform.Caddress_textBox_t1.Text = CUSI.getCADDRESS();
                  mainform.Cphone1_textBox_t1.Text = Convert.ToString(C_PH1);
                  mainform.Cphone2_textBox_t1.Text = Convert.ToString(C_PH2);
                  mainform.Cemail_textBox_t1.Text = C_EMAIL;
                  mainform.SB_comboBox_t1.SelectedIndex = C_SB_ID;   

Når jeg har loadet programmet (debug mode) så kan jeg fint hente kunde ID over i Customer klassen, og derfra burde alt køre som smurt, og jeg får heller ingen fejl.

Alle kunde informationer er gemt, men de bliver ikke skrevet i de respektive textboxs.

De textbox som mit program viser, forbliver med andre ord blanke.
Avatar billede Syska Mester
18. december 2009 - 03:27 #9
Problemer er at du allerede er på Form1 ... som jeg forventer du vil opdatere ... men i Customer opretter du en ny Form1 ... altså er det ikke samme Form1 du skriver dine data i.

Der er flere løsninger. Nemmeste for mig at beskrive er følgende.

Ændre din funktions header til:
public void GetCustomerToBox(Form1 form, int Cust_id)

og brug den i funktionen ... i stedet for at oprette en ny.

I din første Form1 gør du således:
customer.GetCustomerToBox(this, Convert.ToInt32(CusID_textBox_t1.Text));
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