WinForm基础教程.ppt
Win Form 智能客户端,System.Windows.Forms,System.Windows.Forms,Win Form 及控件 Application 数据绑定 打印 应用程序设置 ClickOnce 部署,Win Form 及控件,FlowLayoutPanel、TableLayoutPanel MenuStrip、ContextMenuStrip ToolStripContainer、ToolStrip、StatusStrip DataGridView WebBrowser Control Form UserControl MessageBox Application对象,Win Form 及控件,FlowLayoutPanel、TableLayoutPanel 练习,Win Form 及控件,MenuStrip、ContextMenuStrip 练习,Win Form 及控件,ToolStripContainer、ToolStrip、StatusStrip 练习,Win Form 及控件,WebBrowser 练习,Win Form 及控件,练习 让TextBox只能接收数字或小数点,不能接收字母。 SampleWinFormControlsInputTextBox,Windows 窗体数据源,基于 Windows 窗体列表的绑定通常要求对象支持 IList ( Array、ArrayList 或 CollectionBase 、DataView)或 IListSource (DataSet 、DataTable)接口。 如果要通过 BindingSource 组件进行绑定,则可以绑定到支持 IEnumerable 接口的对象。,DataAdapter,TableAdapter 提供应用程序和数据库之间的通信。 TableAdapter 是使用“数据集设计器”在强类型数据集中创建的。,BindingSource 控件,BindingSource 组件有两种用途。首先,它通过提供一个间接寻址层、当前项管理、更改通知和其他服务简化了窗体中控件到数据的绑定。这是通过将 BindingSource 组件附加到数据源然后将窗体中的控件绑定到 BindingSource 组件来实现的。与数据的所有进一步交互,包括定位、排序、筛选和更新,都通过调用 BindingSource 组件实现。,BindingSource 控件,BindingSource 控件 可以将 BindingSource 组件绑定到两种数据源:一是简单数据源,如对象的单个属性或 ArrayList 这样的基本集合;二是复杂数据源,如数据库表。BindingSource 组件作为一个媒介提供绑定和货币管理服务。,数据绑定,BindingSource 控件,数据绑定,BindingSource 控件 过滤的例子 SampleWinFormSortedFiltered,数据绑定,BindingSource 控件 导行的例子 SampleWinFormNavigator,数据绑定,BindingSource 控件 绑定存储过程的示例 SampleWinFormStoredProcedure,数据绑定,BindingSource 控件 绑定对象的示例 SampleWinFormObjectBindingWalkthrough,数据绑定,主/子绑定 示例 SampleWinFormMasterDetail,数据绑定,可以将任何控件的任何属性绑定到数据源。 Binding类:用于创建和维护某控件的属性与某对象的属性或对象列表中当前对象的属性之间的简单绑定。 text1.DataBindings.Add(new Binding(“Text“, ds, “customers.CustomerID“); text2.DataBindings.Add(new Binding(“Text“, this.bindingSource1, “CompanyName“, true),练习,不用数据源拖拽做绑定的实际例子 SampleWinFormHandworkBainding,Click Once,示例,全球化应用程序,全球化全球化是此过程的第一步。一个全球化应用程序支持适用于所有用户的本地化用户界面和区域数据。真正全球化的应用程序应是非特定区域性和非特定语言的。 全球化是设计和开发支持针对多个区域性用户的本地化用户界面和区域数据的应用程序的过程。,全球化应用程序,本地化分析是验证一个全球化应用程序是否可以开始进行本地化的中间过程。如果应用程序的可执行代码已经同应用程序的可本地化资源明显分开,则此应用程序就可以开始进行本地化。公共语言运行库的附属程序集资源模型完全支持这种代码同资源的分离。可执行代码位于应用程序的主程序集中,只有资源位于应用程序的资源文件中。,全球化应用程序,本地化是针对应用程序支持的每一个区域性将应用程序的资源翻译为本地化版本的过程。 可以开始进行本地化的应用程序分为两个概念块:一个是包含所有用户界面元素的块,另一个是包含可执行代码的块。用户界面块仅包含非特定区域性的可本地化用户界面元素,如字符串、错误信息、对话框、菜单、嵌入的对象资源等。代码块仅包含由所有支持的区域性使用的应用程序代码。,CultureInfo类,CultureInfo 类保存区域性特定的信息,如关联的语言、子语言、国家/地区、日历和区域性约定。 String 类间接地使用此类来获取有关默认区域性的信息。 这些区域性通常分为三个集合:固定区域性、非特定区域性和特定区域性。 固定区域性不区分区域性。可以使用空字符串 (“”) 按名称或者按区域性标识符 0x007F 来指定固定区域性。 非特定区域性是与某种语言关联但不与国家/地区关联的区域性。特定区域性是与某种语言和某个国家/地区关联的区域性。例如,“fr”是非特定区域性,而“fr-FR”是特定区域性。注意,“zh-CHS”(简体中文)和“zh-CHT”(繁体中文)均为非特定区域性。 区域性有层次结构,即特定区域性的父级是非特定区域性,而非特定区域性的父级是 InvariantCulture。Parent 属性将返回与特定区域性关联的非特定区域性。 如果特定区域性的资源在系统中不可用,则使用非特定区域性的资源;如果非特定区域性的资源也不可用,那么使用主程序集中嵌入的资源。,CultureInfo类,CultureInfo.CurrentCulture 属性: CultureInfo.CurrentCulture 属性是每个线程的设置,可确定日期、时间、货币和数字的默认格式、文本排序顺序、字符串比较以及大小写转换。CurrentCulture 属性不是一个语言设置。它仅包含与地理区域的标准设置相关的数据。因此,只能将 CurrentCulture 属性设置为特定区域性或 InvariantCulture。您可以使用 Thread.CurrentThread 属性设置 CurrentCulture。 Thread.CurrentThread.CurrentCulture = new CultureInfo(“de-DE“);,CultureInfo类,CultureInfo.CurrentUICulture 属性 : CultureInfo.CurrentUICulture 属性是每个线程的设置,可返回当前用户界面区域性。该属性由 ResourceManager 类用于在运行时查找区域性特定资源。 Thread.CurrentThread.CurrentUICulture = new CultureInfo(“de“);,CultureInfo类,CultureInfo.InvariantCulture 属性 : CultureInfo.InvariantCulture 属性既不是非特定区域性,也不是特定区域性。它是第三种类型的区域性,该区域性是不区分区域性的。它与英语语言关联,但不与任何国家或地区关联。 InvariantCulture 对于存储不直接显示给最终用户的数据非常有用。以与区域性无关的格式存储数据可以保证已知格式不会发生更改。 DateTime dtIn = DateTime.Now; CultureInfo InvC = new CultureInfo(“); string strDateTime = dtIn.ToString(“d“,InvC);,应用程序中的资源,资源是在逻辑上由应用程序部署的任何非可执行数据。资源可以在应用程序中作为错误信息显示,或者作为用户界面的一部分显示。资源可以包含多种形式的数据,包括字符串、图像和持久的对象。通过在资源文件中存储您的数据,您无需重新编译整个应用程序即可更改数据。,应用程序中的资源-附属程序集,附属程序集只包含资源文件。附属程序集不包含任何应用程序代码。在附属程序集部署模型中,您所创建的应用程序具有一个默认程序集(作为主程序集)和几个附属程序集。您应该为该应用程序支持的每个区域性均创建一个附属程序集。因为附属程序集不是主程序集的一部分,所以您不必替换该应用程序的主程序集,即可很容易地替换或更新与特定区域性相关的资源。,创建资源文件,资源文件的三种格式:.txt、.resx 、.resources txt resources : resgen strings.txt MyApp.resources resourcesresx: resgen items.resources items.resx,附属程序集,附属程序集包含单个区域性的资源,但不包含任何代码。 t:lib /embed:strings.de.resources /culture:de /out:MyApp.resources.dll 当 ResourceManager 检索请求的资源时,它将查找其版本号与主程序集的版本号相匹配的附属程序集。,ResourceManager,ResourceManager用于检索附属程序集中的资源 ResourceManager 基于当前线程的 CultureInfo.CurrentUICulture 属性确定检索哪些资源。例如,如果用默认的英语语言资源和分别包含法语和德语语言资源的两个附属程序集编译一个应用程序,并且 CurrentUICulture 属性被设置为“de”,则 ResourceManager 检索德语资源。,ResourceManager,ResourceManager rm = new ResourceManager(“MyStrings“, this.GetType().Assembly); btnClear.Text = “,全球化应用程序,实例: WorldCalc ColorPicker,组件、控件,组件是指实现System.ComponentModel.IComponent 接口的一个类,或从实现该接口的类中直接或间接派生的类。 控件是System.Windows.Forms.Control 或 System.Web.UI.Control。.NET Framework 类库中的所有控件都是直接或间接从这两个类派生的。,组件设计时特性,BrowsableAttribute:标记属性在PropertyGrid中是否可见。 Browsable(true) public int MyProperty get return 0; ,组件设计时特性,CategoryAttribute:在PropertyGrid中的分类 Category(“Alignment”) public ContentAlignment TextAlignment get set ,组件设计时特性,DescriptionAttribute:在PropertyGrid中的属性说明 Description(“背景颜色“) public Color BorderColor get set ,组件设计时特性,DefaultValueAttribute:默认值 private bool myVal=false; DefaultValue(false) public bool MyProperty get return myVal; set myVal=value; ,组件,XPButton控件,应用程序设置,应用程序设置的工作方式是:根据设置是应用程序范围设置还是用户范围设置,将数据作为 XML 保持在不同的配置文件 (.config) 中。应用程序范围设置的顶级 XML 元素为 ,而 用作用户范围设置。 应用程序范围设置app.exe.config在应用程序相同的文件夹下。 户范围设置user. config在System.Windows.Forms.Application.LocalUserAppDataPath 指定的文件下(隐藏)。,应用程序设置,设计动态,可配置应用程序: 1. 只读,应用程序范围内设置:app.exe.config 2. 读/写用户指定设置:user.config 3. 动态创建对象:CreateInstance() 4. 可插拔对象:ICommonInterface,应用程序范围配置文件,应用程序范围配置文件存储在appname.exe.config 以XML文件的形式存储在与.EXE相同的目录。 这些配置在程序的运行过程中为只读,不可修改。,用户指定配置文件,用户指定配置文件存储在user.config 以XML文件的形式存储在用户的本地目录。 配置在程序执行过程中可读/写C: C:Documents andSettings Documents and Settingsusername usernameLocal Settings Local SettingsApplication Data Application Dataappname appname,应用程序设置,建议: 用.NET提供的应用程序设置,不要用自己的应用程序设置。,ClickOnce,