Overrides del metodo OnClick

lunedì 20 luglio 2009 - 12.04

bobosassa Profilo | Newbie

Ciao a tutti,mi sono appena iscritto.
Ho il seguente problema:

Questa è una mia semplice classe "myButton", derivata da Button.
In essa effettuo l'override del metodo Onclick,scrivendo una semplice msgbox.

Public Class myButton
Inherits System.Windows.Forms.Button

Protected Overrides Sub OnClick(ByVal e As EventArgs)
MsgBox("padre")
MyBase.OnClick(e)
End Sub

End Class

A questo punto,in una form pulita,di una windows application, ho il seguente codice:

Imports ClassLibrary1
Public Class Form1
Public Class mybutton_Inherits
Inherits myButton
Protected Overrides Sub OnClick(ByVal e As EventArgs)
MsgBox("figlio")
MyBase.OnClick(e)
End Sub
End Class
End Class

Il mio intendo sarebbe quello,al momento del click,di far apparire solo la msgbox ereditata.
Ciò che ottengo invece...è solo la msgbox della classe Parent.
Dove sbaglio?

grazie

aiedail92 Profilo | Expert

Ciao, e benvenuto sul forum!

Il fatto che ti mostri solo la messagebox della classe padre è abbastanza strano, non è che nella Form hai inserito un myButton al posto di un myButton_Inherits?

Verifica questo e poi continuiamo

Luca

bobosassa Profilo | Newbie

ciao,grazie per la risposta.
Io sono un neofita di dot.net...

Cosa intendi quando dici che devo importare un mybutton_inherits?
Io ho creato un'applicazione windows form,sono andato nella toolbox e da choose item ho scelto mybutton.Sbaglio?

Ad occhio,credo che manchi nel codice della form (magari nel load) il codice che dice di usare per il click di mybutton il metodo onclick che ho derivato.

aiedail92 Profilo | Expert

>ciao,grazie per la risposta.
>Io sono un neofita di dot.net...

E noi siamo qui per aiutare

>Io ho creato un'applicazione windows form,sono andato nella toolbox
>da choose item ho scelto mybutton.Sbaglio?

Allora avevo visto giusto . Dato che hai scelto myButton, quello che è stato inserito è un myButton, non un myButton_Inherit... Prova a trascinare dalla toolbox un myButton_Inherit e dimmi se con quello ottieni entrambe le messagebox

Luca

bobosassa Profilo | Newbie

Il problema è che se vado nella toolbox e faccio choose items,sfogliando tra i mie progetti,posso aggiungere solo mybutton e non mybutton_inherits.
Del resto,credo che sia giusto poter fare ciò,perchè quando sfoglio tra i mie porgetti,scelgo la libreria di controlli in cui c'è mybutton (mentre mybutton_inherits è la classe derivata,nel progetto corrente).

Io pensavo di inserire,nella form,la seguete istuzione:

AddHandler MyButton1.Click, AddressOf Me.mybutton_Inherits.OnClick2

però ottengo errore.

aiedail92 Profilo | Expert

Credo di aver capito perchè ti appare solo mybutton e non mybutton_Inherits nella ToolBox... Prova a spostare la definizione della classe all'esterno della Form:

Da così

Public Class Form1 Inherits Form Public Class mybutton_Inherits Inherits myButton Protected Overrides Sub OnClick(ByVal e As EventArgs) MsgBox("figlio") MyBase.OnClick(e) End Sub End Class End Class

A così

Public Class Form1 Inherits Form End Class Public Class mybutton_Inherits Inherits myButton Protected Overrides Sub OnClick(ByVal e As EventArgs) MsgBox("figlio") MyBase.OnClick(e) End Sub End Class

In questo modo dovrebbe apparirti mybutton_Inherits nella ToolBox, prova ad aggiungerlo, testa, e poi fammi sapere

Luca

bobosassa Profilo | Newbie

Perfetto,quindi era una cosa semplicissima:)

Ora funziona.
Grazie mille.

Ah,nel codice che mi hai postato,ho visto che hai aggiunto "Inherits codice".Come mai?

P.S.
Magari se avrò bisogno di altri aiuti....ti contatto,sperando di non disturbarti.

aiedail92 Profilo | Expert

>Ah,nel codice che mi hai postato,ho visto che hai aggiunto "Inherits
>codice".Come mai?

Se intendi qui:

Public Class Form1 Inherits Form End Class

è perché Form1 deriva da Form, la classe base per ogni form

>Magari se avrò bisogno di altri aiuti....ti contatto,sperando
>di non disturbarti.

Ritieniti libero di farlo

Luca

bobosassa Profilo | Newbie

Si,intendevo proprio quello.
A me funziona anche senza mettere quella istruzione.

Approfitto della tua bravura per farti un'altra domanda
Ho creato una classe per smart device ed un'applicazione sempre per smart device.
Ho seguito lo stesso procedimento...però nella toolbox non mi appare mybutton_inherit

Non è possibile fare ciò su applicazioni per smart device?
Grazie.

Roberto

aiedail92 Profilo | Expert

>A me funziona anche senza mettere quella istruzione.

Funziona perché l'istruzione viene inserita nell'altra parte del codice della form, quello "nascosto" nel file .designer.vb

>Approfitto della tua bravura per farti un'altra domanda
>Ho creato una classe per smart device ed un'applicazione sempre
>per smart device.
>Ho seguito lo stesso procedimento...però nella toolbox non mi
>appare mybutton_inherit
>
>Non è possibile fare ciò su applicazioni per smart device?
>Grazie.

Purtroppo non lo so, non ho mai sviluppato per smart device...

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