Рейтинг@Mail.ru

WPF: Как привязать ComboBox к целочисленному массиву в XAML

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

Сначала в разделе ресурсов создадим целочисленный массив, не забыв импортировать пространство имён mscorlib:

<Window xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <Window.Resources>

        <x:Array Type="{x:Type sys:Int32}" x:Key="refreshPeriods">
            <sys:Int32>100</sys:Int32>            
            <sys:Int32>500</sys:Int32>
            <sys:Int32>1000</sys:Int32>
            <sys:Int32>2000</sys:Int32>
        </x:Array>

И теперь используем ComboBox так:

<ComboBox ItemsSource="{StaticResource refreshPeriods}" SelectedValue="{Binding UpdateDiagramTimerPeriod, Mode=TwoWay}" />
Подробнее ...

Драйвер для работы с LPT портом (интегрированным или в виде платы PCI)

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

Лет 10-15 назад параллельный порт был довольно востребованным интерфейсом для связи между устройствами. Сегодня производители различных устройств отдают предпочтение последовательным интерфейсам. Тем не менее, и сегодня LPT порт всё ещё можно встретить. А некоторые разработчики ещё пишут под него программы (или поддерживают написанные во времена расцвета параллельных интерфейсов). Но в компьютерах сейчас LPT порт – достаточно большая редкость. Существуют, конечно, платы расширения для компьютера, которые реализуют интерфейс LPT. Они в основном представляют собой платы на шине PCI. К сожалению, далеко не весь софт, который был написан для интегрированных в материнскую плату LPT портов, будет работать с LPT-PCI-платами.

Предлагается решение этой проблемы: программный класс, написанный под .NET, и динамическую библиотеку, которая работает с LPT. Данная реализация проверена на 32- и 64-разрядных Windows XP, Windows 7, 8 и 10 как со встроенными LPT портами, так и реализованными в виде плат расширения на шине PCI или PCI-Express. Скачать драйвер для LPT порта можно по ссылке внизу после статьи.

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

Отсев резко отличающихся наблюдений в малых выборках

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

Предлагается программный класс, написанный под .NET на языках C# и VB.NET, который позволяет находить и отсеивать резко отличающиеся значения (грубые погрешности) в малых выборках наблюдений.

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

WPF: Как использовать свойство объекта в качестве параметра конвертера IValueConverter.ConverterParameter

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

Допустим, у нас есть объект MyObject со свойствами MyData и MyProperty. Для его отображения в графическом пользовательском интерфейсе, построенном на XAML, мы хотим использовать эти два свойства, преобразовав MyData с помощью IValueConverter, а MyProperty использовать в качестве параметра конвертера ConverterParameter. Реально ли это?

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

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

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

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

Public Shared Function GetCopy(ByVal myOriginalObject As MyObject) As MyObject

  'Получаем список публичных свойств экземпляра типа MyObject:'
  Dim props() As PropertyInfo = myOriginalObject.GetType.GetProperties(BindingFlags.Public Or BindingFlags.Instance)
  Dim myObjectCopy As New MyObject
 
  'Копируем значения всех свойств, доступных для записи:'
  For Each pi As PropertyInfo In props
    If pi.CanWrite Then
      Dim value As Object = pi.GetValue(myOriginalObject, Nothing)
        pi.SetValue(myObjectCopy, value, Nothing)
      End If
    Next
 
    Return myObjectCopy
 
End Function

Можно воспользоваться и таким решением:

Dim newObj as Object = obj.MemberwiseClone()

Нужно учесть, что этот метод MemberwiseClone() копирует объект не полностью. Члены значимого типы копируются, а ссылочного – нет, копируется только ссылка.

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

Перенос текста TextWrapping в XAML

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

Зачастую нужно чтобы текст переносился на следующую строку, занимая всю ширину родительского элемента. За это отвечает свойство TextWrapping.Распространённые случаи:

<ListView HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">

Элементы ListViewItem при этом должны быть типа TextBlock, а горизонтальная полоса прокрутки HorizontalScrollBar отключена.

Или другой случай:

<GroupBox.Header>
  <TextBlock TextWrapping="Wrap" Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GroupBox}}, Path=ActualWidth}" />
</GroupBox.Header>

Вместо GroupBox.Header может быть любой контейнер. Важно, что ширина устанавливается с помощью привязки к актуальной ширине ActualWidth родителя.

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

Пример использования типа Lookup() в VB.NET

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

При хранении некоторых видов данных удобно использовать коллекции типа пара «ключ-значение» (тип KeyValuePair). В .NET для этого существует специальный тип Dictionary() – словарь, позволяющий хранить такие данные, добавлять и удалять данные в процессе выполнения программы, а также быстро и удобно извлекать их из словаря. Данные извлекаются по уникальному ключу. При попытке добавить значение с ключом, который уже существует в словаре, возникает исключение. Но что делать, если в реальных данных имеется ключ, которому соответствуют несколько разных значений? Для такого случая подойдёт тип Lookup(), работу с которым мы и рассмотрим далее.

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

Как добавить обработчик неперехваченных исключений в WinForms (VB.NET)

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

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

Private Sub formLoading(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf onUnhandledException
End Sub

Собственно, сам обработчик исключения типа UnhandledException:

Private Sub onUnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs)
    MessageBox.Show(String.Format("Источник:{0}. Описание:{1}", sender, e.ExceptionObject), "Возникло необработанное исключение")
    '[Какая-то обработка...]'
End Sub

Теперь, при возникновении исключительной ситуации, которая не была обработана в коде приложения, она будет обработана в данной процедуре.

Подробнее ...
Подписаться на этот канал RSS