none
Exibir Informações ao passar mouse RRS feed

  • Pergunta

  • Olá pessoal,

    Estou desenvolvendo um programa, e preciso exibir algumas informações que serão lidas de um banco de dados. Porém essas informações terão que aparecer como uma nova janela, que deve aparecer ao lado do mouse e somente enquanto o mouse ficar em cima de um botão específico (também poderia ser outra coisa ao invés de um botão).

    Isso que eu estou querendo funcionaria da seguinte forma: Tenho um botão que vai representar uma sala de aula, e ao passar o mouse em cima desse botão será exibido uma janela com o professor que está dando aula no momento, a quantidade de alunos dentro da sala, o horário inicial e final da aula e também o tempo restante de aula.

    essas informações ficarão a mostra em uma janela de localidade fixa e irá desaparecer se eu tirar o mouse da área desse botão.

    Obrigado!


    sexta-feira, 10 de julho de 2015 23:04

Respostas

  • Segue abaixo um pequeno exemplo de como tu poderia fazer.

    public Form1()
            {
                InitializeComponent();
            }
    
            private Form2 _form;
    
            private void button1_MouseEnter(object sender, EventArgs e)
            {
                var button = sender as Button;
                var buttonLocation = button.Location;
                _form = new Form2();
                _form.StartPosition = FormStartPosition.Manual;
                _form.Location = PointToScreen(new Point(buttonLocation.X + button.Width, buttonLocation.Y + button.Height));
                _form.Show();
                this.Focus();
                _form.BringToFront();
            }
    
            private void button1_MouseLeave(object sender, EventArgs e)
            {
                _form.Close();
                _form.Dispose();
            }

    Caso você não queira que a borda do form e os botões de minimizar, maximizar e fechar apareçam, você pode sertar a propriedade FormBorderStyle no form para None.


    sábado, 11 de julho de 2015 13:31

Todas as Respostas

  • Olá Gabriel, se essas informações não forem editáveis, você pode usar um ToolTip ao invés de uma janela.
    sábado, 11 de julho de 2015 01:21
  • Realmente as informações não serão editáveis, porém um ToolTip é uma coisa pouco chamativa e com poucos recursos.

    Precisaria que fosse um outro form!

    sábado, 11 de julho de 2015 02:36
  • Segue abaixo um pequeno exemplo de como tu poderia fazer.

    public Form1()
            {
                InitializeComponent();
            }
    
            private Form2 _form;
    
            private void button1_MouseEnter(object sender, EventArgs e)
            {
                var button = sender as Button;
                var buttonLocation = button.Location;
                _form = new Form2();
                _form.StartPosition = FormStartPosition.Manual;
                _form.Location = PointToScreen(new Point(buttonLocation.X + button.Width, buttonLocation.Y + button.Height));
                _form.Show();
                this.Focus();
                _form.BringToFront();
            }
    
            private void button1_MouseLeave(object sender, EventArgs e)
            {
                _form.Close();
                _form.Dispose();
            }

    Caso você não queira que a borda do form e os botões de minimizar, maximizar e fechar apareçam, você pode sertar a propriedade FormBorderStyle no form para None.


    sábado, 11 de julho de 2015 13:31
  • Perfeito Bruno,

    Muito Obrigado!!!!!

    Resolveu totalmente o que eu queria!!! Até a propriedade "FormBorderStyle: None" eu iria precisar!


    Só que está acontecendo uma coisa estranha...

    Quando eu chego com o mouse na borda da direita do botão (exatamente em sua extremidade) o form principal começa a piscar como se tivesse exibindo e fechando o outro form repetidamente.

    Sabe me dizer algo sobre isso?

    sábado, 11 de julho de 2015 17:47
  • Tentei reproduzir seu problema aqui e não consegui, tenta fazer o seguinte, aumenta um pouco o offset em relação a posição do botão.

    _form.Location = PointToScreen(new Point(buttonLocation.X + button.Width + 10, buttonLocation.Y + button.Height + 10));

    sábado, 11 de julho de 2015 18:18
  • Perfeito! funcionou!

    Mais uma vez obrigado Bruno!

    sábado, 11 de julho de 2015 19:48