Przeróbka kodu z dwóch textBoxów na jeden.

0

Witam
Na początku chciałbym przeprosić za zbyt nie jasny temat.Mam problem z tym kodem.

 textBox1.Text = textBox2.Text + " + " + textBox3.Text + " = " + Convert.ToString(Convert.ToInt32((Convert.ToInt32(textBox2.Text)) + (Convert.ToInt32(textBox3.Text))));      

Chciałbym aby można było wpisać (z klawiatury) równanie do textBoxa a po naciśnięciu klawisza "=" pojawił się wynik tego równania.
Mam nadzieje że wyraziłem się w miare jasno.Z góry dziękuje za pomoc.

0

Możesz użyć : https://msdn.microsoft.com/pl-pl/library/b873y76a(v=VS.110).aspx do podzielenie ciągu.

0

No dobrze a jak zastosować to do tego kodu co mam.

0

No a przeczytałeś co ta metoda robi? Zastanowiłeś się co trzeba zrobić, żeby wyciągnąc te 2 liczby z textboxa?

Tak poza tym, to żeby to było uniwersalne, to musiałbyś użyć Odwrotnej Notacji Polskiej.

0

Pierwszy raz używam tej metody i nie wiem co robić.

0

Kluczowe pytanie, czy umiesz wykonać taki sam program bez pomocy w konsoli?

0

a wpisałeś moze w google "c# string.split examples"? próbowałeś ja wywołać z róznymi parametrami, kombinowałeś, eksperymentowałeś, sprawdzałeś testowałeś, czy czekasz na gotową odpowiedź?

PS. Powtórzę ponownie, jeśli zrobisz to za pomocą string.split, to będzie działało to tylko dla X + Y = Z. Nie zadziała dla X - Y = Z, anie dla Z - Y + T = Z. Jeśli chcesz, żeby to było uniwersalne, użyj Odwróconej Polskiej Notacji

0
kuba7528 napisał(a):

No dobrze a jak zastosować to do tego kodu co mam.

W linku, znajduję się przykładowy kod, który jest bliski do rozwiązania Twojego problemu.

0

Mam tylko jeden textbox jak mam to wyciągnąć.Jako klawisz , znak ?

0

Trochę to trudne a nie jestem żółtodziobem bo podstawy kalkulatora i notatnika udało mi się sklicić.

0

Ale co ty konkretnie od A do Z chcesz zrobić?

0
kuba7528 napisał(a):

Mam tylko jeden textbox jak mam to wyciągnąć.Jako klawisz , znak ?

Kontrolka textbox ma event OnKeyPressed (czy jakos tak podobnie). Mozesz sie zaczepic w tym evencie i sprawdzac jaki klawisz jest nacisniety. Jesli jest to = to odpalasz jakas tam metode, ktora przyjmuje stringa (zakladajac, ze jest w poprawnym formacie rownania) i zwraca jakas liczbe (wynik tego /powiedzmy/ rownania). Parametr, ktory wysylasz do tej metody mozesz wziac z textBox.Text property.

Generalnie o ile dobrze Cie zrozumialem i chcesz zapisac rownanie w strinu mniej wiecj w takiej postaci: 5+5= to bedzie to działać, o ile sprytnie napiszesz metode parsujaca tego stringa. Radzilbym jednak zastosowac sie do przedmowcy, zapoznac sie i skorzystac z ONP ;)

kuba7528 napisał(a):

nie jestem żółtodziobem bo podstawy kalkulatora i notatnika udało mi się sklicić.

Szczerze watpie, skoro zadajesz pytania typu:

kuba7528 napisał(a):

Mam tylko jeden textbox jak mam to wyciągnąć.Jako klawisz , znak ?

0

Chce aby po napisaniu działania w textbox np "2+4=" z klawiatury i po naciśnięciu "=" pojawił się wynik wraz z tym działaniem.Chyba w miare jasno się wyraziłem.Dodam jeszcze że w Visual Studio nie ma takie zdarzenia jak OnKeyPressed jest natomast KeyPress.To to samo ?

0

Nie w visual studio tylko w fraemewoku którego stosujesz czyli albo winforms albo wpf. Po naciśnieciu gdy ostatnim elementem równania jest "=".
Jak to pierwsze, to musisz napisać on
musisz poprawić rozmiar liter :)

 this.textbox.TextChanged += NameChanged;

 public void NameChanged(object sender, RoutedEventArgs e)
        {
            if((sender as textBox).text[sender as textBox).text.lenght-1] == '=') 
            {
               string wynik =  Policz();
               (sender as textBox).text +=  wynik;
             } 
        }
// a jak druga to to 
private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Delete)
    {
       string wynik =  Policz();
               TextBox.text +=  wynik;
    }
}
0

Mam problem z tym

 this.TextBox.TextChanged += NameChanged;
 
 public void NameChanged(object sender, RoutedEventArgs e)
        {
            if((sender as TextBox).text[sender as TextBox).text.Lenght-1] == '=') 
            {
               string wynik =  Policz();
               (sender as TextBox).Text +=  wynik;
             } 
        }

a do tego

  private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete)
            {
                string wynik = Policz();
                textBox1.Text += wynik;
            }
       
            
        }

        

musiałem wstawić to

  private string Policz()
        {
            throw new NotImplementedException();
        }

Wiem że to jest łopatologicznie napisane ale chciałbym wiedzieć czy dobrze robie,
bez tego stringa(moge się mylić bo to pewnie jest klasa) w ogóle nie kompiluje programu.

0

jakie to będą działania, czy coś w stylu:

6 + 89 * 2 - 4 / 2 =

?

Ja bym zrobił tak:

  1. szukasz * i /
  2. jesli znajdzie, szukasz liczb przed i po (do kolejnej cyfry lub konca [while char jest liczba (laczysz w string a pozniej int.tryparse), index + / -])
  3. wykonujesz dzialania: 6 + 89 * 2 - 4 / 2 -> 6 + 178 - 2
  4. to samo, tylko dla + - i wykonujesz dzialania
0

Mi to się kompiluje

        TextBox textbox = new TextBox();
        void shit()
    {
        textbox.TextChanged += this.NameChanged;
    }
 
 public void NameChanged(object sender, RoutedEventArgs e)
        {
            if((sender as TextBox).Text[(sender as TextBox).Text.Length-1] == '=') 
            {
               string wynik =  Policz();
               (sender as TextBox).Text +=  wynik;
             } 
        } 

@up kolega nie wie co mu nie działa ;) ale można zrobić to albo odwrócona notacją polską albo

        string oblicz(string równanie)
        {
            Kontroladanych1();
           return oblicz2(spilt(równanie)).ToString();
        }
        double oblicz2(List<string> równanie)
    {
        kontrolaDanych2();
        znajdzIwykonajNawias(równanie);
        wykonajFunkcje(równanie); // sin cos ect.
        mnózDziel(równanie);
        return sumujOdejmuj(równanie); // return double
        /*kazdy stopień kaskady "skleja" liczby i usuwa operatory z listy {2,+,2 ,*,2,+,3}=>{2,+,4,+,3} */
    }
       void znajdzIwykonajNawias(List<string> równanie)
        {
            //jesli znaleziono usuń nawiasy z listy i:
            oblicz2(List<string> tresc_miedzy_nawasami); // zamiast rekurecji można pętli uzyc
// wstawić wynik  jako string w liscie "w miejsce całego nawiasu"
        }
      void  wykonajFukcje() //sin[2+3];
        {
            // odnajduje wszystkie fukcje w liscie, "zawartośc" nawiasu rozwiązuje rekurencyjnie np sin[2+3] => wynik=oblicz2({2,+,3});
            // a potem w pisać w liscie w miejsce "sin[2+3]" <= sin(wynik).ToString();
        } 
0

Do tego mam pewnie utworzyć klase ale co w tej klasie napisać

 RoutedEventArgs
0

Chyba porywam się z motyką na słońce bo nie moge sobie poradzić z kodem kolegi topik92.

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