Avatar billede noxiaz Nybegynder
28. januar 2007 - 21:00 Der er 9 kommentarer og
1 løsning

Textbox fejl.

Har 2 filer:
Form filen: Game.cs/game.designer.cs - Hvor formen er.
Script filen: Ball.cs - Ball scriptet som laver bolde.

Kort: I game.cs bruger jeg en function fra ball.cs til at lave en bolt.
Der bruges: manyBall.DrawBall(e.Graphics);
Senere bruger jeg en anden function for at få bolden til at bevæge sig:
manyBall.MoveBall(manyBall, pictureBox1.Height, pictureBox1.Width);

Har så lavet en textbox for at få X kordiantorene til bolden. Jeg har så tilføjet i Ball.cs:
public game sgame;
og
sgame.textBox1.Text = ball._x.ToString();
i functionen MoveBall

Men får fejlen: Object reference not set to an instance of an object.

Hvad skal jeg gøre for at dne skriver X kordinatoerne i textboxen?? :S

- Prøvede at tilføje try { } catch { } fik selvfølgelig ikke fejlen, men den skriver heller ikke noget :S
Avatar billede dr_chaos Nybegynder
28. januar 2007 - 21:05 #1
er hvordan ser erklæringen af _x ud og hvordan sætter du en værdi ind i den ?
Avatar billede noxiaz Nybegynder
28. januar 2007 - 21:12 #2
dr_chaos, ball._x returner bare tallet i int. og kan godt lave: MessageBox.Show(ball._x.ToString()); hvor den så skriver det. dog utroligt meget spam ^^

Men fejlen: Object reference not set to an instance of an object.

er den samme som når man laver:
textBox1.Text = "hey";
InitializeComponent();

Altså før komponeterne er installert. Men forstår bare ikke da de er installert før bolden bliver lavet og brugt.
Avatar billede hmortensen Nybegynder
28. januar 2007 - 21:12 #3
Har du sendt en reference til Game, med over i Ball.MoveBall(), så du kan få fat i tekstboksen?
Avatar billede noxiaz Nybegynder
28. januar 2007 - 21:14 #4
hmortensen? Ahh? :D Nej :D Hvordan gør jeg det? ^^
Avatar billede noxiaz Nybegynder
28. januar 2007 - 21:21 #5
hmortensen, ved at bruge "public game sgame;" Får jeg adgang til textbox'en og de andre øvrige ting, og har lavet textbox'en til public også.
Avatar billede hmortensen Nybegynder
28. januar 2007 - 21:32 #6
public game sgame;
burde være:
private game sgame;

Derved laver du en lokal variabel af typen game, nu skal du så have den lokale variabel til at pege på samme objekt, som din form er. Det kan du gøre i constructoren i din Ball klasse:


class Ball
{
  private Game sgame;

  public Ball(Game game)
  {
    sgame = game;
  }

  public void SomeMethod()
  {
    sgame.textBox1.Text = "Ny tekst";
  }
}

Så når du instansere din Ball klasse i formen:

Ball ball = new Ball(this);

this peger på klassen selv, og sender derved en reference med af sig selv.
Avatar billede noxiaz Nybegynder
28. januar 2007 - 21:54 #7
Hmm ? Har tilføjet:
    public class Ball
    {
        public game sgame;
        public Ball(game game)
        {
            sgame = game;
        }
... osv.
i ball.cs
og gik ud fra at "SomeMethod()" er min "moveball" så tilføjede

public void MoveBall(Ball ball, int screenHeight, int screenWidth)
        {
sgame.textBox1.Text = "Ny tekst";

der i mod vidste jeg ikke helt hvad du mente med Ball ball = new Ball(this);

Så prøvede at smide det ind i Game.cs:
public game()
        {
            InitializeComponent();
            Ball ball = new Ball(this);
Det virkede ik.

Prøvede så at smide det ind i void moveball() men gav en masse fejl.
Avatar billede hmortensen Nybegynder
28. januar 2007 - 22:03 #8
For at du kan kalde MoveBall() metoden, må du have instansieret Ball klassen et eller andet sted i din form. Der skal du tilrette, så din Ball klasses constructor bliver kaldt med this.
Avatar billede noxiaz Nybegynder
28. januar 2007 - 22:13 #9
Ahh nu funger det ! Mange tak ! ;) Send svar !
Avatar billede hmortensen Nybegynder
29. januar 2007 - 00:05 #10
Det var så lidt.
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