2013-03-03 6 views
9

Я использую C# WinForm для разработки приложения уведомления SMAN. Я хотел бы разместить основную форму в правом нижнем углу рабочей области экрана. В случае нескольких экранов есть способ найти самый правый экран, на котором разместить приложение, или, по крайней мере, помнить последний использованный экран и закрепить форму в правом нижнем углу?Позиция формы в правом нижнем углу экрана

ответ

21

Я в настоящее время не имеется несколько экранов, чтобы проверить, но это должно быть что-то вроде

public partial class LowerRightForm : Form 
    { 
     public LowerRightForm() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnLoad(EventArgs e) 
     { 
      PlaceLowerRight(); 
      base.OnLoad(e); 
     } 

     private void PlaceLowerRight() 
     { 
      //Determine "rightmost" screen 
      Screen rightmost = Screen.AllScreens[0]; 
      foreach (Screen screen in Screen.AllScreens) 
      { 
       if (screen.WorkingArea.Right > rightmost.WorkingArea.Right) 
        rightmost = screen; 
      } 

      this.Left = rightmost.WorkingArea.Right - this.Width; 
      this.Top = rightmost.WorkingArea.Bottom - this.Height; 
     } 
    } 
+1

Или 'var rightmost = Screen.AllScreens.OrderBy (s => s.WorkingArea.Right) .Last();' –

+0

@GertArnold Я знаю, что MoreLINQ имеет 'MaxBy 'чтобы быть наиболее эффективным, но если мне приходится опасаться, что' OrderByDescending.First' должен быть более эффективным, чем 'OrderBy.Last'. – nawfal

8

Override Форму Onload и установить новое место:

protected override void OnLoad(EventArgs e) 
{ 
    var screen = Screen.FromPoint(this.Location); 
    this.Location = new Point(screen.WorkingArea.Right - this.Width, screen.WorkingArea.Bottom - this.Height); 
    base.OnLoad(e); 
} 
2
//Get screen resolution 
Rectangle res = Screen.PrimaryScreen.Bounds; 

// Calculate location (etc. 1366 Width - form size...) 
this.Location = new Point(res.Width - Size.Width, res.Height - Size.Height); 
0
int x = Screen.PrimaryScreen.WorkingArea.Right - this.Width; 
    int y = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height; 

    // Add this for the real edge of the screen: 
    x = 0; // for Left Border or Get the screen Dimension to set it on the Right 

    this.Location = new Point(x, y); 
Смежные вопросы