Resize button

martedì 02 dicembre 2008 - 16.40

toniovigi Profilo | Expert

Ciao a tutti,

come si fa a fare in modo tale che quando lancio la mia WinForm possa fare un resize di un bottone??Quindi allo stesso modo di come si fa il resize della
form(escono le freccettine)

GRazie tante

Antonio

aiedail92 Profilo | Expert

Ciao

Abbiamo già affrontato la questione in questo topic (lì si parlava di PictureBox, ma la sostanza è la stessa):

http://www.dotnethell.it/forum/messages.aspx?ThreadID=26963

Il progetto di esempio è scritto in Vb.Net, se non lo capisci chiedi qui che te lo trascrivo in C#

Luca

toniovigi Profilo | Expert

scusa aide,nn prendermi per scemo, nn riesco a capire dove è la parte che serve a me,devo fare solo un resize di un bottone,li fa il print di una form

SCusa e grazie ancora!

aiedail92 Profilo | Expert

Non preoccuparti nessuno ti prende per scemo

Quello che dovevi guardare è il progetto di esempio, al secondo post. Comunque lo trovi allegato anche in questo post.

Luca

toniovigi Profilo | Expert

azz..nn ho Visual Studio ma io uso Visual C# Express,...

aiedail92 Profilo | Expert

Ok, questo è l'indispensabile, già convertito in C#:

public class TuaForm { //L'azione che deve essere eseguita allo spostamento del mouse MouseAction action = MouseAction.None; //È la posizione del mouse all'inizio degli spostamenti Point offset = Point.Empty; //Le possibili azioni che si possono effettuare col mouse [Flags()] public enum MouseAction { None = 0, Move = 1, ResizeN = 2, ResizeE = 4, ResizeS = 8, ResizeW = 16, ResizeNE = ResizeN | ResizeE, ResizeNW = ResizeN | ResizeW, ResizeSE = ResizeS | ResizeE, ResizeSW = ResizeS | ResizeW } //Ottiene l'azione in base alla posizione del mouse rispetto al controllo protected static MouseAction GetMouseAction(Control target, Point mousePos) { MouseAction res = MouseAction.None; if (mousePos.X < 10) { res = MouseAction.ResizeW; } else if (mousePos.X > target.Width - 10) { res = MouseAction.ResizeE; } if (mousePos.Y < 10) { res = res | MouseAction.ResizeN; } else if (mousePos.Y > target.Height - 10) { res = res | MouseAction.ResizeS; } if (res == MouseAction.None) return MouseAction.Move; return res; } //Questo è il gestore per l'evento MouseMove dei tuoi Button private void controls_MouseMove(object sender, MouseEventArgs e) { Control that = (Control)sender; if (action == MouseAction.Move) { //muove il controllo that.Left += e.X - offset.X; that.Top += e.Y - offset.Y; return; } //Imposta il cursore if (action == MouseAction.None) { switch (GetMouseAction(that, e.Location)) { case MouseAction.ResizeE: case MouseAction.ResizeW: that.Cursor = Cursors.SizeWE; break; case MouseAction.ResizeN: case MouseAction.ResizeS: that.Cursor = Cursors.SizeNS; break; case MouseAction.ResizeNE: case MouseAction.ResizeSW: that.Cursor = Cursors.SizeNESW; break; case MouseAction.ResizeNW: case MouseAction.ResizeSE: that.Cursor = Cursors.SizeNWSE; break; default: that.Cursor = Cursors.Default; break; } return; } //Ridimensionamenti if ((action & MouseAction.ResizeN) == MouseAction.ResizeN) { that.Top += e.Y - offset.Y; that.Height -= e.Y - offset.Y; } if ((action & MouseAction.ResizeE) == MouseAction.ResizeE) { that.Width = e.X; } if ((action & MouseAction.ResizeS) == MouseAction.ResizeS) { that.Height = e.Y; } if ((action & MouseAction.ResizeW) == MouseAction.ResizeW) { that.Left += e.X - offset.X; that.Width -= e.X - offset.X; } } //Questo è il gestore per l'evento MouseDown dei tuoi Button private void buttons_MouseDown(object sender, MouseEventArgs e) { if (e.Button == Windows.Forms.MouseButtons.Left) { action = GetMouseAction(sender, e.Location); offset = e.Location; } } //Questo è il gestore per l'evento MouseUp dei tuoi Button private void buttons_MouseUp(object sender, MouseEventArgs e) { action = MouseAction.None; } }

Luca

toniovigi Profilo | Expert

gentilissimo..adesso testo e ti faccio sapere,

io pensavo che ci fosse un'opzione da fleggare invece a quanto parte non è cosi

Grazie:!

toniovigi Profilo | Expert

nn mi torna qualcosa in quel codice

1)MouseAction è un qualcosa che a livello di classe nn cè
2)I mouseDown se li modifico come adesso poi mi permette anche di spostarli?
Luca, hai qualcosa di gia fatto e funzionante in c#??

Questo che mi hai dato da molti errori,

non si può compattare??
Grazie

aiedail92 Profilo | Expert

Ciao

Se guardi nel codice che ti ho mandato c'è la definizione di MouseAction, è questa:

//Le possibili azioni che si possono effettuare col mouse [Flags()] public enum MouseAction { None = 0, Move = 1, ResizeN = 2, ResizeE = 4, ResizeS = 8, ResizeW = 16, ResizeNE = ResizeN | ResizeE, ResizeNW = ResizeN | ResizeW, ResizeSE = ResizeS | ResizeE, ResizeSW = ResizeS | ResizeW }

Il codice così come te l'ho dato fa sia spostamento che ridimensionamento.

Luca

toniovigi Profilo | Expert

Ciao ragazzi ultimi problemini,
il primo è:

private void buttons_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == Windows.Forms.MouseButtons.Left) {
action = GetMouseAction(sender, e.Location);

offset = e.Location;
}
}

ricevo errore sulle righe

Windows.Forms.MouseButtons.Left ---> impossibile convertire da object a system.windows.forms.control

action = GetMouseAction(sender, e.Location); --> Corrispondenza migliore x il metodo di overload x Winapplication1.form2.getmouseaction presenta alcuni argomenti non validi

Secondo, per sbaglio ho cliccato su un file è ho fatto escludi dal progetto, e nn lo vedo più!come faccio a reincluderlo???

Terza e ultima cosa, ho aggiunto una nuova Form alla mia applicazione,cè un modo al debug di fare avviare solo quella quindi Form2 e nn Form1?

Grazie tante

Gentilissimi

aiedail92 Profilo | Expert

Il primo errore è dovuto al fatto che ho fatto una conversione automatica da VB.Net (dove sono ammesse conversioni implicite) a C# (dove non lo sono). Lo risolvi con un semplice cast:

action = GetMouseAction((Control)sender, e.Location);

Per reincludere il file nel progetto devi clickare n alto in esplora soluzioni su Mostra tutti i file, quindi navigare al file escluso, clickarci col destro e selezionare Includi nel progetto

Per avviare la seconda Form invece che la prima, devi aprire il file Program.cs e modificare la riga

Application.Run(new Form1());

in

Application.Run(new FormDaAvviare());

Luca

toniovigi Profilo | Expert

PRIMA COSA:MITICOOOOO

ULTIMO PROBLEMINO

if (e.Button == Windows.Forms.MouseButtons.Left)

il nome windows non esiste nel contesto corrente e mi sottolina in rosso windows

Scusa se ti faccio mille domande, ma era da tanto tempo che non programmavo qui al lavoro allora ho bisogno di una rispolverata

cmq ti devo una cioccolata!!hahaha

Grazie!!!

aiedail92 Profilo | Expert

Altro problema derivato dalla conversione da VB...

Aggiungigli davanti un System. oppure rimuovi tutti i namespace:

if (e.Button == System.Windows.Forms.MouseButtons.Left)

Oppure

if (e.Button == MouseButtons.Left)

>cmq ti devo una cioccolata!!hahaha



>Grazie!!!

È un piacere

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5