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

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

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

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

Print Friendly, PDF & Email

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

''' <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
Print Friendly, PDF & Email

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

Print Friendly, PDF & Email

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

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

Public Function CheckEscapePressed() as Boolean
    If Console.KeyAvailable Then
        Dim k As ConsoleKey = Console.ReadKey(True).Key
        If k.Equals(ConsoleKey.Escape) Then
            Console.Write("Операция была прервана.")
            Return True
        End If
    End If
    Return False
End Function 

Можно проверять нажатие любой из доступных в перечислении System.ConsoleKey клавиш.

А теперь в любом месте программы можем использовать нашу процедуру CheckEscapePressed(). Например, для прерывания бесконечного цикла по нажатию на клавишу "Escape":

Do 
    Console.WriteLine("Ожидаем нажатия клавиши ""Escape""...")
    Thread.Sleep(1000)
Loop Until CheckEscapePressed()
Print Friendly, PDF & Email

Как прекратить общий доступ к сетевой папке в Windows

Print Friendly, PDF & Email

Чтобы прекратить доступ к общему ресурсу (папки Users, Documents и др.), нужно через панель управления открыть оснастку «Управление компьютером» и далее:

Управление компьютером Общие папки Общие ресурсы Выбрать нужный ПКМ Прекратить доступ.
Прекратить общий доступ к сетевой папке в Windows
Прекратить общий доступ к сетевой папке в Windows
Print Friendly, PDF & Email

Как изменить загрузочный носитель в виртуальной машине VMWare

Print Friendly, PDF & Email

При включении виртуальной машины VMWare, на короткое время появляется экран загрузки, на котором можно увидеть клавиши, которыми можно управлять загрузкой. Например, F2 – вход в BIOS виртуальной машины, а ESC – меню загрузки с возможностью выбора загрузочного устройства.

Загрузка виртуальной машины VMWare
Загрузка виртуальной машины VMWare

И вот мы вошли в BIOS виртуальной машины. Идём в раздел Boot, задаём последовательность загрузочных устройств, как в обычном компьютере.

BIOS виртуальной машины VMWare
BIOS виртуальной машины VMWare

По какой-то причине, виртуальная машина VMWare пока ещё не поддерживает загрузку с загрузочной флешки. Но ничего, мы можем воспользоваться сторонним менеджером загрузки. Воспользуемся, например, Plop Boot Manager.

Нужно скачать его и распаковать в любую директорию на компьютере. Затем в свойствах виртуальной машины задать в качестве устройства загрузки образ plpbt.iso, который находится в архиве. И после этого, во время загрузки виртуальной машины будет появляться меню с возможностью выбора загрузочного устройства, в том числе, флешки.

Print Friendly, PDF & Email

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

Print Friendly, PDF & Email

Допустим, у нас есть упорядоченный список объектов 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)
Print Friendly, PDF & Email

WPF: Использование системных цветов

Print Friendly, PDF & Email

Для использования системных цветов в XAML необходимо объявить цвет в секции ресурсов:

<Window.Resources>
    <SolidColorBrush x:Key="sysColor" Color="{DynamicResource {x:Static SystemColors.ControlColorKey}}" />
</Window.Resources>

А затем его можно использовать в разметке так:

<Menu Background="{StaticResource sysColor}"></Menu>
Print Friendly, PDF & Email

Как проверить версию .NET, установленную на компьютере

Print Friendly, PDF & Email

Для того чтобы определить, что в системе установлена платформа .NET, можно проверить в системном каталоге C:\Windows\System32\ наличие файла mscoree.dll – основного файла платформы .NET.

Чтобы узнать, какая версия (или версии, обычно их установлено несколько) платформы .NET установлена на компьютере, нужно проверить следующий раздел системного реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP

В этом разделе будут находиться подразделы установленных версий .NET, например: v3.0, v3.5, v4.0 и т.д.

Print Friendly, PDF & Email

WPF: Изменение источника элементов при изменении свойства

Print Friendly, PDF & Email

Чтобы динамически изменять коллекцию – источник привязки, можно воспользоваться триггерами данных DataTrigger:

<Style TargetType="ComboBox" x:Key="comboSourceStyle">
  <Style.Triggers>
    <DataTrigger Binding="{Binding Speed}" Value="0">
      <Setter Property="ItemsSource" Value="{StaticResource MyCollection1}" />
    </DataTrigger>
    <DataTrigger Binding="{Binding Speed}" Value="1">
      <Setter Property="ItemsSource" Value="{StaticResource MyCollection2}" />
    </DataTrigger>
  </Style.Triggers>
</Style>
Print Friendly, PDF & Email

Создание архива 7zip с помощью bat-файла

Print Friendly, PDF & Email

Для того чтобы быстро создавать архив с помощью архиватора 7zip, напишем такой скрипт и сохраним его с расширением ".bat":

start cmd /c ""c:\Program Files\7-Zip\7z.exe"" a d:\Baсkup\%DATE:~0,2%.%DATE:~3,2%.%DATE:~-4%.7z d:\Projects

Этот скрипт автоматически называет файл в соответствии с текущей датой. Чтобы скрипт запускался автоматически, можно создать в планировщике задач Windows задание и указать расписание: Панель управления – Администрирование – Планировщик заданий. В планировщике нажимаем Создать задачу, на вкладке Действие добавляем Запуск программы и указываем путь к нашему bat-файлу. Настраиваем расписание на вкладке Триггеры.

Print Friendly, PDF & Email

Что делать если изображение видно в редакторе XAML, но при выполнении приложения - нет

Print Friendly, PDF & Email

У вас ситуация: в редакторе XAML в Visual Studio вы задали визуальный элемент Image, который использует картинку из папки проекта. Вы видите её в редакторе, всё нормально. Но стоит запустить скомпилированное приложение – и изображения в нём не видно. Что делать?

Иногда помогает очистка решения и перекомпиляция: Построение Очистить, Построение Перестроить проект.

Если не помогло, кликаем правой кнопкой мыши на изображении в обозревателе решений, выбираем Свойства, в открывшейся панели свойств идём в Действия при сборке (BuildActions) "Нет" меняем на Ресурс (Resource).

Панель свойств изображения в Visual Studio 2013
Print Friendly, PDF & Email

XAML: Почему текст в ListView не переносится на новую строку

Print Friendly, PDF & Email

По умолчанию, если ширина элемента списка ListView больше, чем ширина списка, его содержимое не переносится на новую строку. Чтобы перенос происходил, нужно использовать шаблон DataTemplate, применённый к элементу списка:

<ListView ItemsSource="{Binding myCollection}" ItemTemplate="{StaticResource lvDataTemplate}" />

Шаблон будет таким:

<DataTemplate x:Key="lvDataTemplate">
    <TextBlock Text="{Binding}" TextWrapping="Wrap" />
</DataTemplate>
Print Friendly, PDF & Email

WPF: Как подогнать ширину столбцов GridView под содержимое элементов

Print Friendly, PDF & Email

Чтобы подогнать ширину всех столбцов таблицы GridView под ширину содержимого можно воспользоваться таким решением:

For Each gvc As GridViewColumn In myListView.View.Columns
    If Double.IsNaN(gvc.Width) Then
        gvc.Width = gvc.ActualWidth
        gvc.Width = Double.NaN
    End If
Next
Print Friendly, PDF & Email

Как быстро запустить произвольную программу из командной строки Windows

Print Friendly, PDF & Email

Чтобы запустить графический редактор Paint достаточно нажать Win + R, ввести в поле mspaint и нажать кнопку Enter. А как запустить программу, не входящую в стандартный набор программ, так же быстро и просто? Давайте для примера будем запускать графический редактор Paint.NET аналогичным образом.

  1. Откроем Свойства системы Дополнительно Переменные среды.
  2. Находим переменную PATH, нажимаем на неё и на кнопку Изменить.
  3. Если у вас Windows XP или Windows 7, через точку с запятой добавляем путь к исполняемому файлу программы, например: c:\Program Files\Java\jdk1.8.0_05\bin\;c:\Program Files\Paint.NET\ и перезагрузим компьютер, чтобы операционная система прочитала данные о новой переменной среды. Если у вас Windows 10, то нажимаем кнопку Добавить и вводим то же самое; перезагружать не обязательно.
  4. Чтобы не вводить длинное имя запускаемого файла, в директории, которую мы указали, создадим с помощью блокнота файл pdn.bat с таким содержимым:
  5. start PaintDotNet.exe
  6. Теперь для запуска Paint.NET из командной строки достаточно набрать Win+R pdn Enter.
Добавление новой переменной среды для произвольной программы в Windows
Добавление новой переменной среды для произвольной программы в Windows
Print Friendly, PDF & Email
Подписаться на этот канал RSS