PDA

View Full Version : [Visual C# - help Windows Forms]


fabio80s
22-02-2007, 11:36
Ciao a tutti, ho il seguente problema : il mio programmino apre una windows form in cui vengono inseriti dei parametri da parte dell'utente, poi si può decidere se resettare tali parametri oppure dare l'ok, e ciò avvierà l'elaborazione. Fin qui tutto bene. Il problema è questo : se chiudo la finestra con il pulsante "X" in alto a destra, l'elaborazione parte lo stesso, ovviamente i parametri passati al programmino sono quelli che ho impostato di default. Io vorrei invece che, quando decido di chiudere la form cliccando sulla "X" in alto a destra, la finestra si chiuda e l'elaborazione si fermi. Come posso fare? Tenete presente che è la prima volta che uso un tale ambiente e le windows forms ;)

Grazie a chi mi risponderà :)

RaouL_BennetH
22-02-2007, 11:42
Puoi decidere più semplicemente di non mostrare il pulsante "X" ma di creare un tuo pulsante di uscita, dove come codice potresti mettere:


Application.Exit()

//oppure

this.Close();
this.Dispose(); //se hai implementato un'interfaccia IDisposable.

fabio80s
22-02-2007, 12:12
Puoi decidere più semplicemente di non mostrare il pulsante "X" ma di creare un tuo pulsante di uscita, dove come codice potresti mettere:


Application.Exit()

//oppure

this.Close();
this.Dispose(); //se hai implementato un'interfaccia IDisposable.



Ti ringrazio, ora provo.:) Per non mostrare la "X" però come faccio?

RaouL_BennetH
22-02-2007, 12:29
Nel designer ti basta settare la proprietà:

FormBorderStyle su "none".

Premier
22-02-2007, 14:21
Ciao a tutti, ho il seguente problema : il mio programmino apre una windows form in cui vengono inseriti dei parametri da parte dell'utente, poi si può decidere se resettare tali parametri oppure dare l'ok, e ciò avvierà l'elaborazione. Fin qui tutto bene. Il problema è questo : se chiudo la finestra con il pulsante "X" in alto a destra, l'elaborazione parte lo stesso, ovviamente i parametri passati al programmino sono quelli che ho impostato di default. Io vorrei invece che, quando decido di chiudere la form cliccando sulla "X" in alto a destra, la finestra si chiuda e l'elaborazione si fermi. Come posso fare? Tenete presente che è la prima volta che uso un tale ambiente e le windows forms ;)

Grazie a chi mi risponderà :)

Senza privarti del formborder, e senza creare ulteriori pulsanti, devi associare al form la funzione di chiusura ossia una funzione che contiene Application.Exit() e associ tale funzione all'evento FormClosed del form.

Ciao

RaouL_BennetH
22-02-2007, 14:27
Senza privarti del formborder, e senza creare ulteriori pulsanti, devi associare al form la funzione di chiusura ossia una funzione che contiene Application.Exit() e associ tale funzione all'evento FormClosed del form.

Ciao

Si, in effetti è più semplice :)

Allora basta che selezioni dal designer le action possibili dal form, e poi fai doppio click su FormClosed e ci scrivi quella funzione.

fabio80s
23-02-2007, 11:20
Grazie a tutti per le risposte, vi farò sapere! :)

fabio80s
26-02-2007, 15:46
Altrimenti il tasto "X" che nome ha? Come posso disattivarlo? Grazie:)

fabio80s
27-02-2007, 12:45
up

fabio80s
28-02-2007, 15:45
Help! Come si chiama la "x" in alto a destra? :cry:

RaouL_BennetH
28-02-2007, 17:11
Help! Come si chiama la "x" in alto a destra? :cry:

In realtà non è così immediato quello che vuoi fare, dato che dovresti fare un override dell'evento associato alla chiusura del form.

In rete ho trovato questi esempi, uno che non utilizza le API ed uno che invece le utilizza:


//questo esempio non fa utilizzo delle API di windows:

protected override void WndProc(ref System.Windows.Forms.Message m)
{
if(m.Msg != 0x0010)
{
base.WndProc(ref m);
}
else
{
//Windows has send the WM_CLOSE message to your form.
//Ignore this message will make the window stay open.
}
}



//questo esempio utilizza le API

using System.Runtime.InteropServices;


private const int MF_BYPOSITION = 0x400;
private const int MF_REMOVE = 0x1000;
private const int MF_DISABLED = 0x2;

[DllImport("user32.Dll")]
public static extern IntPtr RemoveMenu(int hMenu, int nPosition,long wFlags);

[DllImport("User32.Dll")]
public static extern IntPtr GetSystemMenu(int hWnd, bool bRevert);

[DllImport("User32.Dll")]
public static extern IntPtr GetMenuItemCount(int hMenu);

[DllImport("User32.Dll")]
public static extern IntPtr DrawMenuBar(int hwnd);

public void DisableCloseButton(int hWnd)
{
IntPtr hMenu;
IntPtr menuItemCount;

//Obtain the handle to the form's system menu
hMenu = GetSystemMenu(hWnd, false);

// Get the count of the items in the system menu
menuItemCount = GetMenuItemCount(hMenu.ToInt32());

// Remove the close menuitem
RemoveMenu(hMenu.ToInt32(), menuItemCount.ToInt32() - 1,MF_DISABLED | MF_BYPOSITION);

// Remove the Separator
RemoveMenu(hMenu.ToInt32(), menuItemCount.ToInt32() - 2,MF_DISABLED | MF_BYPOSITION);

// redraw the menu bar
DrawMenuBar(hWnd);
}

//chiamare poi il metodo nell'evento Form_Load

DisableCloseButton(this.Handle.ToInt32());



Prova un pò :)