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.
Czy coś robię źle?
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++;
};
}
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: