NY Andrew Ответов: 4

Как я могу сделать форму неподвижной?


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

4 Ответов

Рейтинг:
28

Philippe Mori

Не делай этого...

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

Это может быть неприятно для вашего пользователя, если он не сможет переместить окно. Например, пользователь может изменить разрешение своего монитора, иметь несколько мониторов (тогда он может предпочесть показать эти окна на другом мониторе). Пользователь может использовать один из своих экранов для полноэкранного приложения, а затем предпочтет иметь ваше приложение на другом мониторе.

Кстати, если вы предотвратите перемещение ваших окон, то система все равно может переместить их при изменении разрешения (в зависимости от того, как вы это сделаете).

Пользователь может установить какой-нибудь сторонний продукт или написать утилиту для перемещения окон в любом случае.

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

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

Окна были спроектированы таким образом с определенной целью. Те, кто делает приложения, нарушающие Правила, могут быть ненавидимы некоторыми.

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


NY Andrew

Я точно понимаю, что вы говорите, но все это-всплывающая форма настроек, которая у меня центрирована на родительской форме и не подвижна.

Sergey Alexandrovich Kryukov

Я не делаю никакой разницы. Фиксированная позиция-это зло, из-за каждого элемента, перечисленного выше. Я говорил тебе то же самое.
--СА

Sergey Alexandrovich Kryukov

Хорошие моменты, мои 5. На самом деле я имел в виду то же самое, когда просто вставил свое решение:
"4. Будьте готовы к получению многочисленных жалоб от пользователей."
--СА

Sergey Chepurin

Я не согласен с вами обоими. Если вы просто скажете "Не делай этого", это заставит человека искать решение (возможно, напрасно, может быть, ошибочное) где-то еще. Он должен знать, может ли это быть реализовано или нет (и почему нет). Конечно, я не имею в виду никакой вредоносный код!
Кстати, чтобы найти этот код в Google/Bing/etc, требуется всего два клика.
Но здесь вы можете объяснить ему, почему это так плохо должно быть реализовано в любом случае.

Philippe Mori

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

В качестве аналогии, что бы вы подумали, если бы конструктор автомобиля не сделал сиденье регулируемым, предположив, что все водители хотели бы "лучшее положение сиденья конструктора"? В этом нет особого смысла. То же самое касается принуждения окна находиться в определенном положении.

Рейтинг:
1

Sergey Chepurin

Вот он. Просто преобразуйте C# в VB.NET.


Sergey Alexandrovich Kryukov

Вы проверили? Это, конечно, предотвратит перемещение через SYS_COMMAND, но как насчет перетаскивания мышью? При аренде вы должны удалить окно значка системы.

Я проверил свое решение, Пожалуйста, смотрите.
--СА

Sergey Chepurin

Я всегда тестирую предложенный код.
Это VB.NET вариант и окно "неподвижны" (по какой причине это необходимо):

Защищенные переопределения суб WndProc, который(как byref M как сообщение)
Const WM_SYSCOMMAND As Integer = &H112
Const SC_MOVE As Integer = &Hf010

Выберите м случае.Сообщение
Дело WM_SYSCOMMAND
Команда Dim As Integer = m. WParam.ToInt32 () и & Hfff0
Если команда = SC_MOVE, то
Возвращать
Конец, Если
Выход Выберите
Конец Выбрать
Моя база.WndProc(m)
Конец Подводной Лодки

Рейтинг:
1

Junaid Ullah

Я использую java caz я когда то реализовал его в приложении inventory system;

вы должны добавить Componentlistener в кадр и код конкретного местоположения, которое вы хотите установить.

пример

frame. addComponentListener(новый ComponentListener(){
@Ручная коррекция
public void componentMoved(ComponentEvent e) {

frame. setSize(200,300);
рама.setAlwaysOnTop(правда);
}

});
рама.setLocation(метод setsize(200,300));
//кадр.набор


[no name]

Этот вопрос был задан и на него был дан ответ более 2 лет назад.
VB.NET у него нет Componentlistener, так что даже если бы вопрос не был древним, ваше решение было бы неуместным.

Рейтинг:
0

Sergey Alexandrovich Kryukov

Как ни странно, добиться этого до смешного просто:

  1. Добавьте следующий код в конструктор формы:
    public NonMovableForm() {
       InitializeComponent();
       //add this:
       this.ShowInTaskbar = false;
       this.ControlBox = false;
       this.Text = null;
    } //NonMovableForm
  2. Если вам это действительно нужно, создайте поддельный элемент управления, имитирующий строку заголовка с кнопкой закрытия на ней (или нет), и закрепите его в верхней части формы.
  3. Не реализуйте перетаскивание формы. :-)
  4. Будьте готовы к получению многочисленных жалоб от пользователей.
  5. Прибыль? Я не уверен — см. пункт выше.


Так или иначе, проблема решена. Решите сами, действительно ли вы этого хотите.

—СА


NY Andrew

Еще раз Здравствуй, СА! :) Хм... я просто попробовал это сделать, но ничего не вышло..

Philippe Mori

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

Без подписи, кнопки панели задач и системного меню я не вижу, как вы могли бы переместить его в любом случае.

Sergey Alexandrovich Kryukov

Эндрю, пожалуйста, скажи мне, что ты видишь. Вы видите, что строка заголовка исчезла? Он решает проблему неподвижности, потому что нет способа двигаться.
--СА

Philippe Mori

Добавить также this.FormBorderStyle = FormBorderStyle.FixedDialog; (или любой другой неподвижный стиль границы). Это предотвратит "перемещение" формы путем изменения ее размера... В противном случае, если все свойства, указанные на шаге 1, установлены так, как указано, переместить форму невозможно.

Sergey Alexandrovich Kryukov

Конечно, я проигнорировал его только потому, что ОП сказал, что не изменяемый размер уже сделан.
--СА