Белорусская цифровая библиотека





Сегодня в номере

Новости
  • altWebDeveloper #4
  • ASP.NET Developer Kits
  • Google остается лидером поиска в интернете
  • Microsoft открыла Hotmail для легального спама
  • Стартовал восьмой Российский интернет-форум
  • Новый российский сервис для пересылки файлов без электронной почты
  • Немецкая программа для обхода блокираторов рекламы
  • Конкурс для разработчиков .NET!
  • Новости .NET
  • "Десерт": Microsoft запатентовала яблоки
    Microsoft .NET
  • Доступ к файлам
  • Использование «ASP:XML runat=server> внутри страницы ASP.NET
  • Как сохранить позицию скроллинга странице после PostBack
  • Использование Microsoft Visual Studio .NET
  • Как создать решение с компонентами, написанными на разных языках
  • Вопросы и ответы конкурса разработчиков .NET
  • Visual Studio для "бедных"
  • ASP .NET Web Matrix
  • C# - инструмент разработки SharpDevelop
    Web-promoting
  • Стратегии позиционирования сайта в поисковых системах
  • Глоссарий терминов по поисковым системам
  • Что такое Robots.txt?
  • Трафик от ссылающихся сайтов
  • Анализ спроса и повышение видимости в поисковых машинах
  • Богатые и бедные проектовладельцы
  • Поисковые системы в интернете
  • Как выбрать поисковую машину
  • Как сделать веб-сайт эффективным
    .NET on-line
  • Англоязычные сайты
  • Русскоязычные сайты
  • Обмен ссылками
    Для души
  • Брюс Стерлинг
    Наш нейронный Чернобыль


    Рассылка журнала

    Рассылки@Mail.ru
    Новости altWebDeveloper

    © 2004 CAS "altDesign"
    Все права защищены

  • ..: altWebDeveloper - сетевой журнал для вебмастеров
    и разработчиков Microsoft .NET :..

    ..: Как создать решение с компонентами, написанными на разных языках :..




    СОДЕРЖАНИЕ
    • Аннотация
      • Требования
      • Создание решения с компонентами, написанными на разных языках.
      • Полный текст кода примера
        • Полный текст кода примера (Class1.cs)
        • Полный текст кода примера (Class1.vb)
        • Полный текст кода примера (Form1.vb)
      • Проверка работоспособности
      • Разрешение проблем
    • Ссылки

    Аннотация

    В данной статье описывается, как создать решение с компонентами, написанными на разных языках.

    Требования

    В следующем списке приводится рекомендуемое аппаратное и програмное обеспечение, сетевя инфраструктура и требуемые пакеты исправлений:

    • Microsoft Windows 2000 Professional (или Server)
      -или-
      Microsoft Windows XP Professional с установленной средой .NET Framework
    • Microsoft Visual Studio .NET
    • Microsoft SQL Server 7.0 или выше с базой данных Northwind.

    В данной статье подразумевается, что Вы знакомы со следующими темами:

    • Наследование Реализации
    • Формы Windows
    • ADO.NET
    Создание решения с компонентами, написанными на разных языках.

    В данной статье описывается, как создать решение, содержащее следующие три проекта:

    • Небольшое Windows-приложение Visual Basic .NET, которое использует методы в двух других классах проекта.
    • Проект библиотеки классов Visual C#, сожержащий метод, реализующий доступ к базе данных Northwind и возвращающий DataSet.
    • Проект библиотеки классов Visual Basic .NET, сожержащий метод, который получает коллекцию ArrayList строковых объектов и возвращает одно значение - строку, объединенную с использованием экземпляра класса StringBuilder.

    Для создания оболочки в виде приложения Visual Basic .NET на основе форм Windows, выполните следующее:

    1. Нажмите кнопку Пуск и выберите Программы, выберите Microsoft Visual Studio .NET.
    2. Щелкните Microsoft Visual Studio .NET.
    3. Выберите New Project и затем щелкните Visual Basic Projects.
    4. В Templates щелкните Windows Application.
    5. В поле Name введите HowToMultiComp и нажмите кнопку OK.
    6. После создания проекта убедитесь, что видно окно Solution Explorer. Если окно Solution Explorer не видно, нажмите CTRL+ALT+L.

      У Вас теперь есть оболочка приложения Visual Basic .NET на основе форм Windows с именем HowToMultiComp.

    Для создания решения с компонентами, написанными на разных языках добавьте библеотеку классов Visual Basic .NET, а затем библиотеку классов Visual C#.

    Библиотека классов Visual C# должна быть добавлена первой. Для добавления библиотеки классов Visual C# выполните следующее:

    1. В окне Solution Explorer щелкните правой кнопкой мыши Solution 'HowToMultiComp', выберите Add, а затем New Project.
    2. Щелкните Visual C# Projects.
    3. В Templates выберите Class Library.
    4. В поле Name введите NWClassLib и нажмите кнопку OK.

      Библиотека классов Visual C# добавлена в решение.

      Файл Class1.cs открыт в окне редактора.
    5. Добавьте две инструкции using в начало кода для доступа к классам в следующих пространствах имен:
      using System.Data;
      using System.Data.SqlClient;
      					
    6. Для добавления и заполнения DataSet данными из таблицы продуктов базы данных Northwind замените метод Class1() следующим кодом (Вам может понадобиться скорректировать строку соединения для Вашего компьютера):
      public static DataSet GetProducts()
      {
      	DataSet ds = new DataSet();
      SqlDataAdapter sqlDS = new SqlDataAdapter("select * from products", _
       new SqlConnection("server=(local);database=northwind;uid=sa"));
      	sqlDS.Fill(ds);
      	return ds;
      }
      					

    Далее Вы должны создать библиотеку классов Visual Basic .NET. Чтобы сделать это, выполните следующее:

    1. В окне Solution Explorer щелкните правой кнопкой мыши Solution 'HowToMultiComp', выберите Add, а затем New Project.
    2. Щелкните Visual Basic Projects.
    3. В Templates выберите Class Library.
    4. В поле Name введите VBClassLib и нажмите кнопку OK.

      Библиотека классов Visual Basic .NET добавлена в решение.

      Файл Class1.vb открыт в окне редактора.
    5. Добавьте инструкцию Imports в начало кода Class1.vb для доступа к классам в пространстве имен System.Text:
      Imports System.Text
      					
    6. Добавьте следующий код в Public Class Class1, который использует экземпляры класса StringBuilder для объединения простой строки из строк, содержащих коллекцию ArrayList:
      Shared Function BuildString(ByVal arlStrings As ArrayList) As String
         Dim s As String
         Dim sb As New StringBuilder()
      
         For Each s In arlStrings
         	sb.Append(s)
            	sb.Append(", ")
         Next
         Return sb.ToString
      End Function
      					

    Теперь Вы можете создать приложение Visual Basic на основе форм Windows, включающее этот компонент. Для создания приложения, выполните следующее:

    1. Добавьте ссылки для двух компонентов библиотек классов. Чтобы сделать это, выполните следующее:
      1. В окне Solution Explorer щелкните правой кнопкой мыши References в HowToMultiComp и выберите Add Reference.
      2. В Projects, нажав и удерживая клавишу "CTRL", щелкните NWClassLib, а затем SBClassLib.
      3. Для выбора обоих проектов щелкните Select.
      4. При появлении обоих проектов в окне Selected Components нажмите кнопку OK.

        Теперь проекты перечислены в References для приложения Windows.
    2. Файл Form1.vb открыт в Design view. Если файл Form1.vb еще не открыт, то дважды щелкните Form1.vb в окне Solution Explorer.
    3. Нажмите "CTRL+ALT+X" для открытия панели управления.
    4. В панели управления выберите Windows Forms.
    5. Перетащите кнопку на форму и нажмите "F4" для вызова вкладки свойств для кнопки.
    6. Измените параметр Text Property на Show Products.
    7. Добавьте другую кнопку.

      Измените свойство Text на Build String.
    8. Перетащите управляющий элемент DataGrid на форму и поместите его ниже кнопок. Захватите нижний правый угол управляющего элемента DataGrid и перетащите таким образом, чтобы заполнить оставшуюся область на форме.
    9. Дважды щелкните по кнопке Show Products.

      Visual Studio .NET автоматически создаст обработчик события Click.
    10. Для создания экземпляра класса NWClassLib.Class1 добавьте следующий код для обработчика события Click:
      Dim objNW As New NWClassLib.Class1()
            DataGrid1.DataSource = objNW.GetProducts.Tables(0)
      						
      Этот код устанавливает свойство DataSource для DataGrid в значение DataSet, возвращаемое методом GetProducts из библиотеки классов.
    11. Дважды щелкните кнопку Build String для создания второго обработчика события Click.
    12. Следующий код берет содержимое каждой ячейки первой строки DataGrid до 7-й ячейки и затем добавляет содержимое в коллекцию ArrayList. Далее коллекция ArrayList передается методу SBClassLibrary, который возвращает строку, отображаемую функцией MessageBox. Наличие экземпляра класса не важно, так как метод был объявлен раньше с использованием ключевого слова "shared".

      Добавьте следующий код в обработчик события Click:
      Dim arl As New ArrayList()
            Dim i As Int32
            For i = 0 To 7
            	arl.Add(DataGrid1.Item(0, i))
            Next
            MessageBox.Show(SBClassLib.Class1.BuildString(arl))
      					
    Полный текст кода примера
    Полный текст кода примера (Class1.cs)
    using System;
    using System.Data;
    using System.Data.SqlClient;
    
    namespace NWClassLib
    {
    	/// <summary>
    	/// Краткое описание Class1.
    	/// </summary>
    	public class Class1
    	{
    		public static DataSet GetProducts()
    		{
    			DataSet ds = new DataSet();
    SqlDataAdapter sqlDS = new SqlDataAdapter("select * from products", _
     new SqlConnection("server=C-176012-C;database=northwind;uid=sa"));
    			sqlDS.Fill(ds);
    			return ds;
    		}
    	}
    }
    				
    Полный текст кода примера (Class1.vb)
    Imports System.Text
    
    Public Class Class1
        Shared Function BuildString(ByVal arlStrings As ArrayList) As String
            Dim s As String
            Dim sb As New StringBuilder()
            For Each s In arlStrings
                sb.Append(s)
                sb.Append(", ")
            Next
    
            Return sb.ToString
        End Function
    End Class
    				
    Полный текст кода примера (Form1.vb)
    Public Class Form1
        Inherits System.Windows.Forms.Form
    
    #Region " Windows Form Designer generated code "
    
        Public Sub New()
            MyBase.New()
    
             'Этот вызов требуется для конструктора форм Windows.
            InitializeComponent()
    
            'Добавьте любую инициализацию после вызова InitializeComponent().
    
        End Sub
    
        'Form overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
    
        'Требуется для конструктора форм Window.
        Private components As System.ComponentModel.IContainer
    
        'Примечание: Эта процедура требуется для конструктора форм Windows.
        'Она может быть изменена с помощью конструктора форм Windows.  
        'Не изменяйте эту процедуру с помощью редактора кода.
        Friend WithEvents Button1 As System.Windows.Forms.Button
        Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
        Friend WithEvents Button2 As System.Windows.Forms.Button
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            Me.Button1 = New System.Windows.Forms.Button()
            Me.DataGrid1 = New System.Windows.Forms.DataGrid()
            Me.Button2 = New System.Windows.Forms.Button()
            CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).BeginInit()
            Me.SuspendLayout()
            '
            'Button1
            '
            Me.Button1.Location = New System.Drawing.Point(24, 16)
            Me.Button1.Name = "Button1"
            Me.Button1.Size = New System.Drawing.Size(96, 23)
            Me.Button1.TabIndex = 0
            Me.Button1.Text = "Show Products"
            '
            'DataGrid1
            '
            Me.DataGrid1.DataMember = ""
            Me.DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
            Me.DataGrid1.Location = New System.Drawing.Point(24, 48)
            Me.DataGrid1.Name = "DataGrid1"
            Me.DataGrid1.Size = New System.Drawing.Size(256, 200)
            Me.DataGrid1.TabIndex = 1
            '
            'Button2
            '
            Me.Button2.Location = New System.Drawing.Point(200, 16)
            Me.Button2.Name = "Button2"
            Me.Button2.Size = New System.Drawing.Size(80, 24)
            Me.Button2.TabIndex = 2
            Me.Button2.Text = "Build String"
            '
            'Form1
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.ClientSize = New System.Drawing.Size(292, 266)
            Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Button2, _
    		Me.DataGrid1, Me.Button1})
            Me.Name = "Form1"
            Me.Text = "Form1"
            CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).EndInit()
            Me.ResumeLayout(False)
    
        End Sub
    
    #End Region
    
        Private Sub Button1_Click(ByVal sender As System.Object, _
    	 ByVal e As System.EventArgs) Handles Button1.Click
            Dim objNW As New NWClassLib.Class1()
            DataGrid1.DataSource = objNW.GetProducts.Tables(0)
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, _
    	 ByVal e As System.EventArgs) Handles Button2.Click
            Dim arl As New ArrayList()
            Dim i As Int32
            For i = 0 To 7
                arl.Add(DataGrid1.Item(0, i))
            Next
    
            .Show(SBClassLib.Class1.BuildString(arl))
        End Sub
    End Class
    				
    Проверка работоспособности
    1. Нажмите "F5" для запуска приложения в режиме отладки.
    2. При появлении формы нажмите Get Products.

      DataGrid отобразит все продукты из таблицы продуктов базы данных Northwind.
    3. Щелкните Build String.

      Появится окно MessageBox, которое показывает объединенное содержимое ячеек первой строки вплоть до ячейки с индексом 7 (начиная с нуля).
    4. Нажмите "SHIFT+F5" для выхода из режима отладки и возвращения в Visual Studio .NET.
    Разрешение проблем

    Убедитесь что Вы не смешиваете синтаксис при работе с двумя языками. Язык Visual C# .NET очень специфичен и сообщения об ошибках не всегда интуитивно понятны в отличие от сообщений об ошибках в языке Visual Basic .NET. Поэтому Вы можете сделать закладку на раздел "Language Equivalents" из пакета .NET Framework software development kit для разрешения подобных проблем. Вы можете найти соответствующий раздел в справке MS Help:

    ms-help://MS.VSCC/MS.MSDNVS/vsintro7/html/vxgrfLanguageEquivalents.htm

    Ссылки

    За дополнительной информацией обратитесь к веб-сайту MSDN:

    Creating a Multi-Project Solution
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vjcore98/html/vjhowcreatingmultiprojectsolution.asp




    Microsoft Knowledge Base Article - 317702
           Корпорация Microsoft. Все права защищены.


    При перепечатке любого материала с журнала или с сайта, видимая ссылка на источник http://altwebdeveloper.nm.ru и все имена, ссылки авторов обязательны.

    © 2004 CAS "altDesign"
    © Валерий В. Макеев (deepInfinity)



    @ library.by