Убираем панель задач на .NET CF 2.0 (делаем Full Screen)

Недавно столкнулся с проблемой, что FormWindowState.Maximized не везде работает. Например у меня на одном из устройств с Windows CE 6.0 — отказалось работать, и ни какие танцы с бубнами не помогали. Долго копался в интернете, в русскоязычном ничего не нащёл, набрёл на руководство на одном англоязычном сайте.

Сделал у себя, заработало!

Итак, проблема решается тремя функциями из coredll.dll:
Читать дальше →

Свой сервер и клиент к нему при помощи TcpListener и TcpClient

Не так давно, наткнулся на одну статейку на Хабре, по поводу TcpListener — там с его помощью делался Web-сервер. Поскольку есть некоторые задачи требующие создания подобного приложения, было решено изучить вопрос и попробовать воссоздать увиденное. Переписал что было в публикации в приложение (всегда так делаю прежде чем скачать исходник — лучше для понимания) запустил, не работает. Точнее работает но через раз — как то кривенько и для реально рабочего приложения не годится. Скачал исходники — тоже самое, работает но через раз. Здесь работает через раз — означает что клиент то цеплялся то не цеплялся к серверу. Решил изучить вопрос с ноля. Накопал некоторый материал в интернете, всё это переработал — получилось тестовое рабочее приложение.

Начну с того, что я хотел сделать: пример состоит из двух приложений — сервера и клиента. (Мне Web-сервер не особо интересен, хотя пример можно достаточно просто переделать в него.)

Сервер — принимает данные от клиента (текст), преобразует строку полученную от клиента к заглавным буквам и отправляет обратно клиенту.

Клиент — отправляет n-ное количество раз заданную строку клиенту (сделано чтобы поназапускав несколько клиентов, в том числе с разных машин, посмотреть как будет себя вести сервер) прибавляя порядковый номерок к посланному тексту и получает такое же количество раз ответ от сервера с текстом заглавными буквами.

Дополнительно — вначале пример был без использования ThreadPool, но потом решил добавить, так сервер должен работать стабильнее (по моему мнению) и обрабатывать большее количество одновременных запросов.

Поскольку код я прокомментировал довольно хорошо, то привожу как есть, без дополнительного описания.
Читать дальше →

Один contextMenuStrip для разных форм

Вариант размещения одного contextMenuStrip на разных формах для разных элементов.

В основном пространстве имен добавляем класс с contextMenuStrip:
namespace TestContextMenu
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

    }
    static class Menushki
    {
        public static ContextMenuStrip menu1 = new ContextMenuStrip();
       
        
    }
}
В нашем случае это класс Menushki
Читать дальше →

Динамическое создание элементов отображения и вывод в них информации из базы данных

Здесь я приведу пример динамического создания текстовых полей TextBox, с выводом в эти поля значений из источника данных.

Сразу к делу:

1. Задаем некоторые переменные и пару массивов.
DataSet ds = new DataSet(); //Создаем источник данных.
TextBox[] tb = new TextBox[100];//Массив из 100 текстбоксов, можно и списком воспользоваться, но пусть будет так.
Label[] lb = new Label[100]; //Массив подписей к полям.
int row_num = 0; //Номер выбранной записи в таблице.


Читать дальше →

Многострочный ListView для .NET CF (описание, исходный код и пример работы).

Здесь я приведу описание основных свойств и методов компонента GraphListView.

Самое главное, как указать источник данных:
//1. Бросаем на форму GraphListView
//связываем компонент с данными и обновляем его.
graphListView1.GraphListDataSet = new DataSet();
string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\dataset.xml";
//В данном случае источник данных загрузили из XML файла.
graphListView1.GraphListDataSet.ReadXml(path);

//Указываем наименование таблицы в источнике данных
graphListView1.DataTableName = "Table";
//Указываем наименование поля таблицы в котором передается значение
graphListView1.FieldValue = "ID_DOCHEAD";
//Указываем наименование поля таблицы в котором передается отображаемое наименование
graphListView1.FieldDisplay = "NAME";

//Количество строк в позиции, можно не указывать по умолчанию 2;
//Может принимать значение от 1 до 10;
graphListView1.RowCountByPos = 2;
//Цвет текста, можно не указывать по умолчанию Белый;
graphListView1.FontColor = Color.Red;

//Обязательная функция после применения всех обязательных параметров выше.
//Заполнит и отобразит Список.
graphListView1.RefreshList();

Читать дальше →

Многострочный ListView для .NET CF

Давно была необходимость в таком компоненте, и вот наконец дошли руки. Первая версия готова. Данный компонент, это ListView для мобильных устройств на базе Windiws Mobile в котором можно задавать количество строк в позиции (до 10 строк). Предназначен в первую очередь для современных устройств с большими экранами и довольно мощной аппаратной начинкой, но будет работать и на слабеньких устройствах с разрешением экрана 240X320, при этом ширина строк меньше но количество строк удваивается (для EGA — возможно только четное количество строк, задав 5 получите 10, задав 1 получите 2; 1,3 или 5 строк быть не может). В качестве фона используется произвольное изображение.

Скриншоты работы компонента:
GraphListViewGraphListViewGraphListView

Скачать компонент: GraphListView.rar

Читать дальше →

Работа со строками Strings в C#

Клаcc Strings включает множество методов сравнения, поиска и изменения строковых значений. Здесь я приведу список часто необходимых (лично мне) возможностей этого класса:

Empty — свойство определяющее пустая ли строка;
Compare() — сравнивает две строки;
CompareOrdinal() — позволяет сравнивать строки в независимости от региональных настроек;
Concat() — объединяет две и более строки в новую строку;
Copy() — Копирует исходную строку;
Equals() — проверяет, содержат ли две строки одинаковые значения;
Format() — форматирует строку, используя строго заданный формат;
Intern() — возвращает ссылку на существующий экземпляр строки;
Join() — добавляет новую строку в заданное место уже существующей строки;
Chars — индексатор символов строки;
Length — количество символов в строке;
Читать дальше →

Работа с базой данных FireBird и InterBase из C#

Часто сталкиваюсь с необходимостью взаимодействия различных приложений написанных на .NET с базами данных FireBird и InterBase. Поэтому решил написать пример для памяти, чтобы в следующий раз не искать по собственным исходникам а быстренько заглянуть сюда. Возможно кому-то тоже пригодится.

Итак, чтобы подключиться к базе данных нам потребуется Коннектор: «FirebirdClient-2.5.0-Alpha2.msi» — в моём случае такой, возможно уже есть новее. (вбиваете в поисковике — найдётся).

После установки в Program Files появится папочка FirebirdClient 2.0 — в ней лежат необходимые библиотеки. Добавляем оттуда в наш проект через «Add Reference» библиотеку: FirebirdSql.Data.FirebirdClient.dll

Далее отличий от работы с любыми другими базами данных в .NET, практически нет, пример:
//Подключение к FireBir.
string connectionString = "User=SYSDBA;Password=masterkey;Database=D:\SMDK\DBase\SmarketFood.fdb;DataSource=roman-book;Port=3050;Dialect=3;Charset=WIN1251;Role=;Connection lifetime=30;Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;";
FbConnection con = new FbConnection(connectionString);
//Думаю строка подключения хотя и большая но понятная


И далее всё как обычно, стандартный набор Методов:
con.Open();
FbCommand command = new FbCommand("select count(*) from table", con);
con.Close();
//FbDataReader - DataReader. (Всё как обычно работает аналогично)
//FbDataAdapter - DataAdapter. (Точно так-же)


P.S.
FirebirdClient-2.5.0-Alpha2.msi — проверял работает как с FireBird так и с InterBase замечательно работает.

Отправка почты в C#

Простой вариант отправки почты, стандартными средствами.

Для него нам необходимо подключить библиотеки:
using System.Net;
using System.Net.Mail;
using System.Net.Mime;

Сам код отправки письма с вложением:
//Указываем SMTP сервер и авторизуемся.
SmtpClient Smtp_Client = new SmtpClient("почтовый сервер", порт);
Smtp_Client.Credentials = new NetworkCredential("пользователь", "пароль");
//Выключаем или включаем SSL - (например для гугла должен быть включен).
Smtp_Client.EnableSsl = false;

//Приступаем к формированию самого письма
MailMessage Message = new MailMessage();
Message.From = new MailAddress("ot_kogo@mail.ру");
Message.To.Add(new MailAddress("komu@mail.ру"));
Message.Subject = "Тема сообщения";
Message.Body = "Само сообщение";

//Теперь прикрепим файл к сообщению...
                
string file = "полный путь до файла";
Attachment attach = new Attachment(file, MediaTypeNames.Application.Octet);
            
// Добавляем информацию для файла
ContentDisposition disposition = attach.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);

Message.Attachments.Add(attach);
                
Smtp_Client.Send(Message);//непосредственно само отправление...

Вот и всё. Письмо отправлено!

Рисование Красивых линий в Windows Mobile на C#

Здесь я приведу пример кода для рисования при помощи GDI+ для Windows Mobile. Хороший человек Алекс Фейнман представил замечательную библиотеку OpenNETCF.GDIPlus для рисования очень красивых линий с использованием разнообразных кистей и заливок. Библиотека доступна с исходным кодом и позволяет делать удивительные вещи, самыми полезными (на мой взгляд) из которых являются возможность рисования прозрачных объектов (Transparent) и сглаживания краёв и объектов, что делает линии значительно более привлекательными.

Итак пример кода:
Читать дальше →