Условная компиляция в C#

Появилась недавно у меня задача компиляции программы под разные устройства. Ряд устройств в моём случае обладают специфическими возможностями и для них задействуются специальные библиотеки, а для некоторых обычных устройств — эти библиотеки надо исключать. Можно конечно комментировать каждый раз — но включений довольно много и такой подход весьма проблематичен.
Но есть очень хороший выход из этой ситуации, называется он условная компиляция.
Для условной компиляции используются директивы: #define, #if, #else, #endif.
Читать дальше →

Передача параметров приложению в C#

   Собственно особых проблем с передачей параметров приложению при старте делается это в C# довольно просто, вот так:
static void Main( string[] args)
        {
            if (args.Length == 0)
            { MessageBox.Show("Нет параметров"); }
            else
            { MessageBox.Show("1"); }

            
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new FormMain());

        }

Проблема одна лишь в том, что в С# в рамках проекта может быть не один такой Main и чтобы было ясно какому из них должны быть переданы параметры, необходимо указать объект в: Project > Properties > Application > Startup Object.

Вот и всё!

Заполнение ComboBox из DataSet

Собственно в чём суть дела, нет ничего проще заполнения ComboBox-а из DataSet-а.
Делается это вот так:
SqlConnection connRC = new SqlConnection(MainParams.ConStr);
string command = "SELECT     Kod, Nam FROM Produkt ORDER BY Nam";
SqlDataAdapter da = new SqlDataAdapter(command, connRC);

DataSet ds = new DataSet();
connRC.Open();
da.Fill(ds);
connRC.Close();

comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = "Nam";
comboBox1.ValueMember = "Kod";

Но работает зараза при больших выборках — адски медленно!

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

Drag And Drop и Scroll в TreeView

Не так давно пришлось делать DragAndDrop для TreeView и с удивлением обнаружил что на .NET не работает сама собой прокрутка (никак не работает, как выяснилось Microsoft признаёт что есть такая проблема, и предлагают её решать способом описанным ниже).

Итак сам способ.

Вопервых импортируем функцию из user32 — SendMessage
Для этого разумеется не забываем включить в проект (using System.Runtime.InteropServices;)

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