Аннотация
В данной статье описывается, как создать
решение с компонентами, написанными на разных языках.
Требования
В следующем
списке приводится рекомендуемое аппаратное и програмное
обеспечение, сетевя инфраструктура и требуемые пакеты
исправлений:
- 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,
выполните следующее:
- Нажмите кнопку Пуск и выберите
Программы, выберите Microsoft Visual Studio .NET.
- Щелкните Microsoft Visual Studio
.NET.
- Выберите New Project и затем щелкните
Visual Basic Projects.
- В Templates щелкните Windows
Application.
- В поле Name введите
HowToMultiComp и нажмите кнопку
OK.
- После создания проекта убедитесь, что видно окно
Solution Explorer. Если окно Solution Explorer не видно,
нажмите CTRL+ALT+L.
У Вас теперь есть оболочка
приложения Visual Basic .NET на основе форм Windows с именем
HowToMultiComp.
Для создания решения с компонентами,
написанными на разных языках добавьте библеотеку классов
Visual Basic .NET, а затем библиотеку классов Visual C#.
Библиотека классов Visual C# должна быть добавлена
первой. Для добавления библиотеки классов Visual C# выполните
следующее:
- В окне Solution Explorer щелкните правой кнопкой мыши
Solution 'HowToMultiComp', выберите
Add, а затем New Project.
- Щелкните Visual C# Projects.
- В Templates выберите Class
Library.
- В поле Name введите
NWClassLib и нажмите кнопку OK.
Библиотека классов Visual C# добавлена в
решение.
Файл Class1.cs открыт в
окне редактора.
- Добавьте две инструкции using в начало
кода для доступа к классам в следующих пространствах имен:
using System.Data;
using System.Data.SqlClient;
- Для добавления и заполнения 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. Чтобы сделать это, выполните
следующее:
- В окне Solution Explorer щелкните правой кнопкой мыши
Solution 'HowToMultiComp', выберите
Add, а затем New Project.
- Щелкните Visual Basic Projects.
- В Templates выберите Class
Library.
- В поле Name введите
VBClassLib и нажмите кнопку
OK.
Библиотека классов Visual Basic
.NET добавлена в решение.
Файл
Class1.vb открыт в окне редактора.
- Добавьте инструкцию Imports в начало
кода Class1.vb для доступа к классам в пространстве имен
System.Text:
Imports System.Text
- Добавьте следующий код в 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, включающее этот
компонент. Для создания приложения, выполните следующее:
- Добавьте ссылки для двух компонентов библиотек классов.
Чтобы сделать это, выполните следующее:
- В окне Solution Explorer щелкните правой кнопкой мыши
References в
HowToMultiComp и выберите Add
Reference.
- В Projects, нажав и удерживая клавишу
"CTRL", щелкните NWClassLib, а затем
SBClassLib.
- Для выбора обоих проектов щелкните
Select.
- При появлении обоих проектов в окне Selected
Components нажмите кнопку
OK.
Теперь проекты перечислены в
References для приложения
Windows.
- Файл Form1.vb открыт в Design view. Если файл Form1.vb
еще не открыт, то дважды щелкните Form1.vb
в окне Solution Explorer.
- Нажмите "CTRL+ALT+X" для открытия панели управления.
- В панели управления выберите Windows
Forms.
- Перетащите кнопку на форму и нажмите "F4" для вызова
вкладки свойств для кнопки.
- Измените параметр Text Property на
Show Products.
- Добавьте другую кнопку.
Измените свойство
Text на Build String.
- Перетащите управляющий элемент DataGrid
на форму и поместите его ниже кнопок. Захватите нижний
правый угол управляющего элемента DataGrid
и перетащите таким образом, чтобы заполнить оставшуюся
область на форме.
- Дважды щелкните по кнопке Show
Products.
Visual Studio .NET автоматически
создаст обработчик события Click.
- Для создания экземпляра класса
NWClassLib.Class1 добавьте следующий код
для обработчика события Click:
Dim objNW As New NWClassLib.Class1()
DataGrid1.DataSource = objNW.GetProducts.Tables(0)
Этот код устанавливает свойство
DataSource для DataGrid в
значение DataSet, возвращаемое методом
GetProducts из библиотеки классов.
- Дважды щелкните кнопку Build String для
создания второго обработчика события Click.
- Следующий код берет содержимое каждой ячейки первой
строки 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
Проверка
работоспособности
- Нажмите "F5" для запуска приложения в режиме отладки.
- При появлении формы нажмите Get
Products.
DataGrid
отобразит все продукты из таблицы продуктов базы данных
Northwind.
- Щелкните Build String.
Появится
окно MessageBox, которое показывает
объединенное содержимое ячеек первой строки вплоть до ячейки
с индексом 7 (начиная с нуля).
- Нажмите "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)