如何管理多语言的 Windows 窗体解决方案在 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 框架使用的服务器
  • Microsoft 数据引擎 (MSDE) 或 Microsoft SQL Server 7.0 或更高版本,使用罗斯文数据库
本文假定您熟悉下列主题:
  • 实现继承
  • Windows 窗体
  • Microsoft ADO.NET

创建多语言的 Windows 应用程序

这些步骤演示了如何创建一个小的、 多语言的 Windows 应用程序。当单击按钮时,您可以在 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 或 Windows 窗体 Visual Basic 2005 应用程序名为 MultiLangHowTo 解决方案内的外壳程序。若要使一个多语言解决方案,您必须添加一个 Visual C# 类库。

    在解决方案资源管理器窗口中用鼠标右键单击 MultiLangHowTo,指向 添加,然后再单击 新建项目。在 项目类型 框中,单击 Visual C# 项目。在 模板 框中,单击 类库。重命名类库 NWClassLib。 单击 确定 以将此类库添加到解决方案中。

    注意在 Visual 有关 Studio 的 2005 年单击 Visual C#项目类型 下。
  4. Class1.cs 出现在编辑器窗口中。将下面的命名空间声明添加到此窗口的顶部。这些声明允许您访问各种类,以便您可以创建并填充 数据集 对象
    using System.Data;
    using System.Data.SqlClient;
    					
  5. 替换为以下代码创建并使用所有罗斯文产品表中的数据填充 数据集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;
    } 
    						
    : 您开发的系统可能需要不同的 SQL 连接字符串。如果出现问题,请咨询您的系统管理员联系。
  6. 您现在可以构建 Visual Basic Windows 窗体将消耗此组件的应用程序。Form1.vb 应该已经是在设计视图中打开。如果不是,双击 Form1.vb 解决方案资源管理器窗口中。
  7. 将添加一个 按钮 控件和一个 DataGrid 控件在窗体,如下所示:
    1. 视图 菜单上单击 工具箱 以打开工具箱。您可以在交替,按 CTRL + ALT + X 组合键来打开工具箱。
    2. 在工具箱单击 Windows 窗体
    3. 将一个 按钮 控件添加到窗体。
    4. 按 F4 键来访问 Button 控件属性页。更改为 显示产品Text 属性。
    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 中。默认状态下,Visual Basic 创建项目的两个文件,当您创建一个 Windows 窗体项目时。如果窗体名为 Form1,Form1.vb 和 Form1.Designer.vb,被命名为表示窗体的两个文件。在 Form1.vb 文件中编写代码。Windows 窗体设计器在 Form1.Designer.vb 文件中写入代码。Windows 窗体设计器使用 partial 关键字将 Form1 的实现划分为两个单独的文件。此行为可防止该设计器生成的代码正在与您的代码交错。

有关新的 Visual Basic 2005 语言增强功能的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
http://msdn2.microsoft.com/en-us/library/ms379584(vs.80).aspx
有关分部类和 Windows 窗体设计器的详细信息请访问下面的 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. 当窗体出现时,单击 显示产品数据网格 将显示所有罗斯文产品表中的产品。
  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. 修改继承 Form 类的 Class1 声明:
    public class Class1 : System.Windows.Forms.Form
    					
  6. 在 Visual Basic.net 或 Visual Basic 2005 Form1 类现在已准备就绪,可继承 Class1。因为 Class1 继承 System.Windows.Forms.Form 类,MultiLangHowTo.Form1 类还将通过其继承的 Class1 继承 System.Windows.Forms.Form

    在编辑器窗口中单击 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 框架软件开发工具包 (SDK):
    等效语言
    http://msdn2.microsoft.com/en-us/library/czz35az4(vs.71).aspx
  • 如果您希望使用实现继承,学习面向对象设计原则的并预先考虑应用程序体系结构。一个常见错误是将代码放在主应用程序中需要在某个类库中继承的。在这种情况下您不能由于循环依赖项的继承是一个类库中的主应用程序。例如对于尝试 NWClassLib 项目中添加对 MultiLangHowTo 项目的引用。 您会收到以下错误消息:
    无法添加对 MultiLangHowTo 的引用。将此项目添加为引用将导致循环依赖项。

参考

有关详细的信息,请参阅以下 Microsoft 网站来:
基本技术: 使用.net,第 1 部分中的继承
http://msdn.microsoft.com/en-us/magazine/cc135806.aspx

基本技术: 使用.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 标准版
  • Microsoft Visual .NET 2002 标准版
  • Microsoft Visual C# .NET 2003 标准版
  • Microsoft Visual C# .NET 2002 标准版
关键字:?
kbnosurvey kbarchive kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB315838 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 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