VS C++ Zapis textBoxa do tablicy i odczyt do labela

Witam, mam taki problem: chciałbym aby po wciśnięciu buttona tekst z textBoxa1 przekopiował się do tablicy, a następnie z tablicy przekopiował się do obiektu label1. Napisałem coś takiego:

for (int i=0;iText->Length;i++)

			 {

				 team[0].nazwa[i] = textBox1->Text[i];

				 team[0].nazwa[i+1] = 0;

			 };


			 int licznik=0;


				while (team[j].nazwa[licznik] != 0)

			 {

			 label1->Text = textBox1->Text + Convert::ToChar(team[j].nazwa[licznik+1]);

			 licznik++;

			 };

i niby działa, ale czasami program wysypuję się po kilku, kilkunastu sekundach, a czasem działa bez przerw.

  1. Czy coś robię źle?

  2. Czy jest na to inny sposób? Myślałem o tym, żeby zapisywać to jako Stringi, ale jestem początkujący i nie mam pojęcia jak to zrobić.

Jakby ktoś miał czas, to prosiłbym aby pisał w miarę przystępnym językiem, bo tak jak już wspominałem dopiero zaczynam zabawę z C++.

.NET-owy TextBox przechowuje tekst jako System::String więc tutaj tylko niepotrzebnie robisz kopiowanie znak po znaku(jedno przypisanie starczy, jeśli team::nazwa to System::String). Kopiowanie tego do labela jest identyczne.

Z tego co widzę to pierwsza pętla jest jak najbardziej poprawna, gorzej z drugą. Nie wiem skąd wytrzasnąłeś zmienną “j”(i nie wiem po co ona), do tej samej zmiennej przypisujesz team[j].nazwa.Length * j razy jakiś tekst, choć powinieneś to zrobić raz, używając do tego przeładowanego operatora przypisania System::String(Label::Text to System::String).

To powinno wyglądać tak:

label1->Text = textBox1->Text;

Skopiuje do label1 tekst zawarty w textBox1.

Mam nadzieję, że nie wykonujesz tego w nieskończonej pętli tylko w jakimś zdarzeniu(np. TextBox::Change).

Zmienną “j” zapomniałem zastąpić “0” na potrzeby tego przykładu. W całym kodzie mam ponad 100 takich pętli, więc zmienna “j” trochę ułatwia edycje.

Nie wiem za bardzo o co chodzi, mógłbyś to bardziej wyjaśnić?

W części programu rzeczywiście mógłbym coś takiego zrobić, ale dalej będzie trochę inaczej. Mianowicie do którego labela zapisze tekst z textBoxa będzie zależeć od innego czynnika, dlatego potrzebuje mieć ten tekst gdzieś indziej zapisany.

Dam cały kod, chociaż nie wiem czy to o to chodzi.

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) 

			 {	

				int j = 0;


				for (int i=0;iText->Length;i++)

			 {

				 team[j].nazwa[i] = textBox1->Text[i];

				 team[j].nazwa[i+1] = 0;

			 };


			 int licznik=0;


				while (team[j].nazwa[licznik] != 0)

			 {

			 label1->Text = textBox1->Text + Convert::ToChar(team[j].nazwa[licznik+1]);

			 licznik++;

			 };

}

Uprościło by sprawę gdyby podałeś deklaracje tego team.

Po odpowiedniej zmianie tej deklaracji a może i bez zmian, całość można zapisać

team[j].nazwa=textBox1->Text;label1-Text=team[j].nazwa; [/code]
class team

	{

	public:

		char nazwa[40];

		int mecze;

		int win;

		int draw;

		int lose;

		int strz;

		int stra;

		int ptk;

		int bilans;

	}team[7];

Zamiast “char nazwa[40]” daj “System::String nazwa” i wszystko sprowadzi się do jednego/dwóch przypisań.

Zauważ, że do zmiennej label1->Text przypisujesz tekst z textBox1->Text dodając do niego za każdym razem inną literę. Ten kod(druga pętla) można zastąpić czymś takim:

label1->Text = textBox1->Text + Convert:ToChar(team[j].nazwa[strlen(team[j].nazwa) - 1]);

i będzie on robił dokładnie to samo.