Problem z wypisaniem tekstu do textboxa z metody.

0

Witam,

mam program i w klasie Punkt2Dk mam metode ToString i chcę aby ona wypisywała pewien tekst do textboxa, jednak VS2010 podkreśla mi to jako błąd i daje:

The name 'richTextBox1' does not exist in the current context

Jak mogę to zrobić aby było dobrze?

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;
using System.Collections;

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

        private void button1_Click(object sender, EventArgs e)
        {

            Punkt2Dk ob = new Punkt2Dk(5, 7);
            Punkt2Ds st = new Punkt2Ds();
            OperacjeNaPunktach op = new OperacjeNaPunktach();

            st.ustal(5, 7);

            op.PrzesunPunkt(ob, 2, 2);
            op.PrzesunPunkt(ref st, 2, 2);
            richTextBox1.AppendText("Poczatkowe wspol. punktu dla klasy: " + ob.x + " " + ob.y + "\n\n");
            richTextBox1.AppendText("Poczatkowe wspol. punktu dla struktury: " + ob.x + " " + ob.y + "\n\n");

            richTextBox1.AppendText("Wspolrzedne punktu po przesunieciu dla klasy: " + ob.x + " " + ob.y + "\n\n");
            richTextBox1.AppendText("Wspolrzedne punktu po przesunieciu dla struktury: " + st.x + " " + st.y + "\n\n");



        }

        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            

            Punkt2Dk[] ob;

            ob = new Punkt2Dk[10000];
            
            for(int i=0;i <10000; i++)
                ob[i] = new Punkt2Dk(5, 7);

            long pam1 = System.GC.GetTotalMemory(true);

            Punkt2Ds[] st;

            st = new Punkt2Ds[10000];

            for (int i = 0; i < 10000; i++)
                st[i].ustal(5, 7);

            long pam2 = System.GC.GetTotalMemory(true);


            richTextBox1.AppendText("Tablica klas zajmuje: " + pam1 + "\n\n");
            richTextBox1.AppendText("Tablica struktur zajmuje: " + pam2 + "\n\n");

            ArrayList Lista1 = new ArrayList();
            ArrayList Lista2 = new ArrayList();

            for (int i = 0; i < 10000; i++)
                Lista1.Add(ob);

            long pam3 = System.GC.GetTotalMemory(true);

            for (int i = 0; i < 10000; i++)
                Lista1.Add(st);

            long pam4 = System.GC.GetTotalMemory(true);

            richTextBox1.AppendText("Lista klas zajmuje: " + pam3 + "\n\n");
            richTextBox1.AppendText("Lista struktur zajmuje: " + pam4 + "\n\n");
        }

        
    }
    struct Punkt2Ds
    {
        public int x;
        public int y;

        public void ustal(int x1, int y1)
        {
            x = x1;
            y = y1;

        }
    }
    class OperacjeNaPunktach
    {
        public void PrzesunPunkt(ref Punkt2Ds st, int x1, int y1)
        {
            st.x += x1;
            st.y += y1;
        }
        public void PrzesunPunkt(Punkt2Dk ob, int x1, int y1)
        {
            ob.x += x1;
            ob.y += y1;
        }
    }

    


        class Punkt2Dk
        {

        public int x;
        public int y;
        public Punkt2Dk(int x1, int y1){
            x = x1;
            y = y1;
        }
        public string ToString()
        {
            richTextBox1.AppendText("Wspolrzedne punktu po przesunieciu dla klasy: "+ x, y + "\n\n");
        }
        
    }
}
 
0

Po pierwsze ToString() powinno być zdefiniowane jako override.
Po drugie powinna zwracać string, bo obecnie nie zwraca nic.
Po trzecie w klasie Form1 tam gdzie potrzebujesz wywołaj po prostu richTextBox1.AppendText(nazwaZmiennejKlasyPunkt2Dk.ToString()).

0

ok, ale nie można tego zrobić aby to właśnie wypisanie było w tej metodzie ToString?

0

A dlaczego klasa Punkt2Dk miałaby wiedzieć o istnieniu czegoś takiego jak RichTextBox? Po co tworzyć bezsensowne powiązanie między klasami?

0

Wyjaśniając:

        class Punkt2Dk
        {
 
        public int x;
        public int y;
        public Punkt2Dk(int x1, int y1){
            x = x1;
            y = y1;
        }

Widzisz gdzieś tutaj richTextBox1? Pamiętaj, że kontrolki są polami klasy form i nie należy ich traktować jako zmiennych globalnych. Następnym razem pisz w sekcji Newbie

0

czyli, jeżeli kontrolki są polami klasy form to aby użyć tego richtextbox moja klasa Punkt2Dk musi dziedziczyć po formie tak?

0

Nie, wystarczy przekazać RichTextBoxa do jednej z jej metod albo ustawić go jako pole.
Tylko przestań wreszcie tak kombinować, bo wiążąc klasy w ten sposób stworzysz g**no, a nie program.

0

Robię tak ponieważ, mam zadanie w którym muszę stworzyć metodę do wyświetlania wyników z tablicy.

Czyli jeżeli się chce mieć wszystko dobrze, ładnie napisane to nie można zrobić właśnie takiej metody, która będzie miała za zadanie wyświetlanie czegoś?

0
Michaell65 napisał(a)

Czyli jeżeli się chce mieć wszystko dobrze, ładnie napisane to nie można zrobić właśnie takiej metody, która będzie miała za zadanie wyświetlanie czegoś?

Można zrobić taką metodę tylko powinna ona być w klasie, która służy do wyświetlania czegoś. W Twoim przypadku w klasie Form1, która może swobodnie operować na swoim richTextBox1. Klasa Punkt2D służy do przechowywania danych o punkcie, a nie ich wyświetlania.

0

ok, dzięki za wyjaśnienie

1 użytkowników online, w tym zalogowanych: 0, gości: 1