Как я могу сделать форму неподвижной?
Я пытаюсь сделать форму неподвижной. Как я могу это сделать??? Я уже сделал его не изменяемым по размеру, теперь мне просто нужно сделать его неподвижным.
Заранее спасибо!
Не делай этого...
Переместите окна туда, где вы хотите, чтобы они появились. Если вы действительно хотите этого, то, возможно, вы могли бы гарантировать, что если пользователь перемещает окна, они остаются видимыми на одном мониторе.
Это может быть неприятно для вашего пользователя, если он не сможет переместить окно. Например, пользователь может изменить разрешение своего монитора, иметь несколько мониторов (тогда он может предпочесть показать эти окна на другом мониторе). Пользователь может использовать один из своих экранов для полноэкранного приложения, а затем предпочтет иметь ваше приложение на другом мониторе.
Кстати, если вы предотвратите перемещение ваших окон, то система все равно может переместить их при изменении разрешения (в зависимости от того, как вы это сделаете).
Пользователь может установить какой-нибудь сторонний продукт или написать утилиту для перемещения окон в любом случае.
Вам придется правильно обрабатывать такие вещи, как изменение разрешений, мониторов, области рабочего стола (например, если пользователь перетащит панель задач на другую сторону, что по умолчанию).
Другое приложение могло бы решить сделать то же самое, что и вы, и таким образом перекрыть ваши окна без того, чтобы пользователь мог что-либо с этим поделать.
Окна были спроектированы таким образом с определенной целью. Те, кто делает приложения, нарушающие Правила, могут быть ненавидимы некоторыми.
Это может привести к тому, что в вашем приложении появится небезопасный код. Если бы приложение могло быть скомпилировано как безопасное приложение, это было бы очень плохо...
Я точно понимаю, что вы говорите, но все это-всплывающая форма настроек, которая у меня центрирована на родительской форме и не подвижна.
Я не делаю никакой разницы. Фиксированная позиция-это зло, из-за каждого элемента, перечисленного выше. Я говорил тебе то же самое.
--СА
Хорошие моменты, мои 5. На самом деле я имел в виду то же самое, когда просто вставил свое решение:
"4. Будьте готовы к получению многочисленных жалоб от пользователей."
--СА
Я не согласен с вами обоими. Если вы просто скажете "Не делай этого", это заставит человека искать решение (возможно, напрасно, может быть, ошибочное) где-то еще. Он должен знать, может ли это быть реализовано или нет (и почему нет). Конечно, я не имею в виду никакой вредоносный код!
Кстати, чтобы найти этот код в Google/Bing/etc, требуется всего два клика.
Но здесь вы можете объяснить ему, почему это так плохо должно быть реализовано в любом случае.
Это вообще плохая идея-предполагать, что пользователь нашего приложения использует только наше приложение... Я уже привел много причин, почему мы не должны работать вокруг системы.
В качестве аналогии, что бы вы подумали, если бы конструктор автомобиля не сделал сиденье регулируемым, предположив, что все водители хотели бы "лучшее положение сиденья конструктора"? В этом нет особого смысла. То же самое касается принуждения окна находиться в определенном положении.
Вы проверили? Это, конечно, предотвратит перемещение через SYS_COMMAND, но как насчет перетаскивания мышью? При аренде вы должны удалить окно значка системы.
Я проверил свое решение, Пожалуйста, смотрите.
--СА
Я всегда тестирую предложенный код.
Это 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)
Конец Подводной Лодки
Я использую java caz я когда то реализовал его в приложении inventory system;
вы должны добавить Componentlistener в кадр и код конкретного местоположения, которое вы хотите установить.
пример
frame. addComponentListener(новый ComponentListener(){
@Ручная коррекция
public void componentMoved(ComponentEvent e) {
frame. setSize(200,300);
рама.setAlwaysOnTop(правда);
}
});
рама.setLocation(метод setsize(200,300));
//кадр.набор
Этот вопрос был задан и на него был дан ответ более 2 лет назад.
VB.NET у него нет Componentlistener, так что даже если бы вопрос не был древним, ваше решение было бы неуместным.
Как ни странно, добиться этого до смешного просто:
public NonMovableForm() { InitializeComponent(); //add this: this.ShowInTaskbar = false; this.ControlBox = false; this.Text = null; } //NonMovableForm
Еще раз Здравствуй, СА! :) Хм... я просто попробовал это сделать, но ничего не вышло..
Вы сказали, что уже решили сделать его не изменяемым по размеру... и вышеприведенный код делает весь оставшийся шаг, чтобы предотвратить перемещение формы. Если вы нашли способ все-таки переместить форму, расскажите нам, как это сделать.
Без подписи, кнопки панели задач и системного меню я не вижу, как вы могли бы переместить его в любом случае.
Эндрю, пожалуйста, скажи мне, что ты видишь. Вы видите, что строка заголовка исчезла? Он решает проблему неподвижности, потому что нет способа двигаться.
--СА
Добавить также this.FormBorderStyle = FormBorderStyle.FixedDialog;
(или любой другой неподвижный стиль границы). Это предотвратит "перемещение" формы путем изменения ее размера... В противном случае, если все свойства, указанные на шаге 1, установлены так, как указано, переместить форму невозможно.
Конечно, я проигнорировал его только потому, что ОП сказал, что не изменяемый размер уже сделан.
--СА