MouseClick vb 2005

giovedì 10 maggio 2007 - 16.33

StefanoLep Profilo | Senior Member

Ciao a tutti, vorrei disabilitare il click destro su alcune text, ho inserito un msgbox sull'evento mouseclick per vedere quando si verifica...ma non si verifica mai, possibile? Non succede niente nè con il destro nè col sinistro.
Suggerimenti?

Brainkiller Profilo | Guru

>Ciao a tutti, vorrei disabilitare il click destro su alcune text,
>ho inserito un msgbox sull'evento mouseclick per vedere quando
>si verifica...ma non si verifica mai, possibile? Non succede
>niente nè con il destro nè col sinistro.
>Suggerimenti?

Ciao,
allora per disabilitare il tasto destro del mouse bisogna lavorare un po' in modalità vecchio stile. Devi crearti una classe nuova TextBox derivata in questo modo:

class MyTextBox : System.Windows.Forms.TextBox { protected override void WndProc(ref System.Windows.Forms.Message m) { if (m.Msg == 0x204) { return; } base.WndProc(ref m); } }

Successivamente nel tuo progetto puoi istanziare questa nuova classe e aggiungerla alla form in questo modo:

MyTextBox t = new MyTextBox(); this.Controls.Add(t);

a questo punto il click con il tasto destro su una TextBox verrà ignorato.
Il meccanismo è semplice. Nel codice sopra ti innesti nel codice che gestisce i messaggi Windows che oggetti e finestre ricevono. Quando il controllo riceve il messaggio 0x204 equivalente al click down con il tasto destro fa un return quindi viene ignorato. Se sai un po' di programmazione Win32API ti sarà chiaro, se non sai niente capirai un po' meno.
Ciao


David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

StefanoLep Profilo | Senior Member

Mi potresti allegare il codice in vb? Non ho dimestichezza nè con C# nè con API....

StefanoLep Profilo | Senior Member

Ho trovato un sito che permette la traformazione di codice da VB a C# e viceversa:

http://www.carlosag.net/Tools/CodeTranslator/Default.aspx

Class MyTextBox Inherits System.Windows.Forms.TextBox Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) If (m.Msg = 516) Then Return End If MyBase.WndProc(m) End Sub End Class

Ora va benissimo grazie
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