Como posso saber se meu formulário é exibido além da tela?
-
06-09-2019 - |
Pergunta
Então, eu tenho duas formas, Mainform e extraform.
extraform é definido sempre deslocado para a direita de mainform quando mainform inicializa
Às vezes mainform ocupa ambos os monitores e extraform é empurrado para fora da tela para nunca mais ser visto novamente. Eu gostaria de evitar isso, se possível. Como posso fazê-lo? Ele deve suportar dois monitores, que podem ou não podem ter distância entre eles (ou seja, tela 1 é 20px à esquerda da tela 2).
Como posso fazer isso?
Solução
Você pode usar a classe Screen para trabalhar para fora onde sua janela é relativo ao desktop. A classe A tela tem um método FromRectangle, para que possa descobrir qual tela você deve posicionar o formulário on (passando propriedade Bounds da sua forma in).
Cada objeto Tela tem uma propriedade Bounds, que você pode usar para comparar com a localização e tamanho da sua janela, e ajustá-los em conformidade.
Outras dicas
Depende do que você quer deve acontecer quando extraform é empurrado além dos limites da tela (s).
No entanto, para descobrir se é ou não está sendo empurrado para fora, é bastante simples usando a classe System.Windows.Forms.Screens. Então você pode fazer verificação de limites assim:
foreach (var screen in Screen.AllScreens)
{
if(screen.Bounds.Contains(this.Bounds))
{
Console.WriteLine("Device "+screen.DeviceName+" contains form!");
}
}
Código assume estar em um formulário. Note-se que este código só imprime que uma tela contém o formulário se o formulário está completamente contido na tela. Mas isso deve ser bastante simples de correção, dependendo de suas necessidades.
Talvez a propriedade DesktopLocation em seus formulários podem lhe dar uma pista sobre o que está acontecendo com o que está acontecendo com eles