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: #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; public ref class MyForm : public System::Windows::Forms::Form { public: MyForm( void ) { InitializeComponent(); } protected: ~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: System::ComponentModel::Container ^ components; #pragma region Windows Form Designer generated code 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(); 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 ); 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 ); 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 ); 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 ); 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 ); 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 ); 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 ); 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 ); 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 ); 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 ); 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 ); 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 ); 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 ); 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""; 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 ); 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ę :) |
|
pekfos |
» 2015-06-17 00:12:41 if( operacja == '+' );
wynik += System::Int32::Parse( richTextBox1->Text );
if( operacja == '-' ) wynik -= System::Int32::Parse( richTextBox1->Text ); |
Średnik. |
|
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 |
|
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): 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): 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: 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. 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 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 |
|
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. |
|
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 ? |
|
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. |
|
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 |
|
« 1 » 2 |