Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

382
Visualizações
¿Cómo mostrar u ocultar un panel usando las coordenadas del mouse si se cambia el tamaño del formulario?

Tengo un formulario que contiene un Panel.
En un principio, este Panel es invisible y se vuelve visible cuando el mouse ingresa a su Área de Cliente.
El código que uso funciona siempre que no cambie el tamaño del formulario.
Al cambiar el tamaño del formulario, este código ya no funciona.

ingrese la descripción de la imagen aquí

Probé este código:

 Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove Label1.Text = e.Location.ToString If e.Location.Y > 441 Then Panel1.Visible = True Else Panel1.Visible = False End If End Sub
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Dado que parece que este Panel está anclado en la parte inferior de su Formulario, puede considerar los Límites del Panel (el rectángulo que describe el área que ocupa un Control dentro de su contenedor) para determinar si la posición del Ratón está dentro de su Área de Cliente.

El método Rectangle.Contains(Point) devuelve True o False si un Point está contenido dentro de los límites del Rectangle especificado.
A continuación, puede utilizar el resultado booleano para establecer también la visibilidad del Panel:

 Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove Panel1.Visible = Panel1.Bounds.Contains(e.Location) End Sub

adicional :
Cómo manejar otros casos comunes:

  • Panel1 no es un elemento secundario directo del formulario, por lo que el formulario no recibirá eventos del mouse cuando el puntero del mouse entre en los límites del elemento primario real del panel.
  • El área de cliente del formulario está cubierta por otros controles, por lo que no recibirá eventos del mouse cuando el puntero del mouse se desplace sobre estos controles.

No puede agregar controladores de eventos a todos los controles en el formulario que puedan , en algún momento, estar involucrados en estas acciones. Los controles se pueden agregar, eliminar o mover en el diseñador. No factible.

En estos y otros casos similares, resulta útil implementar IMessageFilter .
Puede usar los métodos Application.AddMessageFilter / Application.RemoveMessageFilter para monitorear los mensajes dirigidos a cualquier Control antes de que se envíen al destino.
También puede evitar que los mensajes lleguen al destino, si es necesario, devolviendo True en el método IMessageFilter.PreFilterMessage() .

Aquí, la clase Form implementa IMessageFilter directamente. Por supuesto, puede crear una clase auxiliar reutilizable para hacer lo mismo.

 Public Class SomeForm Implements IMessageFilter Private Const WM_MOUSEMOVE As Integer = &H200 Public Sub New() InitializeComponent() Application.AddMessageFilter(Me) End Sub Protected Overrides Sub OnFormClosed(e As FormClosedEventArgs) Application.RemoveMessageFilter(Me) MyBase.OnFormClosed(e) End Sub Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage If m.Msg = WM_MOUSEMOVE Then Panel1.Visible = Panel1.RectangleToScreen(Panel1.ClientRectangle).Contains(MousePosition) End If Return False End Function End Class
over 4 years ago · Santiago Trujillo Relatório

0

Prueba esto:

 Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove Label1.Text = e.Location.ToString If eX > Panel1.Left And eX < Panel1.Left + Panel1.Width And eY > Panel1.Top And eY < Panel1.Top + Panel1.Height Then Panel1.Visible = True Else Panel1.Visible = False End If End Sub
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda