Ответ 1
Мое простое исправление получило вызов метода формы Activate()
, поэтому нет необходимости использовать TopMost
(к чему я стремился).
У меня есть приложение .net для Windows, которое нужно запускать в полноэкранном режиме. Когда приложение запускается, панель задач отображается поверх основной формы и исчезает только при активации формы, нажимая на нее или используя ALT-TAB. Существующие свойства формы следующие:
Я попытался добавить следующие данные в загрузку формы, но никто не работал у меня:
Есть ли способ сделать это в .NET или мне придется вызывать собственные методы Windows, и если так будет очень оценен фрагмент кода.
большое спасибо
Мое простое исправление получило вызов метода формы Activate()
, поэтому нет необходимости использовать TopMost
(к чему я стремился).
Использование:
FormBorderStyle = FormBorderStyle.None
WindowState = FormWindowState.Maximized
И затем форма помещается на панель задач.
Я пробовал так много решений, некоторые из них работают в Windows XP, и все они НЕ работали в Windows 7. После всего этого я написал простой способ сделать это.
private void GoFullscreen(bool fullscreen)
{
if (fullscreen)
{
this.WindowState = FormWindowState.Normal;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Bounds = Screen.PrimaryScreen.Bounds;
}
else
{
this.WindowState = FormWindowState.Maximized;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
}
}
порядок кода важен и не будет работать, если вы измените место WindwosState и FormBorderStyle.
Одно из преимуществ этого метода заключается в том, чтобы оставить TOPMOST ложным, чтобы другие формы могли попасть в основную форму.
Это решило мою проблему.
Вот как я делаю формы в полноэкранном режиме.
private void button1_Click(object sender, EventArgs e)
{
int minx, miny, maxx, maxy;
inx = miny = int.MaxValue;
maxx = maxy = int.MinValue;
foreach (Screen screen in Screen.AllScreens)
{
var bounds = screen.Bounds;
minx = Math.Min(minx, bounds.X);
miny = Math.Min(miny, bounds.Y);
maxx = Math.Max(maxx, bounds.Right);
maxy = Math.Max(maxy, bounds.Bottom);
}
Form3 fs = new Form3();
fs.Activate();
Rectangle tempRect = new Rectangle(1, 0, maxx, maxy);
this.DesktopBounds = tempRect;
}
FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
Я искал ответ на этот вопрос в SO и некоторых других сайтах, но один дал ответ, был очень сложным для меня, а некоторые другие ответы просто не работают корректно, поэтому после большого тестирования кода я решил эта головоломка.
Примечание. Я использую Windows 8, а моя панель задач не находится в режиме автоматического скрытия.
Я обнаружил, что установка WindowState в Normal перед выполнением любых изменений остановит ошибку с закрытой панелью задач.
Я создал этот класс, который имеет два метода, первый входит в "полноэкранный режим", а второй оставляет "полноэкранный режим". Таким образом, вам просто нужно создать объект этого класса и передать форму, которую вы хотите установить полный экран, в качестве аргумента методу EnterFullScreenMode или методу LeaveFullScreenMode:
class FullScreen
{
public void EnterFullScreenMode(Form targetForm)
{
targetForm.WindowState = FormWindowState.Normal;
targetForm.FormBorderStyle = FormBorderStyle.None;
targetForm.WindowState = FormWindowState.Maximized;
}
public void LeaveFullScreenMode(Form targetForm)
{
targetForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
targetForm.WindowState = FormWindowState.Normal;
}
}
private void fullScreenToolStripMenuItem_Click(object sender, EventArgs e)
{
FullScreen fullScreen = new FullScreen();
if (fullScreenMode == FullScreenMode.No) // FullScreenMode is an enum
{
fullScreen.EnterFullScreenMode(this);
fullScreenMode = FullScreenMode.Yes;
}
else
{
fullScreen.LeaveFullScreenMode(this);
fullScreenMode = FullScreenMode.No;
}
}
Я поставил этот же ответ на другой вопрос, который я не уверен, является ли это дубликат или нет. (Ссылка на другой вопрос: Как сделать приложение WinForms в полноэкранном режиме)
Я считаю, что это можно сделать, просто установив для свойства FormBorderStyle значение None и WindowState для Maximized. Если вы используете Visual Studio, оба из них можно найти в среде IDE, поэтому нет необходимости делать это программно. Обязательно включите какой-то способ закрытия/выхода из программы, прежде чем делать это, потому что это приведет к удалению этого полезного X в верхнем правом углу.
EDIT:
Попробуйте это вместо этого. Это фрагмент, который я сохранил в течение длительного времени. Я даже не могу вспомнить, кто это заслуживает, но он работает.
/*
* A function to put a System.Windows.Forms.Form in fullscreen mode
* Author: Danny Battison
* Contact: [email protected]
*/
// a struct containing important information about the state to restore to
struct clientRect
{
public Point location;
public int width;
public int height;
};
// this should be in the scope your class
clientRect restore;
bool fullscreen = false;
/// <summary>
/// Makes the form either fullscreen, or restores it to it original size/location
/// </summary>
void Fullscreen()
{
if (fullscreen == false)
{
this.restore.location = this.Location;
this.restore.width = this.Width;
this.restore.height = this.Height;
this.TopMost = true;
this.Location = new Point(0,0);
this.FormBorderStyle = FormBorderStyle.None;
this.Width = Screen.PrimaryScreen.Bounds.Width;
this.Height = Screen.PrimaryScreen.Bounds.Height;
}
else
{
this.TopMost = false;
this.Location = this.restore.location;
this.Width = this.restore.width;
this.Height = this.restore.height;
// these are the two variables you may wish to change, depending
// on the design of your form (WindowState and FormBorderStyle)
this.WindowState = FormWindowState.Normal;
this.FormBorderStyle = FormBorderStyle.Sizable;
}
}
У меня нет объяснений о том, как это работает, но работает, а ковбойский кодер - это все, что мне нужно.
System.Drawing.Rectangle rect = Screen.GetWorkingArea(this);
this.MaximizedBounds = Screen.GetWorkingArea(this);
this.WindowState = FormWindowState.Maximized;
FormBorderStyle = FormBorderStyle.Sizable;
TopMost = false;
WindowState = FormWindowState.Normal;
ЭТОТ КОД СДЕЛАТЬ ВАШ WINDOWS ПОЛНЫЙ ЭКРАН, ЭТО ТАКЖЕ ПОКРЫВАЕТ ЦЕЛЫЙ ЭКРАН