Avatar billede GoofyDK Nybegynder
18. november 2010 - 18:55 Der er 14 kommentarer og
1 løsning

Skrive i textbox fra en anden class

Hej.

Jeg har kigget lidt rundt på google og eksperten, og afprøvet nogle af de forslag der er. Men intet har ramt korrekt.

Jeg har min:

    public partial class Form1 : Form
    {
    blabla.
    }
og jeg har min anden:

    public partial class SERVER : Form1
    {
    do this
    }

Min SERVER class er inde i Form1 class.
Hvis jeg bruger denne kode i class Form1:

textBox1.Text += "Test\r\n";

Så virker den også fint, og skriver til min textbox. Men skriver jeg den i class SERVER, så kommer der intet frem. Jeg får ingen fejl, men jeg ved ikke hvad jeg umiddelbart skal gøre.

Jeg har prøvet at lave:

        public void SkrivTilTextbox(string data)
        {
            textBox1.Text += data + "\r\n";
        }
Lige før min class SERVER.

Så den ser sådan ud:

        public void SkrivTilTextbox(string data)
        {
            textBox1.Text += data + "\r\n";
        }
        public partial class SERVER : Form1
        {

Og så bruge SkrivTilTextbox("test"); Men det hjalp heller ikke. Nogen som kan hjælpe mig videre?
Avatar billede heinzdmx Nybegynder
18. november 2010 - 19:25 #1
Du har gjort så SERVER arver fra Form1 metoden.

Men så skal du jo også sørge for at kalde den i stedet for din Form1.

Din SERVER indholder alle elementer som Form1 gør. MEN de hænger ikke sammen. En ændring i SERVER ændrer ikke noget i Form1.
Avatar billede heinzdmx Nybegynder
18. november 2010 - 19:26 #2
*(form1 klassen) skal der stå i stedet for (Form1 metoden) på første linje
Avatar billede GoofyDK Nybegynder
18. november 2010 - 19:32 #3
Ændre jeg den til Form, får jeg denne fejl:

Cannot access a non-static member of outer type 'Nielsen.Form1' via nested type 'Nielsen.Form1.SERVER'

Hvad skal der så laves om på?
Avatar billede heinzdmx Nybegynder
18. november 2010 - 19:59 #4
Det kommer an på hvad svaret er på følgende:
- Hvorfor er det du prøver at ændre teksten fra en anden klasse?
- Hvordan har du tænkt dig at klassen skal bruge det?

Du kunne lave følgende eksempel:
///
public partial class Form1 : Form
{
  String hej = "Hej med dig";
}

public partial class SERVER
{
  public SERVER(Form parent)
  {
        parent.hej = "hej eksperten";
  }
}
///
Avatar billede GoofyDK Nybegynder
18. november 2010 - 20:16 #5
Det er fordi min textbox er i en anden class, og SERVER som er for sig selv.

Men det er data fra SERVER, som skal skrives i textboxen fra den anden class.
Avatar billede heinzdmx Nybegynder
18. november 2010 - 20:47 #6
Enten skal SERVER kende til objektet Form1

Eller også skal Form1 hente data fra SERVER og så bruge det i en metode til at sætte det
Avatar billede GoofyDK Nybegynder
18. november 2010 - 20:50 #7
Kan du komme med nogen kode eksempler, for jeg får den fejl, hvis jeg kalder den for det der.
Avatar billede bkp Nybegynder
18. november 2010 - 22:17 #8
Hvad med dette forslag (skrevet mer eller mindre i seudo.

class Form1 {
  Public TextBox Mytext = new TextBox();
}

class server {
  private Form1 _form1;

  private void StartForm1() {
      _form1 = new Form1();
      _form1.Show();
  }

  private void SetForm1Text(string text) {
      _form1.MyText.Text = text;
  }
}


Det vil ikke virke hvis du prøver at kalde Form1 direkte, du skal kalde den instans som kører, det er derfor jeg gemmer den kørende instans i _form1 så du senere kan tilgå dennes objekter.

Hvis man kalder Form1 så kalder man selve klassen og ikke den kørende instans.

Jeg ved ikke om det er problemet du har, men det kunne jeg forestille mig.
Avatar billede GoofyDK Nybegynder
18. november 2010 - 22:24 #9
Jeg tror det er det som er problemet.

    public partial class Form1 : Form
    {
    do this
    }

    public partial class SERVER : Form1
    {
    do this
    }

Men det er forkert kan jeg forstå? - men hvis jeg ændre i det, så får jeg en masse fejl meddelser.

Hvordan bliver det så tilpasset?
Avatar billede heinzdmx Nybegynder
18. november 2010 - 23:03 #10
Når du skriver class SERVER : Form1

Så gør du det at SERVER arver Form1

Dvs. at du kopiere alt der ligger i Form1 + de ændringer der er i SERVER. Det er IKKE hvad du ønsker, så vidt jeg kan se ud fra hvad du skriver.

Du bliver nødt til at beslutte dig for hvad du vil. Der skal være en af dine klasser der kender den anden klasse.

Enten skal din Form1 kende til Server, eller også skal din Server kende til Form1

////// Kald SERVER så den kender til Form1 /////
public class Form1 : Form
{
    Public TextBox Mytext = new TextBox();
    public Form1()
    {
        SERVER();
    }
}

public class SERVER
{
    Form parent;
    public SERVER(Form1 parent)
    {
        this.parent = parent;
        parent.Mytext.Text = "Hej";
    }
}


/// Kald Server men kend ikke til Form1  ////
public class Form1 : Form
{
    Public TextBox Mytext = new TextBox();
    public Form1()
    {
        SERVER server = new SERVER();
        Mytext.Text = server.getText();
    }
}

public class SERVER
{
    public string getText()
    {
      return "Hej";
    }
}

/////

Off-topic:
@bkp

Hvordan sætter du den kasse ind? Det er lidt nemmere at skældne kodestykker fra hinanden med sådan en boks, men ser ikke hvor der står hvordan de laves?
Avatar billede bkp Nybegynder
19. november 2010 - 07:35 #11
@heinzdmz

Det er egentlig meget nemt, for at få den lysseblå boks pakker du det ind i en {div} {/div} (udskift { med [ ) og hvis du vil have monofont så putter du det igen ind i {pre} {/pre} altså således:
{div}{pre}KODEEKSEMPEL{/pre}{/div} bliver til:
KODEEKSEMPEL

* Husk at udskifte { og } med [ og ]

Se flere eksempler her: http://www.eksperten.dk/guide/1325
Avatar billede plohse33 Nybegynder
19. november 2010 - 10:10 #12
1. Smid en TextBox control på en form.

2. Opret en selvstændig klasse der hedder Server

3. Se følgende kode.

Form1 kode
---------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

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

        private void Form1_Load(object sender, EventArgs e)
        {
            Server server = new Server();
            textBoxServerTekst.Text = server.returnerTekstTilTekseBoks();
        }
    }
}

Server klassens kode
-----------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication2
{
    class Server
    {
        public Server() { }

        public string returnerTekstTilTekseBoks()
        {
            return "Denne tekst er returneret fra en anden klasse";
        }
    }
}


Jeg har gjort det sådan at når Form1 loades, eller at programmet startes, fyrer den metode kaldet af til server klassen, som så returnere en "string" til den kaldende klasse, i dette tilfælde Form1.

Håber det gir mening.
Avatar billede GoofyDK Nybegynder
19. november 2010 - 12:18 #13
Jeg siger tak for hjælpen, det virker perfekt nu. :o)

Takker for alle kommentare. God weekend.
Avatar billede heinzdmx Nybegynder
19. november 2010 - 12:52 #14
@bkp

Tak for det ;) det er ærgeligt det ikke står åbenlyst et eller andet så alle ser det. Specielt den guide.
Avatar billede bkp Nybegynder
19. november 2010 - 12:59 #15
@heinzdmx

Velbekomme
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