Jump to content

Custom MessageBox [RESOLVIDO]


pmaster
 Share

Recommended Posts

Boa tarde a todos.

Tenho o seguinte problema:

Eu queria criar a minha própria messagebox, então decidi criar um usercontrol. Até aqui tudo bem, mas eu preciso que este usercontrol tenha as mesmas funcionalidades que a messagebox nativa, que retorne na form onde foi chamada o valor de sim ou não.

Então para fazer esta funcionalidade tentei herdar a minha messagebox da messagebox nativa.

Inherits MessageBox

Mas imediatamente obtenho este erro:

"Base class 'System.Windows.Forms.MessageBox' specified for class 'Minha_msgbox' cannot be different from the base class 'System.Windows.Forms.UserControl' of one of its other partial types."

Alguém me pode dar alguma dica ? É que este assunto é novo para mim ainda.

Obrigado 😄

Link to comment
Share on other sites

Não sei se é correcto o que vou dizer mas reparei agora que a messagebox não é herdável.

Error 2 Class 'System.Windows.Forms.MessageBox' has no accessible 'Sub New' and cannot be inherited.

Sendo assim, alguém de sabe dar alguma sugestão?

Link to comment
Share on other sites

A classe MessageBox até podia ser herdável. O problema é que um UserControl já herda e a Form também já herda e um objecto não pode herdar de duas classes.

Mas não precisas de um usercontrol para o efeito. Nem da classe messagebox tão pouco.

Basta-te uma form.

Para além de dares o aspecto visual que queiras, só precisas de adicionar um Overload ao Show, ou fazes um método qualquer que queiras e nesse método passas os elementos variáveis, como mensagem, título e/ou tipo de mensagem ou os botões que aparecem.

No final desse método chamas, com retorno, o ShowDialog da base (do form)

    Public Overloads Function Show(ByVal Mensagem As String, ByVal Titulo As String) As DialogResult
'lógica para apanhar mensagem e título e/ou mostrar e esconder botões consoante um tipo ou assim
        Return Me.ShowDialog()
    End Function

Nos botões e no FormClosing só tens de garantir que o form é fechado ao dar um valor à propriedade DialogResult da base, por exemplo:

    Private Sub BotaoOK(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.DialogResult = DialogResult.OK
    End Sub

O form é automaticamente fechado e volta com o dialogresult que lhe deste.

No caller bastaria então, por exemplo:

        Dim MB As New MBox

        If MB.Show("Uma mensagem", "Um título") = DialogResult.OK Then
            'carregou em OK
        End If

Há muitas maneiras de fazer isto.

Posso fazer-te um exemplo genérico se estiveres completamente às aranhas.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

A sugestão que dei não é bem a criação dos nossos próprios controlos.

É só uma forma de apresentar uma form.

Li-o agora, na diagonal, e o artigo parece ser um "hella good start" para o efeito.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Ribeiro55 muito obrigado, funcionou na perfeição  😉

Desconhecia por completo que com " Return  Me.ShowDialog()  " podia-mos então retornar o valor para a form onde foi chamada, neste caso, a messagebox.

Muito Obrigado  🙂

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.