Auto tekst C#

0

Cześć Tworzę właśnie Program w Visual Studio 2019 I chciałbym aby tekst w tekstboxie się zmieniał sam co jakiś czas.
Problem jest taki, że nie działa mi żadna nieskończona pętla, i nie wiem jak używać instrukcji Break

1

Z tego co wiem to jest duże prawdopodobieństwo, że wszystko ci działa. Wydaje mi się, że problemem jest blokowanie przez pętle całego okna (UI thread) dlatego nie widzisz wyników. Musisz to zrobić asynchronicznie, aby nie blokować wątku UI.

0

Tylko że nie użyłem pętli, więc pętla tu nic nie zepsuła.
Chciałbym żeby literki lub kawałki tekstu wyskakiwały po kolei, potrzeba mi 1 polecenia które takjakby zatrzymało czas na np. 300milisekund i wyświetliło następną literkę i znowu i znowu.

Mój kod wygląda tak:

private void CatvirSC_Load(object sender, EventArgs e) 
        {

            TextBox.Text = "C";
            TextBox.Text += "O";
            TextBox.Text += " ";
            TextBox.Text += "S";
            TextBox.Text += "I";
            TextBox.Text += "Ę";
            TextBox.Text += " ";
            TextBox.Text += "S";
            TextBox.Text += "T";
            TextBox.Text += "A";
            TextBox.Text += "Ł";
            TextBox.Text += "O";
            TextBox.Text += "?";
            TextBox.Text += ""; 
}
0

Spróbuj tak - po private dopisz async i po każdej zmianie "wstrzymaj czas"

private async void CatvirSC_Load(object sender, EventArgs e) 
        {
            TextBox.Text = "C";
await Task.Delay(300);
            TextBox.Text += "O";
await Task.Delay(300);
            TextBox.Text += " ";
await Task.Delay(300);
            TextBox.Text += "S";
await Task.Delay(300);
            TextBox.Text += "I";
await Task.Delay(300);
            TextBox.Text += "Ę";
await Task.Delay(300);
            TextBox.Text += " ";
await Task.Delay(300);
            TextBox.Text += "S";
await Task.Delay(300);
            TextBox.Text += "T";
await Task.Delay(300);
            TextBox.Text += "A";
await Task.Delay(300);
            TextBox.Text += "Ł";
await Task.Delay(300);
            TextBox.Text += "O";
await Task.Delay(300);
            TextBox.Text += "?";
await Task.Delay(300);
            TextBox.Text += ""; 
}

PS.
Dziwne rozwiązanie. Może lepiej nie drążę czemu tak to potrzebujesz 😅

0

Okej wszystko działa, mam jeszcze 1 pytanie.
Ustawiłem textboxa aby był wielolinijkowy.
jakbym chciał przenieść część tekstu do następnej linijki to jak mam to zrobic ?

0
TextBox.Text += "O" + Environment.NewLine;

lub

TextBox.Text += "O \r\n"
0

Dzięki. A jest taką pętla która by działała w nieskończoność a reszta programu dalej działała normalnie ?

0

Możesz skorzystać z

while(true)
{
}

Wydaje mi się, że w takim przypadku będziesz potrzebował bardziej zaawansowanego rozwiązania, ponieważ to na 100% zablokuje ci UI.

0

No próbowałem takich pętli i nie działało, teraz pokazuje mi takie 5 błędów:

Błąd CS1031 Oczekiwano typu
Błąd CS8124 Nieprawidłowy token „True” w deklaracji składowej klasy, rekordu, struktury lub interfejsu
Błąd CS1519 Nieprawidłowy token „while” w deklaracji składowej klasy, rekordu, struktury lub interfejsu
Błąd CS8124 Krotka musi zawierać co najmniej dwa elementy.

Błąd CS1026 Oczekiwano znaku )
tutaj ,v, po znaku (

while(true)
{
}
0

Ok, myślę, że wystarczy. To są podstawy, które musisz nadrobić sam. Treści błędów są po to, aby wiedzieć co się zrobiło źle. Polecam wpisać błąd (po angielsku) w Google i nauczyć się tego samemu.

0

Ja rozumiem co oznaczają te błędy tylko że mi nie działają pętle nawet jak naprawie to

0

Jeszcze jedno pytanie.
Dałoby się przenieść to

private async void CatvirSC_Load(object sender, EventArgs e) 
        {
            TextBox.Text = "C";
await Task.Delay(300);
            TextBox.Text += "O";
await Task.Delay(300);
            TextBox.Text += " ";
await Task.Delay(300);
            TextBox.Text += "S";
await Task.Delay(300);
            TextBox.Text += "I";
await Task.Delay(300);
            TextBox.Text += "Ę";
await Task.Delay(300);
            TextBox.Text += " ";
await Task.Delay(300);
            TextBox.Text += "S";
await Task.Delay(300);
            TextBox.Text += "T";
await Task.Delay(300);
            TextBox.Text += "A";
await Task.Delay(300);
            TextBox.Text += "Ł";
await Task.Delay(300);
            TextBox.Text += "O";
await Task.Delay(300);
            TextBox.Text += "?";
await Task.Delay(300);
            TextBox.Text += ""; 
}

do osobnego pliku a potem w głównym kodzie go wywołać "żeby nie zaśmiecał"

0

Prawidłowa odpowiedź to i tak, i nie. W dalszym ciągu twoim głównym problemem są twoje braki w podstawach takich jak klasy.

PS.
Forum 4programmers nie oferuje szkoleń czy tutoriali do języków, tylko pomaga rozwiązywać problemy na jakie programiści napotykają. Ja nie piszę tego złośliwie, bo życzę jak najlepiej, ale serio - kup książkę, poczytaj dokumentację .NET, włącz sobie jakiś filmik na YouTube, albo w ostateczności kup szkolenie na udemy.com. Zrzucenie rozwiązania problemu na siebie jest najlepszą lekcją w programowaniu 💪

0

@Szymon Kuleczka:

To pętli i tablic nie ma w twoim Studio?

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