Как закрепить форму Windows на С#?

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

Большое спасибо. :)


person Smiley    schedule 09.07.2010    source источник


Ответы (3)


Я бы рассмотрел возможность использования Control.Dock вместе с одним из перечислений DockStyle значения.

Возможно, вам придется поиграть с Layout, чтобы вы могли по-разному располагать элементы управления формы в зависимости от выбранного DockStyle.

С моей точки зрения, вам нужно будет учитывать Control.Location, чтобы узнать, к какому значению DockStyle прикрепить форму.

ИЗМЕНИТЬ №1

Ваша форма Windows имеет свойство Dock, поскольку оно наследуется от Control.

Рассмотрим следующее:

  1. Каждый раз, когда ваша форма приближается, например, к правой стороне экрана или к контейнеру MDI, вы хотите закрепить правильно, верно? (Здесь небольшая игра слов... =P) Итак, вы должны подписаться на Control.LocationChanged.

    private void myForm_LocationChanged(object sender, EventArgs e) {
        if (this.Location.X > 900) then
            this.Dock = DockStyle.Right;
        else if (this.Location.X < 150) then
            this.Dock = DockStyle.Left;
        else if (this.Location.Y > 600) then
            this.Dock = DockStyle.Bottom;
        else if (this.Location.Y < 150) then
            this.Dock = DockStyle.Top;
        else
            this.Dock = DockStyle.None;
    }
    

Действительно, вместо постоянных значений вы должны использовать текущее разрешение рабочего стола и вычислять соотношение, исходя из которого вы хотите, чтобы ваша стыковка происходила.

***Отказ от ответственности:****Этот код предоставляется как есть и не тестировался. Мы надеемся, что этого алгоритма достаточно, чтобы провести вас через процесс стыковки по мере необходимости. Дополнительная помощь может быть оказана по запросу.* =)

Похоже, что свойство Form.DesktopLocation более подходящий инструмент для работы, чем для вашего главного окна, то есть, например, для вашего MDI-контейнера. Что касается других окон, я бы согласился с чем-то, похожим на предоставленный пример кода.

Это помогает?

РЕДАКТИРОВАНИЕ №2

Если вы хотите предотвратить перекрытие форм, возможно, Control.BringToFront() может сделать это до или после вашего вызова Control.Show() в зависимости от того, что вам больше подходит.

person Will Marcouiller    schedule 09.07.2010
comment
привет, спасибо за ответ. Я немного новичок в использовании обширных функций Visual Studio 2008, и я совершенно не знаю, как я могу использовать свойство Control.Dock. Не могли бы вы привести несколько примеров того, как я могу использовать эти свойства? Спасибо :) - person Smiley; 09.07.2010
comment
Это для закрепления элементов управления внутри формы, а не для закрепления всей формы. - person Jouke van der Maas; 10.07.2010
comment
@Jouke Van Der Maas: я думаю, вы не прочитали весь мой ответ. Я упоминаю свойство DesktopLocation, то есть для закрепления всего окна на рабочем столе. Кроме того, я предполагаю, что это может быть лучшим инструментом для работы после того, как ОП уточнил свою идею. Пожалуйста, измените свой комментарий соответствующим образом. - person Will Marcouiller; 10.07.2010
comment
@Will Marcouiller Вы, должно быть, отредактировали, теперь я удалю свой отрицательный голос. Ничего, я не могу, если вы не отредактируете снова. - person Jouke van der Maas; 10.07.2010
comment
@Jouke Van Der Maas: я отредактировал свой ответ, чтобы вы удалили свой отрицательный голос, если хотите. Однако, пожалуйста, сравните свой возраст комментария с моим возрастом редактирования. Я отредактировал 4 часа, прежде чем вы позволили свой комментарий. В любом случае, неважно, самое главное, что теперь мы оба согласны с тем, что мой вопрос может помочь. - person Will Marcouiller; 10.07.2010
comment
это помогло мне с новой идеей о том, как сделать мой проект. большое спасибо :) - person Smiley; 10.07.2010

Итак, после некоторых настроек я, наконец, смог заставить этот код работать.

this.DesktopLocation = new Point((Screen.PrimaryScreen.Bounds.Width / 2 - 420), 0);

Я поместил эту строку под InitializeComponent(), и она прикрепляет мою форму к центру экрана с любыми значениями разрешения.

person Smiley    schedule 09.07.2010

Установив FormBorderStyle вашей формы на None, вы уберете дескриптор перетаскивания от пользователя, чтобы он не мог перемещать его с помощью мыши.

Тогда вам просто нужно разместить его там, где вы хотите.

Если вы действительно хотите убрать параметры пользователей, вы также можете установить для свойства ShowInTaskbar значение false.

person Seattle Leonard    schedule 09.07.2010