przesuwanie okna

0

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ę.

0

Zdarzenie onMouseDown ustawia jakas flage, w zdarzeniu onMouseMove przesuwasz formatke, jesli flaga ustawiona, onMouseUp sciagasz flage.

0

mógłbyś dokłdniej napisać co mam w onMouseMove wpisać?

0

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.

0

nie hula...
ktoś ma inny pomysł?

0

Pokaz kod - nie hula, troche malo mowi :P Mi dziala, obstaje przy swoim ;)

0
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ć?

0

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 ;)

0

ale co z tą flagą mousedown help plz :)

0

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));
            
        }
0

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));
}

0

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);
0

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.

0

ale bez tego też wszystko działa :)

0

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).

0

A jak przerobić kod, aby można było przesuwać formę ale trzymając przycisk na PixtureBox?

1 użytkowników online, w tym zalogowanych: 0, gości: 1