Измените размер безграничного окна в правом нижнем угле

Обработайте это в событии OnError своего Global.asax:

protected void Application_Error(object sender, EventArgs e){
  // An error has occured on a .Net page.
  var serverError = Server.GetLastError() as HttpException;

  if (serverError != null){
    if (serverError.GetHttpCode() == 404){
      Server.ClearError();
      Server.Transfer("/Errors/404.aspx");
    }
  }
}

В Вас ошибочная страница, необходимо удостовериться установку кода статуса правильно:

// If you're running under IIS 7 in Integrated mode set use this line to override
// IIS errors:
Response.TrySkipIisCustomErrors = true;

// Set status code and message; you could also use the HttpStatusCode enum:
// System.Net.HttpStatusCode.NotFound
Response.StatusCode = 404;
Response.StatusDescription = "Page not found";

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

Google будет обычно следовать за этими 302 и затем соблюдать 404 кода статуса - таким образом, необходимо будет удостовериться, что Вы возвращаете это на своей ошибочной странице.

15
задан Sri Harsha Chilakapati 5 August 2013 в 04:40
поделиться

3 ответа

Правильный способ добиться этого - добавить обработчик сообщения (например, переопределив Form.WndProc ) в вашу форму и обработать WM_NCHITTEST сообщение. (Вы можете найти определение этого сообщения в C # на PInvoke.net ). В частности, когда вы получите сообщение, вычислите, выполняется ли проверка попадания для точки в области, которую вы указали для изменения размера, и если это так, верните HTBOTTOMRIGHT. Процесс окна по умолчанию сделает все остальное за вас, так как он будет предполагать, что пользователь щелкнул в правом нижнем углу границы окна, даже если ваше окно не имеет границы.

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

Самый простой способ - сделать, как сказал @benPearce, поставить панель в углу и настроить размер формы с помощью ширины / высоты. Это сработает, но изменение размера не будет плавным, особенно в Vista и Win7 Basic, где полная перерисовка отключена при стандартном перемещении и изменении размера, а попытки перерисовки будут выполняться на каждом шаге.

Обновление : В обоих подходах вам также нужно будет выяснить, как красить захват. Вы можете, например, нанести растровое изображение стандартного захвата. Хотя, учитывая, что ваша форма не имеет заголовка и рамки, поэтому вы не обязательно придерживаетесь стандартных визуальных элементов Windows, вы можете выбрать что-нибудь более привлекательное.

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

  1. Измените размер элемента управления, чтобы освободить место для ручки изменения размера.
  2. Настройте область управления (с помощью свойства «Регион»), чтобы исключить ручку изменения размера.
  3. Закройте ручку изменения размера. панели, прослушайте ее сообщение MouseEnter и установите для свойства Capture формы значение true, что приведет к тому, что все дальнейшие сообщения мыши будут отправляться на нее. Примечание : вам нужно будет освободить захват, как только мышь покинет эту область после завершения изменения размера.

Я бы рекомендовал выбрать вариант 1 как самый простой. Вариант 3 является наиболее сложным и потребует подробных сведений о том, как ввод с помощью мыши работает в Windows, поэтому я бы не рекомендовал его. Вариант 2 является хорошей альтернативой варианту 1, но вам придется попробовать его, чтобы увидеть, как элемент управления ListView отреагирует на изменение его области.

14
ответ дан 30 November 2019 в 23:54
поделиться

Поместите панель или другой элемент управления в угол, используя события MouseDown и MouseMove панели, отрегулируйте размер форм соответствующим образом.

В MouseDown я записал координаты, затем в MouseMove вы можете вычислить разницу с исходным положением, чтобы настроить размер форм.

2
ответ дан 30 November 2019 в 23:54
поделиться

Я думаю, что «алгоритмы» (например, тела методов и базовые структуры данных) лучше всего подходят для функционального программирования. Не предполагая, что ничего полностью зависит от ввода-вывода / состояния, отличные возможности функционального программирования - это разработка алгоритмов и структур данных, что часто приводит к более короткому / простому / чистому коду, чем вы получили бы с императивным решением. (Не имитируйте императивный стиль, стиль FP лучше подходит для большинства подобных задач.)

Иногда вам нужны императивные элементы для работы с вводом-выводом или низкоуровневой производительностью, и вам нужно ООП для разделения проекта высокого уровня и архитектура большой программы, но "в малой"

33
ответ дан 30 November 2019 в 23:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: