Code für bewegendes Form-Fenster vererben?
-
Hi.
Ich hab da mal eine Frage bezüglich dem vererben.public Form1() { InitializeComponent(); this.MouseDown += new System.Windows.Forms.MouseEventHandler(OnMouseDown); this.MouseMove += new System.Windows.Forms.MouseEventHandler(OnMouseMove); } private Point mouse_offset; private void OnMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { mouse_offset = new Point(-e.X, -e.Y); } private void OnMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Point mousePos = Control.MousePosition; mousePos.Offset(mouse_offset.X, mouse_offset.Y); Location = mousePos; } }
Der Code is dafür zuständig, dass man das Form-Fenster auch mit FormBorderStyle = None bewegen kann.
Meine Frage:
Kann ich den Code irgendwie vererben? Es ist ja unnötig in 20 FormFenster immer diesen Code hineinzuschreiben.Danke für jede Antwort
-
Hi!
Na klar geht das! Es gelten die ganz normalen Vererbungsregeln, etc.
public partial class Form1 : FormBewegung
Das war's auch schon.
Sebo
-
Hi. Thx erstmal für die Antwort.
Ich habs jetzt mal so versucht:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.MouseDown += new System.Windows.Forms.MouseEventHandler(OnMouseDown); this.MouseMove += new System.Windows.Forms.MouseEventHandler(OnMouseMove); } FormBewegung test = new FormBewegung(); test(); } public class FormBewegung { private Point mouse_offset; private void OnMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { mouse_offset = new Point(-e.X, -e.Y); } private void OnMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Point mousePos = Control.MousePosition; mousePos.Offset(mouse_offset.X, mouse_offset.Y); Location = mousePos; } } } }
(Code des Form1 Fensters)
Jetzt fragt mich der Compiler aber nach einem Rückgabetyp für test();
Was mach ich da falsch??
-
Hi!
Du vererbst nicht! Du erzeugst nur eine Instanz von FormBewegung. Ändere die Klasse Form1 wie folgt:
public partial class Form1 : FormBewegung { public Form1() { InitializeComponent(); } }
Das war schon alles.
Führe es einfach mal aus, dann wirste schon sehen und verstehen, denke ich.
Sebo
-
Dann kommt bei mir die Fehlermeldung:
"WindowsApplication1.Form1.Dispose(bool)": Es wurde keine passende Methode zum Überschreiben gefunden.
-
Hi!
Dispose ist die Funktion die das Löschen des Objektes erledigt. Eigentlich sollte diese Meldung nicht kommen. Schau mal, ob in Deiner Form1.Designer.cs eine Dispose Funktion existiert, wenn nicht dann kopiere das hier rein:
/// <summary> /// Erforderliche Designervariable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Verwendete Ressourcen bereinigen. /// </summary> /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); }
Wenn das nicht klappt, probiere mal die Funktion in der Basisklasse zu implementieren.
Sebo
-
Funktioniert leider immer noch nicht. Ich denk, dass das doch gar nicht geht, weil bei Form1 muss doch generell das Form vererbt werden. Weil wenn ich Form1 :FormBewegung vererb, dann gibt mir auch der Entwurf von Form1 gewisse Fehlermeldungen aus.
-
Natürlich kann man auch von anderen Klassen als von Form erben, du mußt einfach FormBewegung von Form erben lassen und dann deine eigenen Formulare von FormBewegung.
Hier noch mal in Code-Form:public class FormBewegung : Form { // ... hier dann deine Änderungen einfügen } public partial class Form1 : FormBewegung { public Form1() { InitializeComponent(); } }
Ist doch nicht schwer, oder?
-
Benny_Ben_Ben schrieb:
Funktioniert leider immer noch nicht. Ich denk, dass das doch gar nicht geht, weil bei Form1 muss doch generell das Form vererbt werden. Weil wenn ich Form1 :FormBewegung vererb, dann gibt mir auch der Entwurf von Form1 gewisse Fehlermeldungen aus.
Quatsch, was glaubste wie oft ich sowas mache?!
Sebo
-
sry.
Ich kenn mich mit C# leider noch nicht so gut aus.
Auf jeden Fall funzt jetzt alles wieder.Eine Frage hab ich allerdings noch:
Woher seit ihr alle quasi zu "C# Profis" geworden???
-
Benny_Ben_Ben schrieb:
Ich kenn mich mit C# leider noch nicht so gut aus.
C#, Java, weissDerGeier ist doch alles OOP und in der OOP kann man jedes Objekt ver- und beerben.
Benny_Ben_Ben schrieb:
Woher seit ihr alle quasi zu "C# Profis" geworden???
Informatik Studium, Freiberufler und Angestellter Softwareentwickler.
Sebo