web-dev-qa-db-fra.com

Comment déterminer la largeur/hauteur de l'écran à l'aide de C #

Je souhaite définir la largeur et la hauteur d'une Window de manière dynamique en fonction de la largeur/hauteur maximale des écrans utilisateur. Comment puis-je déterminer cela par programmation?

21
Shamim Hafiz

Pour l'écran principal:

System.Windows.SystemParameters.PrimaryScreenWidth
System.Windows.SystemParameters.PrimaryScreenHeight

( Notez qu'il existe également d'autres propriétés liées à l'écran principal qui dépendent de divers facteurs, Full* & Maximised*)

Écran virtuel:

SystemParameters.VirtualScreenWidth
SystemParameters.VirtualScreenHeight
34
H.B.

Si vous voulez les dimensions spécifiques du moniteur sur lequel votre programme est exécuté (si quelqu'un exécute plus d'un moniteur), vous pouvez également utiliser:

var helper = new WindowInteropHelper(this); //this being the wpf form 
var currentScreen = Screen.FromHandle(helper.Handle);

Cela retournera un objet d'écran faisant référence au moniteur sur lequel le programme est exécuté. À partir de là, vous pouvez utiliser la propriété currentScreen.Bounds.Width/Height (pour la taille réelle) ou le currentScreen.WorkingArea.Width/Height (barre de tâches moins, etc.) en fonction de vos souhaits. 

12
Dennis Morgan

utiliser un objet d'écran

Screen.PrimaryScreen.Bounds.Width
6
DeveloperX

Vous pouvez utiliser l'événement SizeChanged

SizeChanged="MyWindow_SizeChanged"

Puis dans votre gestionnaire d'événements,

private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
    if (this.MinWidth > 0 && this.MinHeight > 0)
    {
        double heightScaleFactor = e.NewSize.Height / this.MinHeight;
        double widthScaleFactor = e.NewSize.Width / this.MinWidth;            
        mainGrid.LayoutTransform = new ScaleTransform(heightScaleFactor, widthScaleFactor);
    }
}

MainGrid est un conteneur pour tout le contenu de MyWindow.

2
lewi

Je ne pouvais utiliser aucune des solutions ci-dessus sous .NET 4.0.30319.42000 avec Windows 10 Enterprise lorsque je l'appelais depuis Ranorex Studio 8.0.1 + git.8a3e1a6f. J'ai donc utilisé la ligne.

using WinForms = System.Windows.Forms;
[…]
                SetWindowPos(processes[0].MainWindowHandle,
                    0,
                    y,
                    x,
                    WinForms.SystemInformation.PrimaryMonitorSize.Width,
                    WinForms.SystemInformation.PrimaryMonitorSize.Height,
                    SWP.SHOWWINDOW);
1
Sae1962

Vous pouvez obtenir la hauteur et la largeur de l'écran:

int height = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Height;
int width = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Width;

Définissez ensuite les propriétés Height et Width de la fenêtre sur celles de l'initialisation.

this.Height = height;
this.Width = width;

Fonctionne pour obtenir la hauteur et la largeur de l'écran dans WinForms ou dans ASP .NET. Pas de problème, pas de problème, sauf que vous aurez besoin de référencer l'assembly System.Windows.Forms dans votre projet s'il ne s'agit pas d'un projet WinForm.

0
vapcguy