Oppure

Loading
07/11/13 9:04
Thejuster
Salve ragazzi.

Durante la progettazione del mio programma ( Intendo lato codice non ide )

sto implementando un sistema per permettere all'utente di ridimensionare i controlli a runtime.

Vi elenco solo i membri necessari al funzionamento.


bool c_sel; //Se è selezionato un controllo
bool ready; //Se il cursose si trova nell'area di ridimensionamento
bool resize; //Abilito il ridimensionamento

Control SelectedObject; //Oggetto selezionato




 private void Form_MouseDown(object sender, MouseEventArgs e)
        {

            //Se e selezionato un oggetto
            //Se e possibile ridimensionare l'oggetto
            //Avvia il ridimensionamento
            if (c_sel && ready) { resize = true; } 


        }



private void Form_MouseMove(object sender, MouseEventArgs e)
        {

            //Ridimensionare i controlli
            if (c_sel)
            {
                if (e.X > ((Control)SelectedObject).Location.X - 5 && e.X < ((Control)SelectedObject).Location.X + 5 &&
                    e.Y > ((Control)SelectedObject).Location.Y-5 && e.Y < ((Control)SelectedObject).Location.Y+5)
                {
                    Cursor = Cursors.SizeNWSE;
                    ready = true; //Abilito la possibilità di ridimensionare
                }
                else
                {
                    Cursor = Cursors.Arrow;
                    ready = false; //disabilito la possibilità di ridimensionare
                }
            }

            //Ridimensionamento
            if (resize)
            {
                Cursor = Cursors.SizeNWSE;
                ((Control)SelectedObject).Width = e.X;
                ((Control)SelectedObject).Height = e.Y;
                ((Control)SelectedObject).Location = new Point(((Control)SelectedObject).Width, ((Control)SelectedObject).Height);

            }

        }

        private void Form_MouseUp(object sender, MouseEventArgs e)
        {
            resize = false;
        }





Il problema semplice che ho e al void Mouse Move, il tutto funziona regolarmente
ma quello che vorrei ottenere e un effetto tipo Visual Studio.

Se infatti provo a ridimensionare il controllo esso si ridimensiona in entrambi i 4 lati.



//Ridimensionamento
            if (resize)
            {
                Cursor = Cursors.SizeNWSE;
                ((Control)SelectedObject).Width = e.X;
                ((Control)SelectedObject).Height = e.Y;
                ((Control)SelectedObject).Location = new Point(((Control)SelectedObject).Width, ((Control)SelectedObject).Height);

            }




A runtime, quando l'oggetto è selezionato appaiono i rettangolini come in visual studio sull'oggetto per permettere appunto di ridimensionare.
Questa porzione dovrebbe ridimensionare il controllo partendo da:

Alto / Sinistra

+-----------
| |
|_________|

e rimanere fermo in controllo in basso a destra.
ovviamente il mio codice non funziona come dovrebbe, perche vengono ridimensionati tutti e 4 lati.
e di questo sono consapevole.

Conoscete un modo per far questo?
Ovvero ridimensionare partendo da NW ma rimanendo fermo SE.
mire.forumfree.it/ - Mire Engine
C# UI Designer
12/11/13 1:49
gigisoft
prova a scrivere così nella MouseMove:

int DiffX = ((Control)SelectedObject).Location.X - e.X;
int DiffY = ((Control)SelectedObject).Location.Y - e.Y;

if ((Abs(DiffX) > 5) && (Abs(DiffX) > 5))
   {

[...]

if (resize)
   {
     ((Control)SelectedObject).Location.X = e.X;
     ((Control)SelectedObject).Location.Y = e.Y;
     ((Control)SelectedObject).Width += DiffX;
     ((Control)SelectedObject).Height += DiffY;
   }


Ciao. :k:
aaa
12/11/13 9:58
Thejuster
scusami gigi cosa sarebbe Abs?

Per il resto del calcolo funziona benissimo. grazie mille gigi :D
Ultima modifica effettuata da Thejuster 12/11/13 10:05
mire.forumfree.it/ - Mire Engine
C# UI Designer
12/11/13 11:19
gigisoft
Postato originariamente da Thejuster:

scusami gigi cosa sarebbe Abs?

Per il resto del calcolo funziona benissimo. grazie mille gigi :D


Ma un giro su Google era troppo faticoso?
Comunque Abs() calcola il valore assoluto.

Ciao. :k:
aaa