[C#]-obsluha myši překrývanou nebo vlastní metodou

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod pakusak 16. 5. 2012 22:07

Zdravím, potřebuji obsloužit akce myši, je správnější použít překrývanou metodu
jako třeba
protected override void OnMouseDown(MouseEventArgs e)
Kód: Vybrat vše
      {
            startDraw = true;
       }

nebo zaregistrovat vlastní událost

Kód: Vybrat vše
pictb.MouseDown += new MouseEventHandler(f_MouseDown);

a obsloužit ve vlastní metodě

Kód: Vybrat vše
public void f_MouseDown(object sender, MouseEventArgs e)
        {
           startDraw = true;
        }

používám to druhé, ale nevím, jestli se časem neobjeví potíže, až bude program složitější
Naposledy upravil Vebloud dne 17. 5. 2012 22:21, celkově upraveno 1
Důvod: Code tag!
pakusak
Junior

Odeslat příspěvekod ahriman 16. 5. 2012 22:19

podl mého by ta metoda nemusela být public ne?

ale používal bych to první (dost možná tím, že jsme zvyklý z Javy), ale pokud jich potřebuješ více různých metod, pro stejný listener, tka bude lepší asi to první
ahriman
Junior

Odeslat příspěvekod Nargon 17. 5. 2012 03:32

V každém případě bych ti doporučil to druhé, tedy registraci události.
Ty metody "OnXXX" se myslím starají o spouštění těch událostí. A pokud nemáš důvod, tak bych na to nesahal. To co jsi napsal, sice pro tvuj pripad bude fungovat, ale uz to myslim nebude volat ty registrovane udalosti, protoze jsi na to zapomel.
Pokud to chceš použít, tak doporučuju takto:
Kód: Vybrat vše
protected override void OnMouseDown(MouseEventArgs e)
{
    base.OnMouseDown(e);
    startDraw = true;
}

Tj, že zavoláš tu metodu u rodiče, který se postará o to co tam dělal, a pak provedeš vlastní kod.
Takže pokud vyloženě nemusíš, tak doporučuju spíše události. A navíc u událostí si můžeš snadno zaregistrovat třeba 4 metody, které dělají neco jiného a i je velice snadno odregistrovat, aby se neprovadeli. To u toho kodu v te On metodě bys musel mít několik IFů a kontrolovat neco, aby jsi věděl zda máš ten kus kodu provest. S udalostmi se pracuje mnohem lepe.
Desktop: E8400@3.645GHz, Asus P5Q-E, 4GB Ram, 1440GB HDD, Ati HD4850
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Pokročilý

Odeslat příspěvekod Falhar 17. 5. 2012 09:36

Osobně bych spíše použil přetížení. Události vnímám jako externí záležitost. Tedy, že by se měly používat pro rozšíření zvenčí komponenty.

Pokud vytváříš vlastní komponentu, tak mi to připadá čistčí.
Falhar
Junior

Odeslat příspěvekod pakusak 18. 5. 2012 21:34

Zdravím, nerozumím tomuto výrazu v Nargonově příspěvku
base.OnMouseDown(e);
co to vlastně dělá ?
pakusak
Junior

Odeslat příspěvekod Wikan 18. 5. 2012 21:41

Zavolá metodu OnMouseDown() předka.
Wikan
Pokročilý
Uživatelský avatar

Odeslat příspěvekod pakusak 16. 6. 2012 07:01

Zdravím, tak jsem se rozhodl použít vlastní registraci událostí, ale narazil jsem na MouseWheel,
které takto nefunguje, ale jako překrývaná metoda ano. Udělal jsem na to jednoduchý výcuc, na formu je nakliknutý Panel, na něm se dynamicky vytvoří PictureBox a ten chci obsluhovat,
v čem je problém ?

Kód: Vybrat vše
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace malysketch
{
    public partial class Form1 : Form
    {
        public PictureBox pict;
        public Form1()
        {
            InitializeComponent();
            pict = new PictureBox();
            pict.BackColor = Color.FromArgb(40, 70, 70);
            pict.Dock = DockStyle.Fill;
            pict.MouseDown += new MouseEventHandler(f_MouseDown);
            pict.MouseUp += new MouseEventHandler(f_MouseUp);
            pict.MouseWheel +=new MouseEventHandler(pict_MouseWheel);
            pict.Parent = panel1;
            pict.Show();
    }
        //
        public void f_MouseDown(object sender, MouseEventArgs e)
        { pict.BackColor = Color.FromArgb(240, 0, 0); }
        //
        public void f_MouseUp(object sender, MouseEventArgs e)
        { pict.BackColor = Color.FromArgb(0, 0, 250); }
        //
        /*
        protected override void OnMouseWheel(MouseEventArgs e)
        {
           Random rc = new Random();
            pict.BackColor = Color.FromArgb(rc.Next(255), rc.Next(255), rc.Next(255));
        }
         * */
        //
         public void pict_MouseWheel(object sender, MouseEventArgs e)
        {
            Random rc = new Random();
            pict.BackColor = Color.FromArgb(rc.Next(255), rc.Next(255), rc.Next(255));
        }
    }
}
pakusak
Junior


  • Podobná témata
    Odpovědi
    Zobrazení
    Autor

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků