Сообщения

Сообщения за сентябрь, 2007

День Программиста

Друзья и коллеги! Сегодня 256-й день года, который традиционно считается Днем Программиста. С чем всех и поздравляю!

Каждый охотник желает знать, где сидит фазан

Эта знакомая с детства фраза – не что иное, как пример мнемонической фразы. Напомню, что мнемоника — это совокупность приемов, имеющих целью облегчить запоминание возможно большего числа сведений, фактов и т.п. путем образования искусственных ассоциаций. Во фразе, которая приведена в заголовке статьи, первая буква каждого слова помогает вспомнить цвет. А сегодня мы поговорим об использовании мнемоники в Visual Studio. В этой среде разработки, как в типичном Windows-приложении, есть два основных способа вызова команд с клавиатуры: горячие клавиши и мнемоника. С горячими клавишами все понятно. В главном меню они высвечиваются справа от текста пункта меню, а для команд панели инструментов высвечиваются во всплывающей подсказке, если установлена соответствующая опция (Tools -> Customize -> Show ScreenTips on toolbars ). Число горячих клавиш ограничено – они назначены только для самых популярных команд. Другой, менее популярный, но более мощный способ быстрого вызова команд, – использ

Техника быстрой локализации ошибок при отладке

Процесс отладки упрощенно состоит из нескольких этапов. Сперва необходимо добиться повторяемости ошибки. Как правило, это делает тот, кто находит и/или регистрирует баг, но в наиболее сложных ситуациях (когда ошибка возникает нерегулярно или ее зависимость от внешних факторов не очевидна) это приходится делать самим. Далее необходимо локализовать баг в программном коде. Чтобы не читать метры кода, лучше максимально сократить тот диапазон, который в дальнейшем придется изучать, чтобы понять, какой фрагмент кода приводит к ошибке. Затем надо понять причину проблемы и, наконец, исправить . По моему опыту, локализация ошибки – наиболее трудоемкий этап в 95% случаев. Если ошибка стала проявляться сравнительно недавно (то есть, можно указать дату и/или номер билда, когда ошибки точно не было и дату и/или номер билда, когда ошибка точно проявляется), могу предложить простую, но эффективную технику, которой сам успешно пользуюсь. Способ локализации ошибки основан на алгоритме двоичного поис

Ловкость рук и никакого мошенничества

Заметил, так же, что многие даже и не подозревают, что если Tab позволяет перемещаться по контролам в прямом порядке: слева на права и сверху в низ, то комбинация Shift + Tab перемещает фокус в обратном направлении. Еще комбинация из разряда особо не известных J . Ctrl + C на стандартных окнах сообщений ( MessageBox ) позволяет скопировать в буфер в текстовом виде содержимое этого окна: заголовок окна, сообщение, надписи на кнопках.

Нетрадиционное использование using и IDisposable

Предположим, что у нас есть форма и на ней кнопка, по нажатию на которую выполняется некая долгоиграющая операция. При выполнении длительных операций в главном потоке приложения, как правило, надо изменить курсор мыши на песочные часы и затем восстановить его. Для этого можно воспользоваться подобным кодом: private void button1_Click( object sender, EventArgs e) { Cursor oldCursor = Cursor .Current; try { Cursor .Current = Cursors .WaitCursor; // do something time consuming DoSomethingTimeConsuming(); } finally { Cursor .Current = oldCursor; } } Хочу обратить внимание, что конструкция try finally необходима, что бы в случае необработанного исключения в DoSomethingTimeConsuming все равно восстановить курсор. Однако у данного обработчика есть несколько недостатков: конструкция достаточно объемна необходимость блока try finally не очевидна и поэтому блок можно забыть. данный код приходится дублировать для каждого подобного обработчика. У меня есть небольшой трюк, который выполняет ту