среда, 10 февраля 2016 г.

Работа с базами данных на С#

Использование Mono и Gtk# 
В данной статье описана установка системы mono и приведен пример работы с базой данных на языке C# в Linux. В качестве операционной системы выбрана Linux Gentoo
 прежде всего необходимо установить Mono. В Gentoo это будет выглядеть следующим образом
#emerge mono
Далее, убеждаемся, что в системе присутствуют библиотека gtk-sharp.

#emerge -s gtk-sharp

Если библиотека не установленна, устанавливаем ее. Теперь мы готовы создать наше первое приложение на С#. Создаем файл test.cs. Его можно создать в любом текстовом редакторе. Далее добавляем в файл следующие строки:

using System;
namespace test
{
      class test
      {
          void string Main() {
             Console.write("Hello, world!");
          }
        }
}

Сохраняем файл и выполняем команду:

uran@dmitry$ msc Test.cs

после компиляции получаем файл Test.exe. Для выполнения программы печатаем следующую команду:

uran@dmitry$ mono Test.exe

В результате можем лицезреть на экране компьютера сакраментальную фразу Hello, world. Пытливый читатель может сказать, что не плохо было бы воспользоваться утилитой make. В дальнейшем так  и поступим, в пока  мы будет  все команды вводить по отдельности. Естественно, как и для любого «правильного» языка программирования для mono есть среда программирования, но  по моему мнению, да нормальной рабочей среды ей еще расти и расти.
   Первый этап мы прошли, создали простейшее приложение на c# и даже смогли получить результат, но ведь хочется чего-нибудь более полезного, чем радостное приветствие окружающего мира. Теперь попробуем создать программу выполняющую какую либо полезную работу, к примеру свой собственный web-браузер. Да, да именно его. Ничего принципиально сложного в этом нет. Но прежде чем мы приступим к созданию нашего браузера необходимо понять саму концепцию оконного интерфейса в Linux, точнее в оболочке Gnome. Я буду рассматривать именно эту оболочку так как она по умолчанию ставиться во многих дистрибутивах, а во вторых каких-то принципиальных отличий, к примеру от КDE, нет. Структура оконного приложения в Gnome строиться по иерархическому принципу. базой для всего интерфейса служит основное окно, в нем размещаются специальные компоненты называемые контейнерами. Существует несколько типов контейнеров, в данный момент мы рассмотрим два вида HBox и VBox.
        HBox - свободное от других компонентов место основного окна разбивается на ряд вертикальных зон(боксов). Количество зон задается при инициализации компонента.  Здесь нет никакой ошибки, компоненты будут заполнять эти зоны по порядку слева на направо.
        VBox - соответственно разделяют окно на вертикальные зоны. Количество зон так же задается в конструкторе.   
     Надо отметить, что управляющие компоненты в GNOME называются виджетами. Поэтому будем называть их в дальнейшем именно так. По умолчанию виджет, размещаемый в одной из зон контейнера стремиться полностью заполнить его, это удобно в том плане, что при изменении размеров основного окна, виджеты будут упорядочиваться автоматически пропорционально размерам основного окна. Сначала создадим просто оконное приложение, которое в дальнейшем можно использовать в качестве шаблона для всех оконных приложений использующих библиотеку GTK.
    Любое оконное приложение обязательно должно при инициализации своего базового класса вызывать два метода класса Gtk.Application, Init и Run, а при закрытии главного окна приложения метод Quit. Таким образом гарантируется правильная инициализация, работа и завершение работы библиотеки визуальных компонентов. Ниже приведен пример, в котором мы создаем окно с единственной кнопкой.


                        using  System;
                       using Gtk;
  
                       public class Button_test{
                      
                           public static void Main(string[] args){
                                 //вызываем конструктор класса
                                 new Button_test();                                

                           }
                        
                           Button_test(){
                                 //Инициализируем GTK в нашем приложении
                                 Application.Init();
                                 //Создаем главное окно прилоежния
                                 Windows mwin = new Windows(“Button test”);
                                
                                 //Создаем тестовый виждет - кнопку
                                 Button bt = new Button(“PRESS ME”);
                                
                                 mwin.Add(bt);
                                 mwin.ShowAll();   //отрисовываем все компоненты, которые мы разместили
                                                           //в основном окне
                                 Application.Run(); //запускаем главный цикл
                           }

                           void onButtonTestDestr(object o, DeleteEventArgs arg){
                             //Вызываем метод Quit, для правильного завершения работы                
                             //библиотеки визуальных компонентов

                             Application.Quit();

                           }

                       }


Сохраним данную программу в файле Button_Test.cs. Далее запустим в командной строке команду компиляции.

                     uran@dmitry$ mcs -pkg:gtk-sharp Button_Test.cs

После завершения компиляции можем запустить нашу программу, в результате мы увидим окно с кнопкой. Как я уже отмечал, никакой функциональности в нашу программу мы не закладывали, поэтому нет реакции на нажатие кнопки. Данная программа будет использоваться в качестве шаблона для построения в дальнейшем более сложных приложений. Обратите внимание, что при создании управляющего элемента, мы не задавали, таких обычных в System.Windows.Forms, свойств как Hight и Width. Дело в том, что согласно идеологии GTK, помещаемый на форму элемент стремиться заполнить все доступное ему пространство.
 Теперь, используя предыдущий пример, как  шаблон, мы с вами попробуем создать свой собственный web браузер. Изобретать велосипед мы не будем и в качестве основы  возьмем движок от веб-браузера mozilla - gecko. Запустим наш текстовый редактор и напечатаем следующий код:

          using System;
     using Gtk;
     using Gecko ;
     class myweb{
             Entry addr;
             Label lab;
             Button back, fwrd, stop, home;
             Notebook nt;
             WebControl web;
             Window mwin;
              
              public static void Main(string[] args){
                 
                  //вызываем конструктор класса
                  new myweb() ;

              }

             myweb()  {
                
                Application.Init();                     //инициализация Gtk
                mwin = new Window();            //создаем базовое окно приложения
                mwin.SetDefaultSize(800,600);  //задаем начальные размеры окна
                                                              //задаем обработчик  события возникающего при закрытии
                                                              //базового окна
                mwin.DeleteEvent += new DeleteEventHandler(on_mwin_del);

                VBox mainlt = new VBox(false, 3);
                HBox menu = new HBox(false,5);
                back = Button(Gtk.Stock.Back);
                back.Clicked += new EventHandler(onBackClick);
                menu.PackStart(back, false, true,0);

                  

               Application.Run();

             }


            void onBackClick( Objects o, EventHandlerArgs e)  {
                 web.GoBack();
            }

        void on_mwin_del(object o, DeleteEventArgs arg){
     
                Application.Quit();
        }

      }
   


  А теперь разберем, что написано в программе. Создаем базовый класс myweb. Для удобства записи всю начальную инициализацию программы помещаем в конструктор класса. Как видим наша программа мало отличается от предыдушего примера. Сначала выполняем инициализацию Gtk, вызвав метод Init. Затем создаем бозовое окно нашего браузера. Далее создаем контейнеры для  размещения все элементов управления. Как и в "настоящем" браузере окно нашего приложения будет делиться на несколько зон. Верняя зона - кнопки управления, середина окна - рабочая зона, где мы будем отображать выбранные нами веб-страницы. И нижняя часть окна, ней будут размещены строка статуса и прогресс-бар. Исходя из этих соображений создаем контейнер типа VBox() состоящий из трех зон. Далее создаем


Комментариев нет:

Отправить комментарий