Posts with tag .NET

Export managed to unmanaged

То есть нужно написать библиотеку с экспортируемыми функциями на c# (понятно, что есть управляемый c++ для этого, но...

Поведение DateTimePicker

Интересное поведение у контрола DateTimePicker. Предположим, нужно показать форму с возможностью редактирования даты какого-нибудь объекта, скажем файла. Интуитивный подход таков:

DialogDateEdit dialog = new DialogDateEdit();
// состояние флажка будет показывать
// надо ли применять значение пикера
dialog.DateTimePicker1.ShowCheckBox = true;
dialog.DateTimePicker1.Value = File.GetCreationTime(file_name);
dialog.DateTimePicker1.Checked = false;
// -> и Value чудесным образом становится датой по умолчанию
if ((dialog.ShowDialog() == DialogResult.OK) && dialog.DateTimePicker1.Checked)
    File.SetCreationTime(file_name, dialog.DateTimePicker1.Value);
И он не работает: пикер всегда будет показывать текущую дату-время. Оказалось, что если до показа диалога установить Value при сброшенном Checked, Value не устанавливается; а если установить Value, а потом сбросить Checked, Value сбрасывается на DateTime.Now. При этом, когда диалог уже показан на экране, все эти свойства работают как и ожидается от них. ShowDialog() блокирует до закрытия диалога, поэтому Checked придется сбрасывать на событии Shown, примерно так:
DialogDateEdit dialog = new DialogDateEdit();
dialog.DateTimePicker1.ShowCheckBox = true;
dialog.DateTimePicker1.Value = File.GetCreationTime(file_name);
dialog.Shown += (s, o) =>
    (s as DialogDateEdit).DateTimePicker1.Checked = false;
if ((dialog.ShowDialog() == DialogResult.OK) && dialog.DateTimePicker1.Checked)
    File.SetCreationTime(file_name, dialog.DateTimePicker1.Value);

SHFileOperation и c#

Как использовать SHFileOperation в .NET. На самом деле все просто.

Итак, во-первых нужно объявить структуру SHFILEOPSTRUCT. Это определение из MSDN:

typedef struct _SHFILEOPSTRUCT {
HWND         hwnd;
UINT         wFunc;
LPCTSTR      pFrom;
LPCTSTR      pTo;
FILEOP_FLAGS fFlags;
BOOL         fAnyOperationsAborted;
LPVOID       hNameMappings;
LPCTSTR      lpszProgressTitle;
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;

Free reporting library

Для .NET, конечно. Их почти нет. Вот что нашлось:

Проект fyireporting. Лицензия Apache, есть исходники. Есть более - менее активный форум. Завести его не удалось: постоянно вылезают исключения даже в дизайнере. Подозреваю, что это следствие запуска под 64-битной системой. В настоящее время основной разработчик проект забросил, но вроде бы в живом состоянии форк ReportingCloud.

Проект MyNeoReport. Разработчик, Фабио Занетта, похоже, его совсем забросил, однако осталась статья с библиотекой на кодпроекте. Никаких форумов найти не удалось. Исходники недоступны. Лицензия разрешает использовать библиотеку и дизайнер безплатно.

SharpDevelop.Reports. Ныне входит в состав SharpDevelop. Есть исходники. Состояние проекта непонятно. Вроде бы обновляется, однако форум поддержки неживой.

Вот и все. Из всех трех - самый вменяемый MyNeoReport. В нем нет многого, что есть в платных продуктах, но то что есть реализовано прочно как скала.