Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Prosty Kalkulator w Windows Forms - nie działające odejmowanie

Ostatnio zmodyfikowano 2015-06-17 22:27
Autor Wiadomość
Nitr0Skay
Temat założony przez niniejszego użytkownika
Prosty Kalkulator w Windows Forms - nie działające odejmowanie
» 2015-06-16 23:54:52
Witam. Od niedawna zacząłem pisać aplikacje okienkowe w Windows Forms i już natrafiłem na swój pierwszy poważniejszy problem, którego nie mogę zlokalizować. Załączam kod:

C/C++
#pragma once

namespace kalkulator {
   
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
   
    /// <summary>
    /// Summary for MyForm
    /// </summary>
    public ref class MyForm
: public System::Windows::Forms::Form
    {
    public:
        MyForm( void )
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }
       
    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~MyForm()
        {
            if( components )
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button ^ button1;
    protected:
    private: System::Windows::Forms::Button ^ button2;
    private: System::Windows::Forms::Button ^ button3;
    private: System::Windows::Forms::Button ^ button4;
    private: System::Windows::Forms::Button ^ button5;
    private: System::Windows::Forms::Button ^ button6;
    private: System::Windows::Forms::Button ^ button7;
    private: System::Windows::Forms::Button ^ button8;
    private: System::Windows::Forms::Button ^ button9;
    private: System::Windows::Forms::Button ^ button10;
    private: System::Windows::Forms::Button ^ button11;
    private: System::Windows::Forms::Button ^ button12;
    private: System::Windows::Forms::Button ^ button13;
    private: System::Windows::Forms::RichTextBox ^ richTextBox1;
    private: System::Windows::Forms::Button ^ button14;
       
    private:
        /// <summary>
        /// Required designer variable.
        /// </summary>
        System::ComponentModel::Container ^ components;
       
        #pragma region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        void InitializeComponent( void )
        {
            this->button1 =( gcnew System::Windows::Forms::Button() );
            this->button2 =( gcnew System::Windows::Forms::Button() );
            this->button3 =( gcnew System::Windows::Forms::Button() );
            this->button4 =( gcnew System::Windows::Forms::Button() );
            this->button5 =( gcnew System::Windows::Forms::Button() );
            this->button6 =( gcnew System::Windows::Forms::Button() );
            this->button7 =( gcnew System::Windows::Forms::Button() );
            this->button8 =( gcnew System::Windows::Forms::Button() );
            this->button9 =( gcnew System::Windows::Forms::Button() );
            this->button10 =( gcnew System::Windows::Forms::Button() );
            this->button11 =( gcnew System::Windows::Forms::Button() );
            this->button12 =( gcnew System::Windows::Forms::Button() );
            this->button13 =( gcnew System::Windows::Forms::Button() );
            this->richTextBox1 =( gcnew System::Windows::Forms::RichTextBox() );
            this->button14 =( gcnew System::Windows::Forms::Button() );
            this->SuspendLayout();
            //
            // button1
            //
            this->button1->Location = System::Drawing::Point( 30, 110 );
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size( 56, 46 );
            this->button1->TabIndex = 0;
            this->button1->Text = L"1";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler( this, & MyForm::button1_Click );
            //
            // button2
            //
            this->button2->Location = System::Drawing::Point( 108, 110 );
            this->button2->Name = L"button2";
            this->button2->Size = System::Drawing::Size( 52, 46 );
            this->button2->TabIndex = 1;
            this->button2->Text = L"2";
            this->button2->UseVisualStyleBackColor = true;
            this->button2->Click += gcnew System::EventHandler( this, & MyForm::button2_Click );
            //
            // button3
            //
            this->button3->Location = System::Drawing::Point( 181, 110 );
            this->button3->Name = L"button3";
            this->button3->Size = System::Drawing::Size( 55, 46 );
            this->button3->TabIndex = 2;
            this->button3->Text = L"3";
            this->button3->UseVisualStyleBackColor = true;
            this->button3->Click += gcnew System::EventHandler( this, & MyForm::button3_Click );
            //
            // button4
            //
            this->button4->Location = System::Drawing::Point( 30, 174 );
            this->button4->Name = L"button4";
            this->button4->Size = System::Drawing::Size( 56, 40 );
            this->button4->TabIndex = 3;
            this->button4->Text = L"4";
            this->button4->UseVisualStyleBackColor = true;
            this->button4->Click += gcnew System::EventHandler( this, & MyForm::button4_Click );
            //
            // button5
            //
            this->button5->Location = System::Drawing::Point( 108, 174 );
            this->button5->Name = L"button5";
            this->button5->Size = System::Drawing::Size( 52, 40 );
            this->button5->TabIndex = 4;
            this->button5->Text = L"5";
            this->button5->UseVisualStyleBackColor = true;
            this->button5->Click += gcnew System::EventHandler( this, & MyForm::button5_Click );
            //
            // button6
            //
            this->button6->Location = System::Drawing::Point( 181, 174 );
            this->button6->Name = L"button6";
            this->button6->Size = System::Drawing::Size( 55, 40 );
            this->button6->TabIndex = 5;
            this->button6->Text = L"6";
            this->button6->UseVisualStyleBackColor = true;
            this->button6->Click += gcnew System::EventHandler( this, & MyForm::button6_Click );
            //
            // button7
            //
            this->button7->Location = System::Drawing::Point( 30, 238 );
            this->button7->Name = L"button7";
            this->button7->Size = System::Drawing::Size( 56, 47 );
            this->button7->TabIndex = 6;
            this->button7->Text = L"7";
            this->button7->UseVisualStyleBackColor = true;
            this->button7->Click += gcnew System::EventHandler( this, & MyForm::button7_Click );
            //
            // button8
            //
            this->button8->Location = System::Drawing::Point( 108, 238 );
            this->button8->Name = L"button8";
            this->button8->Size = System::Drawing::Size( 52, 47 );
            this->button8->TabIndex = 7;
            this->button8->Text = L"8";
            this->button8->UseVisualStyleBackColor = true;
            this->button8->Click += gcnew System::EventHandler( this, & MyForm::button8_Click );
            //
            // button9
            //
            this->button9->Location = System::Drawing::Point( 181, 238 );
            this->button9->Name = L"button9";
            this->button9->Size = System::Drawing::Size( 55, 47 );
            this->button9->TabIndex = 8;
            this->button9->Text = L"9";
            this->button9->UseVisualStyleBackColor = true;
            this->button9->Click += gcnew System::EventHandler( this, & MyForm::button9_Click );
            //
            // button10
            //
            this->button10->Location = System::Drawing::Point( 261, 110 );
            this->button10->Name = L"button10";
            this->button10->Size = System::Drawing::Size( 42, 46 );
            this->button10->TabIndex = 9;
            this->button10->Text = L"0";
            this->button10->UseVisualStyleBackColor = true;
            this->button10->Click += gcnew System::EventHandler( this, & MyForm::button10_Click );
            //
            // button11
            //
            this->button11->Location = System::Drawing::Point( 261, 174 );
            this->button11->Name = L"button11";
            this->button11->Size = System::Drawing::Size( 42, 40 );
            this->button11->TabIndex = 10;
            this->button11->Text = L"+";
            this->button11->UseVisualStyleBackColor = true;
            this->button11->Click += gcnew System::EventHandler( this, & MyForm::button11_Click );
            //
            // button12
            //
            this->button12->Location = System::Drawing::Point( 261, 238 );
            this->button12->Name = L"button12";
            this->button12->Size = System::Drawing::Size( 42, 47 );
            this->button12->TabIndex = 11;
            this->button12->Text = L"-";
            this->button12->UseVisualStyleBackColor = true;
            this->button12->Click += gcnew System::EventHandler( this, & MyForm::button12_Click );
            //
            // button13
            //
            this->button13->Location = System::Drawing::Point( 324, 238 );
            this->button13->Name = L"button13";
            this->button13->Size = System::Drawing::Size( 38, 47 );
            this->button13->TabIndex = 12;
            this->button13->Text = L"=";
            this->button13->UseVisualStyleBackColor = true;
            this->button13->Click += gcnew System::EventHandler( this, & MyForm::button13_Click );
            //
            // richTextBox1
            //
            this->richTextBox1->Location = System::Drawing::Point( 30, 31 );
            this->richTextBox1->Name = L"richTextBox1";
            this->richTextBox1->Size = System::Drawing::Size( 173, 34 );
            this->richTextBox1->TabIndex = 13;
            this->richTextBox1->Text = L"";
            //
            // button14
            //
            this->button14->Location = System::Drawing::Point( 324, 174 );
            this->button14->Name = L"button14";
            this->button14->Size = System::Drawing::Size( 38, 40 );
            this->button14->TabIndex = 14;
            this->button14->Text = L"C";
            this->button14->UseVisualStyleBackColor = true;
            this->button14->Click += gcnew System::EventHandler( this, & MyForm::button14_Click );
            //
            // MyForm
            //
            this->AutoScaleDimensions = System::Drawing::SizeF( 6, 13 );
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size( 362, 297 );
            this->Controls->Add( this->button14 );
            this->Controls->Add( this->richTextBox1 );
            this->Controls->Add( this->button13 );
            this->Controls->Add( this->button12 );
            this->Controls->Add( this->button11 );
            this->Controls->Add( this->button10 );
            this->Controls->Add( this->button9 );
            this->Controls->Add( this->button8 );
            this->Controls->Add( this->button7 );
            this->Controls->Add( this->button6 );
            this->Controls->Add( this->button5 );
            this->Controls->Add( this->button4 );
            this->Controls->Add( this->button3 );
            this->Controls->Add( this->button2 );
            this->Controls->Add( this->button1 );
            this->Name = L"MyForm";
            this->Text = L"MyForm";
            this->Load += gcnew System::EventHandler( this, & MyForm::MyForm_Load );
            this->ResumeLayout( false );
           
        }
        #pragma endregion
    private: System::Void MyForm_Load( System::Object ^ sender, System::EventArgs ^ e ) {
        }
       
    private: System::Void button1_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            if( richTextBox1->Text == L"0" || operacja != ' ' )
                 richTextBox1->Text = L"1";
           
            else
                 richTextBox1->Text += L"1";
           
        }
       
    private: System::Void button2_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            if( richTextBox1->Text == L"0" || operacja != ' ' )
                 richTextBox1->Text = L"2";
           
            else
                 richTextBox1->Text += L"2";
           
        }
       
    private: System::Void button3_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            if( richTextBox1->Text == L"0" || operacja != ' ' )
                 richTextBox1->Text = L"3";
           
            else
                 richTextBox1->Text += L"3";
           
        }
       
    private: System::Void button4_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            if( richTextBox1->Text == L"0" || operacja != ' ' )
                 richTextBox1->Text = L"4";
           
            else
                 richTextBox1->Text += L"4";
           
        }
    private: System::Void button5_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            if( richTextBox1->Text == L"0" || operacja != ' ' )
                 richTextBox1->Text = L"5";
           
            else
                 richTextBox1->Text += L"5";
           
        }
    private: System::Void button6_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            if( richTextBox1->Text == L"0" || operacja != ' ' )
                 richTextBox1->Text = L"6";
           
            else
                 richTextBox1->Text += L"6";
           
        }
    private: System::Void button7_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            if( richTextBox1->Text == L"0" || operacja != ' ' )
                 richTextBox1->Text = L"7";
           
            else
                 richTextBox1->Text += L"7";
           
        }
       
    private: System::Void button8_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            if( richTextBox1->Text == L"0" || operacja != ' ' )
                 richTextBox1->Text = L"8";
           
            else
                 richTextBox1->Text += L"8";
           
        }
    private: System::Void button9_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            if( richTextBox1->Text == L"0" || operacja != ' ' )
                 richTextBox1->Text = L"9";
           
            else
                 richTextBox1->Text += L"9";
           
        }
    private: System::Void button10_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            if( richTextBox1->Text == L" " )
                 richTextBox1->Text = L"0";
           
            else if( richTextBox1->Text == L"0" ) { }
           
            else
                 richTextBox1->Text += L"0";
           
        }
        int wynik = 0;
        char operacja = ' ';
    private: System::Void button11_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            wynik = System::Int32::Parse( richTextBox1->Text );
            richTextBox1->Text = L"+";
            operacja = '+';
        }
    private: System::Void button12_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            wynik = System::Int32::Parse( richTextBox1->Text );
            richTextBox1->Text = L"-";
            operacja = '-';
        }
    private: System::Void button13_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            if( operacja == '+' );
           
            wynik += System::Int32::Parse( richTextBox1->Text );
           
            if( operacja == '-' )
                 wynik -= System::Int32::Parse( richTextBox1->Text );
           
            richTextBox1->Text = wynik.ToString();
        }
    private: System::Void button14_Click( System::Object ^ sender, System::EventArgs ^ e ) {
            richTextBox1->Text = L"";
            wynik = 0;
        }
    };
}

Problem polega na tym, że o ile dodawanie jeszcze jakoś w miarę działa, tak z odejmowaniem jest nieco większy problem. Chodzi o to, że może i pojawia się w tym Text Boxie znazek "-", jednak nie wykonuje się operacja odejmowania.

Tak że przykładowo 10 - 3 = 10

Mam to okodowane mniej więcej tak samo, jak dodawanie. Jeszcze nie znam tych wszystkich szczegółów i niuansów Windows Forms, zatem problem może być banalny, ale go po prostu nie widzę i nie rozumiem. Mógłby mnie proszę ktoś nakierować ? Bo już parę godzin próbuję zlokalizować błąd (a pewnie gdzieś go mam przed nosem). Z góry dziękuję :)
P-133662
pekfos
» 2015-06-17 00:12:41
C/C++
if( operacja == '+' );

wynik += System::Int32::Parse( richTextBox1->Text );

if( operacja == '-' )
     wynik -= System::Int32::Parse( richTextBox1->Text );
Średnik.
P-133663
Nitr0Skay
Temat założony przez niniejszego użytkownika
» 2015-06-17 00:29:32
Dzięki Wielkie, co za głupi błąd ;D
Teraz już działa. Nie tak jak bym tego chciał (resztę błędów spróbuję sam poprawić), ale problem z tego tematu został zażegnany ;)

Przy okazji, jak tu się cytuje czyjeś posty (lub ich fragmenty) ?
Czasami by się tutaj przydała taka informacja, zatem jeżeli mógłby Pan napisać, to byłbym wdzięczny ;D
P-133665
Nitr0Skay
Temat założony przez niniejszego użytkownika
Inne sposoby wprowadzania cyfer
» 2015-06-17 11:33:57
Mam jeszcze jedno pytanko odnośnie wprowadzania cyfer, jako iż mam na to pewien sposób, ale wymaga on przyrównania w warunku TextBoxu do każdego operatora (chodzi o wprowadzanie cyfer po podaniu operacji). Chodzi o takie części kodu (zdarzenia):

C/C++
private: System::Void button1_Click( System::Object ^ sender, System::EventArgs ^ e ) {
    if( richTextBox1->Text == L"0" || richTextBox1->Text == "" )
         richTextBox1->Text = L"1";
   
    else
         richTextBox1->Text += L"1";
   
}

Aby to działało poprawnie, musiałbym wprowadzić taki warunek (dla samego dodawania i odejmowania):

C/C++
if( richTextBox1->Text == L"0" || richTextBox1->Text == "" || richTextBox1->Text == "+" || richTextBox1->Text == "-" )

Tylko to trochę nie optymalne (mozolne i upierdliwe), oraz wygląda nieelegancko, bo co jeżeli tych operatorów w przyszłości dorobię więcej ? Musiałbym po kolei zmieniać warunek dla każdej z tych cyfer, a tu nie o to chodzi. Jest jakiś inny sposób na to ?? Jeżeli tak, to prosiłbym o nakierowanie.

Osobiście próbowałem:

C/C++
if( richTextBox1->Text == L"0" || richTextBox1->Text == "" || richTextBox1->Text == operacja.toString() )
Ale tutaj jest tak, że na początku operacja jest pusta (bo nie zdefiniowana), i warunek jest spełniony, przez co następuje nadpisanie wartości.

C/C++
if( richTextBox1->Text == L"0" || operacja != ' ' )
Ale wówczas po wprowadzeniu operatora, zmienna operacja już jest różna od pustej wartości i cyfra jest już potem nadpisywana

C/C++
if( richTextBox1->Text == L"0" || operacja == ' ' )
Tutaj natomiast na początku operacja jest pusta i warunek jest spełniony, przez co cyfry są nadpisywane

Oraz także paru innych kombinacji, o których już nie pamiętam. Jest coś, czego nie spróbowałem ? A może nie tędy droga ??


P.S.  Zapomniałem wspomnieć, iż moim zamierzeniem jest to, aby nadpisywać liczbę wówczac, kiedy:
- W TextBoxie nic nie ma;
- W TextBoie jest tylko cyfra zero (0);
- W textboxie jest sam operator, ale w ten sposób, aby zapamiętało operację jaka ma się wykonać po wprowadzeniu kolejnej liczby

W przeciwnym wypadku program ma ją dopisać do końcu łańcucha znaków


P.S.2.
Visual C++ (Windows Forms) to już jest inny język ? Inny niż C++ ?? ;p
P-133669
Monika90
» 2015-06-17 12:07:30
P.S.2.
Visual C++ (Windows Forms) to już jest inny język ? Inny niż C++ ?? ;p
A myślałeś, że C++ dopuszcza operator ^ w deklaracjach parametrów, jak tu:
System::Void button1_Click( System::Object ^ sender, System::EventArgs ^ e )
?

Albo że, w C++ jest gcnew, jak tutaj:
this->button1 =( gcnew System::Windows::Forms::Button() );
?

public ref class MyForm
 ref class? Nie, w C++ czegoś takiego nie ma.


Ten język nazywa się C++/CLI.
P-133674
Nitr0Skay
Temat założony przez niniejszego użytkownika
» 2015-06-17 12:32:52
C++/CLI
No właśnie i ten pierwszy człon wskazuje nawet na C++, stąd mój wniosek. Ale chyba masz rację ;D

A co do mojego problemu... jakieś wskazówki ?
P-133677
pekfos
» 2015-06-17 12:38:13
Przy okazji, jak tu się cytuje czyjeś posty (lub ich fragmenty) ?
Czasami by się tutaj przydała taka informacja, zatem jeżeli mógłby Pan napisać, to byłbym wdzięczny ;D
Link do opisu wszystkich tagów jest w zasadach zakładania tematów.
P-133678
Nitr0Skay
Temat założony przez niniejszego użytkownika
» 2015-06-17 20:14:28
No dobrze, dzięki. A teraz:


Musiałbym po kolei zmieniać warunek dla każdej z tych cyfer, a tu nie o to chodzi. Jest jakiś inny sposób na to ??

Byłbym wdzięczny, jeżeli do tego uzyskam jeszcze jakąś podpowiedź :)
Z góry dzięki
P-133701
« 1 » 2
  Strona 1 z 2 Następna strona