Рейтинг@Mail.ru

WPF: Как получить список всех элементов UIElement заданного типа

Опубликовано в Полезные советы

Напишем метод, который будет возвращать список всех элементов некоторого контейнера:

''' <summary>
''' Возвращает все элементы UIElement заданного типа.
''' </summary>
Public Shared Iterator Function FindVisualChildren(Of T As DependencyObject)(ByVal depObj As DependencyObject) As IEnumerable(Of T)
    If (depObj IsNot Nothing) Then
        For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(depObj) - 1
            Dim child As DependencyObject = VisualTreeHelper.GetChild(depObj, i)
            If (child IsNot Nothing) AndAlso (TypeOf child Is T) Then
                Yield CType((CObj(child)), T)
            End If
            For Each current As T In MainWindow.FindVisualChildren(Of T)(child)
                Yield current
            Next
        Next
    End If
    Return
End Function

Теперь можно использовать данный метод таким способом (здесь MainWindow – это тот контейнер, список чьих потомков нужно получить):

Dim sameTypeElements as New List(Of ComboBox)
For Each cb As ComboBox In FindVisualChildren(Of ComboBox)(MainWindow)
    sameTypeElements.Add(cb)
Next
Подробнее ...

Как перехватить нажатие клавиши в консольном приложении (.NET)

Опубликовано в Полезные советы

Если нужно проверить, не была ли нажата пользователем определённая клавиша клавиатуры во время выполнения длительной операции в консольном приложении, используется свойство Console.KeyAvailable().

Для примера напишем процедуру CheckEscapePressed(), которая будет проверять, не была ли нажата клавиша Escape:

Подробнее ...

LINQ+VB.NET: Выбор объектов DateTime() с уникальными значениями минут

Опубликовано в Полезные советы

Допустим, у нас есть упорядоченный список объектов MyList() типа даты: List(of DateTime), и нам нужно выбрать из него только те объекты, которые имеют уникальные значения минут (или часов, или секунд, и т.п.). Выберем только первые встреченные значения с уникальным параметром. Для этого можно воспользоваться языком запросов LINQ и языком VB.NET.

Вариант 1 (самый быстрый)

Dim selected As IEnumerable(Of DateTime) = MyList.GroupBy(Function(d As DateTime) d.TimeStamp.Minute).[Select](Function(g) g.First)

Вариант 2

Dim selected As IEnumerable(Of IGrouping(Of Integer, DateTime)) = MyList.GroupBy(Function(n As DateTime) (n.Minute)).Distinct

Вариант 3 (самый медленный, использует преобразование к типу Lookup())

Dim selected As ILookup(Of Integer, DateTime) = MyList.ToLookup(Of Integer, DateTime)(Function(ByVal x As DateTime) x.Minute, Function(ByVal y As DateTime) y)
Подробнее ...

Как посчитать контрольную сумму CRC32, CRC16, CRC8

Опубликовано в Программирование

В интернете существует большое количество вариантов расчёта контрольной суммы CRC. Но что же собственно такое контрольная сумма и почему она рассчитывается именно так? Давайте разберёмся. А заодно напишем программу, которая будет рассчитывать CRC с заданными параметрами.

Подробнее ...

WPF: Как запретить ввод в поле ввода любых символов, кроме целых чисел

Опубликовано в Полезные советы

Добавим в поле ввода TextBox обработчик нажатий клавиатуры:

<TextBox PreviewTextInput="checkIfInputDigits" />

А вот код самого обработчика (VB.NET):

Private Sub checkIfInputDigits(sender As Object, e As TextCompositionEventArgs)
    Dim re As New Regex("^[0-9]+") 'объявим регулярное выражение, которое соответствует непрерывной последовательности чисел от 0 до 9
    e.Handled = Not re.IsMatch(e.Text) 'запрещаем ввод символов.
End Sub
Подробнее ...

Реализация ObservableCollection в WPF

Опубликовано в Полезные советы

1. Класс должен реализовывать интерфейс INotifyPropertyChanged:

Public Class MainWindow
    Implements INotifyPropertyChanged

Public Event PropertyChanged(ByVal sender As Object, ByVal e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged

Public Sub NotifyPropertyChanged(ByVal propName As String)
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
End Sub

2. Перечислимое свойство должно быть типа System.Collections.ObjectModel.ObservableCollection:

	
Public Property MyCollection As ObservableCollection(Of SingleStep) 
Подробнее ...
Подписаться на этот канал RSS