OnMouseDown Event wird nicht abgefangen?



  • Hallo Forum!

    Was C++ betrifft bin ich leider absoluter Neuling, ich habe zwar schon viel mit anderen Sprachen gearbeitet und kann mich daher sehr schnell einarbeiten, aber im Moment habe ich noch so meine "Probleme".
    Ich habe ein Form1 was ein Hintergrundbild hat und keine Border oder ne Titelleiste (also "none"). Nun würde ich gerne den OnMouseDown Event abfangen und etwas in eine textbox eintragen, nur mal so zum testen, aber das haut irgendwie nicht hin und VC beschwert sich auch nicht über irgendwelche Fehler, aber beim klicken auf die Form passiert gar nichts, genauso beim OnMouseEnter Event.

    Codeschnipsel:

    private: System::Void Form1_OnMouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^  e){
    				 	 this->textBox1->Text = "Jawoll!JA!";
    				 }
    

    Irgendwelche Ideen? Bin für jeden Tipp dankbar!

    Grüße!

    der haSta



  • 🙂 Hab da was rausgefunden, nache ewigem trial & error. Das kann doch nicht so schwer sein ein Fenser ohne Titelleiste normal zu bewegen. Also meine lösung, die leider noch nicht ganz funktioniert, aber der Klick wird schonmal erkannt:

    //Folgendes hab ich im Header:
    this->MouseDown += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::Form1_myMouseDown);
    
    //Und das dann weiter unten:
    private: System::Void Form1_myMouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^  e){
    				 //while(this->MouseMove()){
    				 this->Location = e->Location;
    				 //}
    				}
    

    Also der Klick wird erkannt, aber nicht das down. Also es wird nicht erkannt das die Taste gedrückt gehalten wird um damit die Form (das Form?) zu verschieben.

    Vielleicht kann mir jetzt jemand helfen. Solche Kleinigkeiten halten mich viel zu lange auf...



  • Wie "gedrückt gehalten wird"? Das MouseDown kommt logischerweise nur wenn die Taste gedrückt wird und nicht wenn sie gedrückt ist. Dass musst Du Dir dann schon selber merken und noch auf ein MouseMove reagieren.
    Was versuchst Du eigentlich zu machen?

    PS: Wenn Du eh nur Windows-Forms machst und von C++ wenig Ahnung hast, dann würde ich Dir dringend zu C# raten!



  • Warum C#?

    Ähm, ich will eigentlich nur das Fenster (die/das Form) verschieben. 😃



  • Also es Funktioniert nu soweit, aber wenn ich die Form an die Mauszeiger Position setze, springt das Fenster ja mit der oberen linken Ecke an die Mauszeiger Position und dann kann ich ich es verschieben. Kann ich das verhindern? Ich komm absolut nicht drauf... 😕



  • Ich habs jetzt hinbekommen und falls es jemand interessiert, hier mal der Sourcecode:

    (Form ohne Titelleiste verschieben)

    // 
    			// Form1
    			// 
    			resources->ApplyResources(this, L"$this");
    			this->AccessibleRole = System::Windows::Forms::AccessibleRole::None;
    			this->AllowDrop = true;
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->AutoValidate = System::Windows::Forms::AutoValidate::Disable;
    			this->BackColor = System::Drawing::Color::Fuchsia;
    			this->CausesValidation = false;
    			this->Controls->Add(this->checkBox1);
    			this->Controls->Add(this->button1);
    			this->Controls->Add(this->label2);
    			this->Controls->Add(this->label1);
    			this->Controls->Add(this->comboBox2);
    			this->Controls->Add(this->comboBox1);
    			this->Controls->Add(this->FormVisibleTag);
    			this->DoubleBuffered = true;
    			this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::None;
    			this->KeyPreview = true;
    			this->MaximizeBox = false;
    			this->MinimizeBox = false;
    			this->Name = L"Form1";
    			this->ShowInTaskbar = false;
    			this->TransparencyKey = System::Drawing::Color::Fuchsia;
    //Hier die Beiden wichtigen definitionen:			
    this->MouseUp += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::Form1_myMouseUp);
    			this->MouseDown += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::Form1_myMouseDown);
    			this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
    			this->contextMenuStrip1->ResumeLayout(false);
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    #pragma endregion
    
    	private: System::Void Form1_myMouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^  e){
    				this->Location::set(Point((this->MousePosition.X - MouseMovePosBufferX), (this->MousePosition.Y - MouseMovePosBufferY)));
    			 }
    	private: System::Void Form1_myMouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^  e){
    				this->MouseMove::remove(gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::Form1_myMouseMove));
    			}
    	private: System::Void Form1_myMouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^  e){
    				this->MouseMovePosBufferX = e->X;
    				this->MouseMovePosBufferY = e->Y;
    				this->MouseMove += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::Form1_myMouseMove);
    			}
    

Anmelden zum Antworten