ToolStrip e CancelButton

lunedì 12 ottobre 2009 - 14.52

volperubbia Profilo | Senior Member

Ciao a tutti,
in un form ho un menù costituito da un oggetto ToolStrip che contiene
al suo interno N System.Windows.Forms.ToolStripButton.
Vorrei associare alla property CancelButton del form uno di questi
ToolStripButton, ma i due tipi non sono compatibili.

Qualche idea su come potrei aggirare l'ostacolo?

Davide

freeteo Profilo | Guru

Ciao,
il cancebutton è un utilità veloce per chi premendo ESC vuole chiudere la form.
se vuoi associare un tasto al Cancel della form forse vuoi avere un codice che venga eseguito sia quando si chiude che quando si preme "ESC", quindi secondo me potresti pensare di mettere il codice che vuoi dentro ad un metodo che richiami nel close della form, piuttosto che nella pressione del bottone.
Oppure potresti intercettare il KeyPress su quel tasto a livello di form ed eseguire quindi lo stesso codice nel closing...

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

volperubbia Profilo | Senior Member

Ciao Matteo, ovunque apro un post ti trovo
Al momento ho optato per questa soluzione: disabilitare la X di chiusura,
andando a scrivere qualche riga di chiusura nel form base dell'appicazione,
quello da cui ereditano tutti gli altri.

Public Class BaseForm : Inherits System.Windows.Forms.Form
Private Const MF_BYPOSITION As Int32 = &H400
Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Integer) As Int32
Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Integer, ByVal nPosition As Integer, ByVal wFlags As Integer) As Int32
Public Sub New()
RemoveMenu(GetSystemMenu(MyBase.Handle.ToInt64, 0), 6, MF_BYPOSITION)
End Sub
End Class

Sai mica se c'è una soluzione migliore e/o che consenta di nascondere,
anziche disabilitare solo?

Davide

freeteo Profilo | Guru

>Ciao Matteo, ovunque apro un post ti trovo



>Al momento ho optato per questa soluzione: disabilitare la X
>di chiusura,
>andando a scrivere qualche riga di chiusura nel form base dell'appicazione,
ok



>Sai mica se c'è una soluzione migliore e/o che consenta di nascondere,
>anziche disabilitare solo?
eh purtroppo non puoi farlo con Windowsform (a meno di non cambiare la Region della form, quindi di fatto fare un form della forma che vuoi tu http://msdn.microsoft.com/it-it/library/system.windows.forms.control.region.aspx).
L'unica cosa che penso avrai visto anche tu, è impostare la proprietà "ControlBox=false" nella form ma ti fa sparire anche l'icona a sinistra...

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

AntCiar Profilo | Expert

Ciao Davide.

Per evitare di chiudere una form con la X invece di scomodare la librerioa User32 potevi semplicemente utilizzare:

Private toClose As Boolean = False

Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
If Not Me.toClose Then
e.Cancel = True
End If
End Sub

In questo modo fino a che "toClose" è false ogni volta che invochi il metodo Me.Close() la form rimane aperta. Quando la devi chiudere basta che porti a True la variabile e invochi il me.Close().

Per quanto riguarda il CancelButton puoi ascoltare la pressione del tasto Esc

volperubbia Profilo | Senior Member

Grazie
avevo già pensato a questa possibilità, anche a me non piace
scomodare altre librerie.
Però in questo modo la X di chiusura resterebbe visibile e abilitata,
pur non avendo alcun effetto.
Boh ... direi di optare per la soluzione precedente.
Per quanto riguarda il CancelButton e pressione del tasto Esc, tendo
a evitarlo nei forms, preferisco avere dall'utente una "volontà di uscita"
più chiara (... anche a me spesso capita di premere tasti senza volerlo).

Davide

AntCiar Profilo | Expert

Ciao.
Se vuoi far scomparire la X puoi impostare la proprietà ControlBox a false. IN questo modo scompaiono anche il minimized e il maximmized control
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5