Witam
Mam pytanie. Ukryłem pasek tytułu (własciwość FormBorderStyle = none) i chce teraz aby formę można było przewsuwać klkiając w dowolnym miejscu formy. Jak to zrobić?
Z góry dziękuję.
Zdarzenie onMouseDown ustawia jakas flage, w zdarzeniu onMouseMove przesuwasz formatke, jesli flaga ustawiona, onMouseUp sciagasz flage.
mógłbyś dokłdniej napisać co mam w onMouseMove wpisać?
W onMouseDown zapamietujesz wspolrzedne klikniecia mysz, powiedzmy w skladowych x i y. W onMouseDown robisz:
if(!mouseDown)//wlasna flaga klikniecia
return;
Form formatka = ((Form)sender);
formatka.SetDesktopLocation(formatka.DesktopLocation.X - (x - e.X), formatka.DesktopLocation.Y - (y - e.Y));
```
i powinno hulac.
nie hula...
ktoś ma inny pomysł?
Pokaz kod - nie hula, troche malo mowi :P Mi dziala, obstaje przy swoim ;)
int x, y;
x = MousePosition.X;
y = MousePosition.Y;
if (!mouseDown)
return;
Form formatka = ((Form)sender);
formatka.SetDesktopLocation(formatka.DesktopLocation.X - (x - e.X), formatka.DesktopLocation.Y - (y - e.Y));
Mam probleem z tą flagą klknięcia jak to zrobić?
Ekhem... chyba nie przeczytales tego, co napisalem :/ pozycje myszy w trakcie klikniecia zapamietujesz w zdarzeniu onMouseDown, to raz. Po drugie mozesz je zrobic jako skladowe. Tak samo z flaga. To co napisales powyzej nie ma prawa dzialac (chocby dlatego, ze przeciez wspolrzednie w zdarzeniu i wspolrzedne myszki to dokladnie to samo :P). Swoja droga machnalem sie powyzej - ten kod co dalem dotyczy onMouseMove ;)
ale co z tą flagą mousedown help plz :)
poradziłem już sobie prawie. ale przy klknięciu przewsuwa mi się okno do górnego lewego rogu ekranu i wtedy jak trzymam wcisniety przycisk i przesuwam myszką to wszystko działa OK. tylko dlaczeog sie przesuwa przy klknieciu ;/
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
int x, y;
aa = 2;
x = MousePosition.X;
y = MousePosition.Y;
label6.Text = x.ToString();
label7.Text = y.ToString();
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
aa = 1;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (aa != 2)//wlasna flaga klikniecia
return;
Form formatka = ((Form)sender);
formatka.SetDesktopLocation(formatka.DesktopLocation.X - (Convert.ToInt32(label6.Text) - e.X), formatka.DesktopLocation.Y - (Convert.ToInt32(label7.Text) - e.Y));
}
No dobra...
Gdziekolwiek w klasie, poza metodami piszesz:
int x,y;
bool mouseDown = false;
```
To sie nazywa skladowe.
a pozniej:
void Form1MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
mouseDown = true;
x = e.X;
y = e.Y;
}
void Form1MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
mouseDown = false;
}
void Form1MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(!mouseDown)
return;
Form formatka = ((Form)sender);
formatka.SetDesktopLocation(formatka.DesktopLocation.X - (x - e.X), formatka.DesktopLocation.Y - (y - e.Y));
}
wielkie dzięki! już działa.
mam jeszcze jedną prośbę. moglbys mi wytłumaczyć w jakim celu jest ta linia:
Form formatka = ((Form)sender);
Rzutowanie obiektu wywolujacego zdarzenie (czyli formatki, bo na nia kliknieto, czy tez ona odbiera zdarzenie przesuwania myszki) i zapamietanie w zmiennej. Po to, zebys linijke nizej nie musial tego rzutowania 3x wykonywac.
ale bez tego też wszystko działa :)
Jezeli bez tego wszystko dziala, to znaczy, ze gdzies indziej masz deklaracje obiektu typu Form o nazwie formatka, jako skladowa na przyklad albo odnosisz sie przez this (w domysle tez bez).
A jak przerobić kod, aby można było przesuwać formę ale trzymając przycisk na PixtureBox?