Ist es möglich die Klasse Button zu vererben wenn man noch paar funktionen dazu haben will?
Ich würde gerne Buttons während der Laufzeit erstellen und mit Mouseventhandler versehen. musst nicht button sein könnte auch picturebox nehmen, muss aber was sein das ein Image darstellen kann.
8o
Ja, Du kannst von der Klasse Button erben.
public class token : PictureBox
{
Panel pan;
public token(Panel panel): base()
{
pan = panel;
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this._MouseMove);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this._MouseUp);
}
private void _MouseMove(object sender, MouseEventArgs e)
{
if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
{
this.Location = pan.PointToClient(new Point(e.X, e.Y));
}
}
Problem ist wenn ich die Picturebox jetzt ziehe, zieht sie schlieren von dem Punkt wo ich starte mit dem dragen bis zum release punkt, machnmal verschwindet sie sogar einfach.
Vielleicht wird das alles zu oft abgefragt.
Kann man das was machen gegen?
Moin!
Das ist mal ein Schuß ins Blaue, aber versuche doch mal bei Deiner Form das Property DoubleBuffering auf True zu setzen. Könnte sein, dass es schon ein wenig weiter hilft. Alternativ würde ich vorschlagen, falls das nicht klappt, dann zeichne doch nur eine Art Rechteck, das von dem Control, dass Du verschieben möchtest, die Grenzen andeutet und verschiebe das. Anschließend wenn Du die Maus loslässt, wird die Position des zu verschiebenden Controls festgesetzt.
Gruß, DaMoe
Original von Schnueggel
muss aber was sein das ein Image darstellen kann.
nachdem du von der klasse erbst, kannst du dann auch OnPaint() überschreiben. somit könntest du auch ein label machen, das images darstellen kann.
an sich hat man ja 2 möglichkeiten, ein control für sich anzupassen:
ins form ziehen und alle möglichen events anpassen.
davon ableiten und die methoden überschreiben.
usercontrol machen.
die zweite methode hat den nachteil dass sie minimal mehr arbeit ist, aber den vorteil, dass man das angepasste control dann auch in anderen forms (oder mehrfach im gleichen) verwenden kann. bei der ersten methode müsste man jedesmal die ganzen eventhandler mitkopieren.
methode 3 bietet den vorteil, dass man recht einfach auch mehrere controls zu einem vereinen kann. sollte aber mE nicht dazu verwendet werden, um ein einziges control anzupassen, da man dann alle methoden durchscheusen muss. andererseits kann man aber so einzelne methoden eines controls verstecken und nur das public machen, was eben public sein soll.
das ändert zwar nichts an den schlieren, aber wenn du schon ableitest, könntest du auch gleich die methoden überschreiben:
public class token : PictureBox
{
Panel pan;
public token(Panel panel): base()
{
pan = panel;
// keine event handler nötig
}
protected override void OnMouseMove(MouseEventArgs e)
{
if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
{
this.Location = pan.PointToClient(new Point(e.X, e.Y));
}
}
code nicht getested, wer compilerfehler findet darf sie behalten 🙂
Kanns jetzt nicht mehr testen, hab mir was anderes ausgedacht, aber wenn ich override mache,dann überschreib ich imm er den alten Handler für das letzte objekt? Dann hab ich nur ein Eventhandler für alle PictureBox die ich erzeugt hab, sprich ich kann nur die zu letzt erstellten dragn, nicht die schon auf dem Feld sind. Lieg ich da richtig?
nein. override hat mit eventhandler gar nichts zu tun.
du überschreibst die entsprechende OnClick (zB), und ruftst dort erstmal base.OnClick() auf. dann kannst du noch funktionalität dazufügen, die für jede instanz der klasse gelten soll.
wenn du 5 instanzen hast, kannst du dann immer noch auch 5 verschiedene eventhandler haben
ok danke! wirklich cool was man hier alles lernen kann 🙂. Werd das mit dem Override noch mal genau ausschecken.
Hallo Schnueggel,
nichts gegen das Forum, aber Grundlagen lernt man aus Büchern, z.B. http://www.galileocomputing.de/openbook/visual_csharp/ , noch deutlich besser. Das "Auschecken" kannst du dabei dann gleich auf andere grundlegende Techniken ausdehnen.
herbivore
Ja du hast recht die Frage war wirklich banal, ich hatte nur die ganze zeit einen ObjectreferenceError und war mir dann nicht mehr sicher ob das geht, weil hier in einem forumsbeitrag gestanden hat man könnte nur die Controls vererben.