Вопрос был asked here, но ни одно из предоставленных решений не работало с .NET 4.0/Win7/8.1. Ответ вращается вокруг того, чтобы не устанавливать MaximizeBox в false, но следующий фрагмент показывает, что он не работает (т. Е. Форма все равно покрывает весь экран (проверена на Win7 и 8.1 с помощью ClassicShell). Мне нужно, чтобы это работало на нескольких экранах, и установка MaximumSize
doesn Не работайте очень хорошо: когда форма не максимизируется, пользователю должно быть разрешено иметь ширину формы, охватывающую два монитора. Также нет события BeforeMaximize
. Поэтому вы не можете просто установить MaximumSize
в событие OnMove
.Максимальное закрытие формы без полей на панели задач
public TestForm()
{
InitializeComponent();
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
}
VS2013, кажется, быть в состоянии сделать это без покрытия панели задач
EDIT:. Установка MaximizedBounds (как ответил Ханс Пассант) не работает на вторичном экране, где вторичный экран больше первичного. (примечание: следующая измененная версия ответа Ганса, поскольку он просто не работал на вторичном экране)
например.
protected override void OnLocationChanged(EventArgs e)
{
var workArea = Screen.FromControl(this).WorkingArea;
MaximizedBounds = new Rectangle(0, 0, workArea.Width, workArea.Height);
Debug.WriteLine(MaximizedBounds);
base.OnLocationChanged(e);
}
// Button click event (hit when form maximized):
WinApi.RECT rect;
WinApi.GetWindowRect(Handle, out rect);
Debug.WriteLine(rect);
Выход:
OnLocationChanged: {X=0,Y=0,Width=1920,Height=1040}
ButtonClick when form is maximized: {Left=1366,Top=-216,Right=3840,Bottom=876}
Это работает, чтобы быть:
максимизируется Ширина = 3840 - 1366 = 2474
Maximized Высота = 876 + 216 = 1092
Откуда взялись эти рамки?
Добавление еще одну строки в коду выше, с самым высоким голосовавшим ответа работает. 'MaximumSize = Screen.FromControl (this) .WorkingArea.Size;' –
Отредактировал вопрос, чтобы объяснить, почему 'MaximumSize' не работает для нескольких мониторов. –
Назначьте свойство MaximizedBounds формы. –