如何管理多種程式語言的 Windows Form 解決方案在 Visual Studio.NET 或 Visual Studio 2005 中

文章翻譯 文章翻譯
文章編號: 315838 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您,如何建立小型、 多種程式語言的 Windows 應用程式。在 Visual Basic.NET 或 Visual Basic 2005 中,將建置主要應用程式。這個 Visual Basic 應用程式使用一個 Visual C# 類別庫說明多種程式語言參考和實作繼承的元件。

需求

下列清單列出建議的硬體、 軟體、 網路基礎結構及您需要的服務套件:
  • Microsoft Windows 2000 專業版、 Microsoft Windows 2000 Server、 Microsoft Windows XP 商用版或 Microsoft Windows XP 伺服器與 Microsoft.NET Framework 安裝
  • Microsoft 資料引擎 (MSDE) 或 Microsoft SQL Server 7.0 (含) 以後版本與北風資料庫
本文假設您已熟悉下列主題:
  • 實作繼承
  • Windows Form
  • Microsoft ADO.NET

建立多語系的 Windows 應用程式

這些步驟將告訴您,如何建立小型、 多種程式語言的 Windows 應用程式。時您按一下 [是] 按鈕您可以檢視從 Northwind 資料庫的所有產品在 DataGrid 控制項中。
  1. 建立 Visual Basic Windows 應用程式專案,如下所示:
    1. 啟動 Microsoft Visual Studio.NET 或 Microsoft Visual Studio 2005,然後按一下 [新增專案]。
    2. 按一下 [專案類型,] 下的 [Visual Basic 專案]。在 [範本,] 下按一下 [Windows 應用程式]。重新命名專案 MultiLangHowTo,然後按一下 [確定]

      附註在 [Visual 的 Studio 2005 按一下 [專案類型] 下的 [Visual Basic]。
  2. 請確定可以看見 [方案總管] 視窗。若是,請按一下 [檢視] 功能表上的 [方案總管]。
  3. 現在您已經有了 Visual Basic.NET 或 Visual Basic 2005 Windows Form 的應用程式,在名為 MultiLangHowTo 方案內的殼層。若要將此多語言方案,您必須新增一個 Visual C# 類別庫。

    方案總管] 視窗中 MultiLangHowTo] 上按一下滑鼠右鍵,並指向 [新增,然後按一下 [新增專案]。在 [專案類型 下, 按一下 [Visual C# 專案]。在 [範本,] 下按一下 [類別庫]。重新命名類別程式庫 NWClassLib。 按一下 [確定]],將這個類別庫加入至方案。

    附註在 Visual 的 Studio 2005 按一下 Visual C#專案類型] 下。
  4. Class1.cs 會出現在編輯器視窗中。將下列命名空間宣告加入至這個視窗的頂端。這些宣告可讓您存取各種類別,讓您可以建立和填滿 資料集 物件
    using System.Data;
    using System.Data.SqlClient;
    					
  5. 類別 1 方法取代為下列的程式碼,這會建立並使用所有北風產品資料表中資料來填都滿 資料集
    public static DataSet GetProducts()
    {
       DataSet ds = new DataSet();
       SqlDataAdapter sqlDS = new SqlDataAdapter(
          "select * from products", new SqlConnection(
          "server=(local);database=northwind;Integrated Security=SSPI"));
       sqlDS.Fill(ds);
       return ds;
    } 
    						
    注意: 您開發系統可能需要不同的 SQL 連接字串。問題發生,請連絡您的系統管理員。
  6. 您現在可以建置 Visual Basic Windows Form 會消耗這個元件的應用程式。Form1.vb 應該已經在 [設計] 檢視中開啟。如果沒有,連按兩下 [Form1.vb],在 [方案總管] 視窗中。
  7. 按鈕 控制項和 DataGrid 控制項加入表單,如下所示:
    1. 在 [檢視] 功能表上按一下 [工具箱] 跚工具箱]。或者,您可以按下 CTRL + ALT + X 按鍵組合來開啟工具箱。
    2. 在 [工具箱按一下 Windows Form
    3. 按鈕 控制項加入至表單。
    4. 按下 F4 鍵,以存取 [按鈕] 控制項的屬性頁。將 文字 屬性變更為 顯示產品
    5. DataGrid 控制項加入至表單。
  8. 將專案參考加入至 NWClassLib 元件,如下所示:
    1. 在 [方案總管] 視窗的下 MultiLangHowTo引用項目,] 上按一下滑鼠右鍵,然後按一下 [加入參考
    2. 在 [專案] 索引標籤上, 加倍按一下 NWClassLib。請注意 NWClassLib 出現在 [選取的元件] 清單方塊中。
    3. 按一下 [確定]。請注意 NWClassLib 出現 引用項目] 下的 Windows 應用程式。
  9. 按兩下按鈕。Visual Studio.NET 會自動建立 Click 事件處理常式。將下列程式碼加入 Click 事件處理常式:
    Dim objNW As New NWClassLib.Class1()
            DataGrid1.DataSource = objNW.GetProducts.Tables(0)
    					

完成程式碼清單

Class1.cs 未繼承範例

using System;
using System.Data;
using System.Data.SqlClient;

namespace NWClassLib
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    public class Class1
    {
        public static DataSet GetProducts()
        {
            DataSet ds = new DataSet();
            SqlDataAdapter sqlDS = new SqlDataAdapter(
                "select * from products", new SqlConnection(
                "server=(local);database=northwind;Integrated Security=SSPI"));
            sqlDS.Fill(ds);
            return ds;
        } 
    }
}
				

Class1.cs 繼承範例

using System;
using System.Data;
using System.Data.SqlClient;

namespace NWClassLib
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    public class Class1 : System.Windows.Forms.Form
    {
        public static DataSet GetProducts()
        {
            DataSet ds = new DataSet();
            SqlDataAdapter sqlDS = new SqlDataAdapter(
                "select * from products", new SqlConnection(
                "(local);database=northwind;uid=sa"));
            sqlDS.Fill(ds);
            return ds;
        }
    }
}
				

Form1.vb 繼承 System.Windows.Forms.Form

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'The Windows Form Designer requires this call.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call.

    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

    'The Windows Form Designer requires this code.
    Private components As System.ComponentModel.IContainer

    'The Windows Form Designer requires this procedure.
    'You can use the Windows Form Designer to modify it. 
    'However, do not use the Code editor to modify it.
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button()
        Me.DataGrid1 = New System.Windows.Forms.DataGrid()
        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
        '
        '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.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
End Class
				
附註您必須變更程式碼,在 Visual Basic 2005 中。當您建立 Windows Form 專案時,預設值,Visual Basic 會建立兩個專案檔案。如果表單名為 Form1,代表表單的兩個檔案被命名 Form1.vb 並 Form1.Designer.vb。Form1.vb 檔案中撰寫程式碼。Windows Form 設計工具將 Form1.Designer.vb 檔案中寫入程式碼。Windows Form 設計工具會使用部分關鍵字,Form1 實作分成兩個獨立的檔案。這種行為可以防止設計工具產生的程式碼正在與您的程式碼位置顛倒。

如需有關新的 Visual Basic 2005 語言加強功能的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
http://msdn2.microsoft.com/en-us/library/ms379584(vs.80).aspx
如需有關部分類別和 Windows Form 設計工具的詳細資訊,請造訪下列 MSDN 網站:
http://msdn2.microsoft.com/en-us/library/ms171843.aspx

WebForm1.vb 繼承 NWClassLib.Class1

Public Class Form1
    Inherits NWClassLib.Class1

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'The Windows Form Designer requires this call.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call.

    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

    'The Windows Form Designer requires this code.
    Private components As System.ComponentModel.IContainer

    'The Windows Form Designer requires this procedure.
    'You can use the Windows Form Designer to modify it. 
    'However, do not use the Code editor to modify it.
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button()
        Me.DataGrid1 = New System.Windows.Forms.DataGrid()
        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
        '
        '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.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 = GetProducts.Tables(0)
    End Sub
End Class
				

請確認它可以運作

  1. 按下 F5 鍵以在偵錯模式中執行應用程式。
  2. 顯示表單中,按一下 顯示的產品DataGrid 可顯示所有從北風 products 資料表產品。
  3. 按 SHIFT + F5 的按鍵組合停止偵錯,並回到 [Visual Studio。

若要示範多種程式語言繼承的步驟

為了說明多種程式語言繼承,您必須稍微修改範例。建立類別庫的執行個體的元件,繼承自它的應用程式。

Form1 類別目前繼承自 System.Windows.Forms.Form 類別。因為 Microsoft.NET 並不支援多重繼承,您必須移動 Windows.Forms.Form 類別繼承 NWClassLib.Class1 類別來繼承類別庫元件。

注意: 您不好 n 層架構作法繼承資料層元件中的使用者介面類別。但是,您可以修改,如下所示來輕鬆地示範的多種語言方案管理另一個觀點範例。
  1. 類別程式庫中加入 System.Windows.Forms.Form 命名空間的參考之前修改 Visual C#, 程式碼。
  2. 在 [方案總管] 視窗的下 NWClassLib引用項目,] 上按一下滑鼠右鍵,然後按一下 [加入參考
  3. 在 [.NET] 索引標籤中,按兩下 System.Windows.Forms.dll。請注意 System.Windows.Forms.dll 出現在 [選取的元件] 清單方塊中。
  4. 按一下 [確定]。請注意 System.Windows.Form引用項目 中出現在您類別庫的元件。
  5. 修改 類別 1 宣告以繼承 Form 類別:
    public class Class1 : System.Windows.Forms.Form
    					
  6. Visual Basic.NET 或 Visual Basic 2005 Form1 類別目前已準備好要繼承 類別 1 的。因為 類別 1 會繼承 System.Windows.Forms.Form 類別,MultiLangHowTo.Form1 類別也會繼承 System.Windows.Forms.Form 透過其繼承 類別 1

    在 [編輯器] 視窗中,按一下 [Form1.vb]。在 [類別] 宣告取代 NWClassLib.Class1System.Windows.Forms.Form。更新的程式碼應該出現,如下所示:
    Inherits NWClassLib.Class1
    					
  7. 標記為註解第一行的 Click 事件處理常式,如下所示:
    'Dim objNW As New NWClassLib.Class1()
    						
    注意: 或者,您可以將游標放在列上],然後按一下 [標記為註解一行程式碼] 工具列上的 [選定的行程式碼的註解
  8. 修改第二行如下:
    DataGrid1.DataSource = GetProducts.Tables(0)
    					
  9. 重複 Verify That It Works 一節中步驟。

疑難排解

  • 當您使用的兩種語言時, 很容易造成混淆的語法。Visual C# 語法不允許寬的邊界的錯誤。此外,Visual C#.NET 錯誤訊息並不一定為提示字元] 或 [直覺式,為 Visual Basic.NET 錯誤訊息。若要這些問題的疑難排解,請參照 「 語言對等用法 」 一節的 「 Microsoft.NET Framework 軟體開發套件 (SDK):
    語言對等用法
    http://msdn2.microsoft.com/en-us/library/czz35az4(vs.71).aspx
  • 如果您想要使用實作繼承,研究設計的物件導向原則,並且事先考慮應用程式架構。常見的錯誤是在您需要繼承類別庫] 中的主應用程式中放置程式碼。在這種情況下您不能繼承類別庫中主要的應用程式因為循環相依性。比方說,嘗試 NWClassLib 專案中新增 MultiLangHowTo 專案的參考。 您會收到下列錯誤訊息:
    無法新增 'MultiLangHowTo' 的參考。將這個專案加入做為參考,會造成循環相依性。

?考

如需詳細資訊,請參閱以下列 Microsoft 網站:
基本 Instincts:.NET 第 1 部份中使用繼承
http://msdn.microsoft.com/en-us/magazine/cc135806.aspx

基本 Instincts:.NET 第 2 部份中使用繼承
http://msdn.microsoft.com/en-us/magazine/cc301744.aspx

屬性

文章編號: 315838 - 上次校閱: 2014年2月24日 - 版次: 4.8
這篇文章中的資訊適用於:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 標準版
  • Microsoft Visual C# .NET 2002 Standard Edition
關鍵字:?
kbnosurvey kbarchive kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB315838 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:315838
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com