Рейтинг@Mail.ru
Полезные советы

Полезные советы (58)

Короткие практические полезные советы из области ИТ.

Отмена привязки сочетания клавиш для команд в WPF

Print Friendly, PDF & Email

Иногда мы хотим отменить стандартное сочетание клавиш для какой-либо команды в XAML. Например, де-факто справка во всех WPF (и не только) приложениях вызывается по нажатию кнопки F1. Но мы хотим, чтобы окно справки открывалось по нажатию на F2, а на F1 – нет. Если мы напишем так:

<KeyBinding Key="F2" Command="Help" />

то справка будет открываться и по нажатию F2, и по нажатию F1. Необходимо явно отключить срабатывание по нажатию кнопки F1. Для этого следует написать так:

<KeyBinding Key="F2" Command="Help" />
<KeyBinding Key="F1" Command="NotACommand" />
Print Friendly, PDF & Email

Проверка значений, вводимых в поле TextBox, в XAML

Print Friendly, PDF & Email

В WPF имеется специальный стандартный механизм, позволяющий выполнять проверку (валидацию) данных, вводимых пользователем в текстовое поле TextBox. Этот механизм называется правилами проверки (validation rule). Для полей ввода, в которые введены недопустимые значения, в WPF даже определён свой стиль: красная рамка вокруг элемента TextBox. Конечно, его можно переопределить.

Чтобы воспользоваться стандартным валидатором, нужно выполнить три простых шага. Давайте рассмотрим их на таком примере: есть свойство MyProperty типа Integer, и его значение должно лежать в границах от 1 до 10.

1) Сначала создаём класс, который является наследником класса ValidationRule:

Print Friendly, PDF & Email

Объединение строк с помощью заданного символа

Print Friendly, PDF & Email

Зачастую бывает необходимо объединить несколько строк с помощью какого-то символа. Например, при формировании строки таблицы для записи в текстовый файл. Можно, разумеется, делать это с помощью конкатенации явно, а можно воспользоваться статическим методом String.Join():

String.Join("-", {"A", "B", "C", "D"})

Результатом выполнения этого когда, как не сложно догадаться, будет строка "A-B-C-D". В качестве разделителя может выступать как один символ, так и целая строка, состоящая из нескольких символов.

Print Friendly, PDF & Email

Мнемоническое правило написания "тся" и "ться"

Print Friendly, PDF & Email

Заметка совершенно не по теме блога, но всё же напишу. Я люблю русский язык, и мне больно смотреть на то, как люди в последние годы становятся всё менее грамотными и всё проще относятся к наследию наших предков – великому русскому языку. В частности, многие совершенно безобразно путают, как правильно писать ТСЯ и ТЬСЯ в глаголах. Они помнят, что когда-то в школе им рассказывали, что в некоторых случаях ТЬСЯ пишется с мягким знаком, и теперь вставляют его везде, где нужно и не нужно. Из-за этого порой получаются слова, которых и вовсе не существует в русском языке (например, «перемещаеться»). Но давайте ближе к делу.

Очень легко запомнить, в каком случае в глаголе следует писать «тся», а в каком «ться». Существует такое простое мнемоническое правило. Задаём вопрос к глаголу – «что делает?» или «что делать?». Если подходит первый вариант – «что делает?» – значит, «тся» пишется без мягкого знака (обратите внимание: в вопросе также нет мягкого знака). Если подходит форма вопроса «что делать?» (с мягким знаком), значит и в глаголе пишем мягкий знак: «ться».

Рассмотрим пример.

Print Friendly, PDF & Email

Если после подключения M.2 SSD диска пропал основной диск

Print Friendly, PDF & Email

Допустим, у вас в компьютере установлен диск (HDD или SSD – неважно), подключённый по интерфейсу SATA. Вы решили докупить новый SSD диск с интерфейсом M.2 и поставить его дополнительно к первому. Вы вставляете новый M.2 диск в компьютер, а старый диск при этом перестаёт определяться как в операционной системе, так и в BIOS. Из-за чего такое бывает и что при этом делать?

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

Диски M.2 SSD различаются расположением и количеством ключевых вырезов
Диски M.2 SSD различаются расположением и количеством ключевых вырезов

Чтобы решить эту проблему, просто переключите ваш первый диск на другой ряд SATA разъёмов (конечно, если у вас стационарный ПК). Тогда ресурсы SATA шины распределятся между дисками без конфликтов, и ваш первый диск снова станет видеться в системе и восстановит нормальную работоспособность.

Print Friendly, PDF & Email

Передача события прокрутки мыши родительскому элементу в WPF на примере элемента TreeView

Print Friendly, PDF & Email

Для передачи события прокрутки колеса мыши родительскому элементу, сначала определим в XAML событие PreviewMouseWheel.

<TreeView PreviewMouseWheel="ScrollingToParent" />

Теперь напишем обрабатывающий это событие метод таким способом:

''' <summary>
''' Обеспечивает передачу события прокрутки колеса мыши родительскому элементу.
''' </summary>
Private Sub ScrollingToParent(sender As Object, e As MouseWheelEventArgs)
    e.Handled = True
    Dim e2 As New MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta) With {
        .RoutedEvent = UIElement.MouseWheelEvent,
        .Source = sender
    }
    Dim parent As UIElement = CType(CType(sender, Control).Parent, UIElement)
    parent.RaiseEvent(e2)
End Sub
Print Friendly, PDF & Email

Переопределение явного приведения типов в VB.NET

Print Friendly, PDF & Email

Среда .NET позволяет переопределять стандартные операторы. В частности, оператор CType(). Однако большинство примеров даются на языке C#. Чтобы переопределить оператор CType() в языке VB.NET, нужно поступить следующим образом:

Public Shared Widening Operator CType(m As MyClass) As String
	Return $"Это тип {m.GetType()} приведён к типу System.String."
End Operator

Здесь ключевое слово widening является указанием на то, что данное преобразование типов является расширяющим преобразованием (в отличие от narrowing – сужающего). Это значит, что при выполнении данного преобразования мы не потеряем данные, и оно может быть выполнено безопасно.

Замечу, что нельзя приводить тип к своему базовому классу, и наоборот: базовый – к дочернему.

Print Friendly, PDF & Email

Использование нескольких Disposable объектов внутри одной инструкции Using

Print Friendly, PDF & Email

Удобно использовать несколько конструкторов объектов, реализующих интерфейс IDisposable, внутри одной инструкции Using. Поясню на примере:

Using fs As New FileStream("file.txt", FileMode.Open)
    Using sr As New StreamReader(fs, Text.Encoding.GetEncoding(1251))
	'читаем содержимое файла и что-то делаем с ним…
    End Using
End Using

можно заменить на:

Using fs As New FileStream("file.txt", FileMode.Open), sr As New StreamReader(fs, Text.Encoding.GetEncoding(1251))
    'читаем содержимое файла и что-то делаем с ним…
End Using
Print Friendly, PDF & Email

Анонимные типы в VB.NET

Print Friendly, PDF & Email
Анонимные типы – это объекты, которые определяются локально в зоне видимости метода или класса и не имеют специального класса, в котором они описаны. Такие типы полезны когда нужно быстро создать какую-то структурированную сущность для хранения временных данных.
Print Friendly, PDF & Email

Создание методов расширения на VB.NET

Print Friendly, PDF & Email

Методы расширения – это методы, которые не относятся непосредственно к классу, но добавляют ему специфическую функциональность. Такая возможность может пригодиться, если, например, нет исходного кода для некоего класса, но нужно дополнить его функциональность. Или в случае, когда вы не хотите нарушить работу существующего кода, но при этом вам нужно некое дополнительное поведение.

Print Friendly, PDF & Email

Как вернуть поддержку диаграмм классов в Visual Studio 2017

Print Friendly, PDF & Email

В среде разработки Visual Studio версий, предшествовавших версии 2017, имелся инструмент для создания диаграмм классов на языке моделирования DSL (не путать с UML). В версии Visual Studio 2017 эти диаграммы могут не открываться. Чтобы восстановить поддержку старого дизайнера классов, можно попробовать сделать следующее.

Print Friendly, PDF & Email

Как получить название дня недели по его номеру в .NET

Print Friendly, PDF & Email

В .NET имеется очень полезный класс, который позволяет вывести локализованное название дня недели по его порядковому номеру. Этот класс называется DateAndTime:

Dim day As String = WeekdayName(dayNumber)

Так просто! Также этот класс имеет и другие полезные методы, связанные с работой с датами, обратите на него внимание :)

Print Friendly, PDF & Email
Subscribe to this RSS feed