在 windows 下使用 vs2010 开发,未深入研究。

c# 与 .net 开发,一堆又一堆的新名词,头晕目眩,比如 CLR / apartments / STA / MTA / COM

吐槽无力,只一个问题:微软真的是软件公司,而不是文学公司?

1. 工程代码结构

创建 Windows Forms Application 工程后,自动生成如下代码:

Form1.cs 与 Form1.Designer.cs  是 2 个文件,一起定义了一个 form 的行为/样式等。在 vs2010 中会折叠在一起。

其中,Designer 中定义样式。事件监听、事件处理都在 form.cs 中定义。

双击 form.cs 会打开 UI 效果界面,可以直接拖拽完成界面布局。右键 view code 可以查看 form1.cs 源码。

Program.cs 内定义了 main 函数,是启动文件。

用一个 App run 一个 form。

[STAThread]/[MTAThead] 指定单/多线程运行模式。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms; namespace AppDemo
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}

2. Form.cs 与 Form.Designer.cs

form1.cs 与 designer.cs 2个文件定义的是同一个 namespace 下的 同一个 class

每一个文件定义时,都使用了 partial class

界面布局的代码,一般自动生成,在 Designer 中。

手写的代码主要是事件处理,一般放在 form.cs 中

form.cs 的构造函数中,一般会先调用 Designer.cs 中定义的 InitializeComponent() 完成界面初始化。

在 InitializeComponent 中会声明每个控件的索引   private System.Windows.Forms.Button button1;

在 form.cs 中可以直接用过变量名 button1 操作该控件。

所以,form.cs 的构造函数中,一般先调用 InitializeComponent。

Designer.cs 中,InitializeComponent 初始化界面。Dispose 方法释放资源。释放时需要注意不要造成资源泄露。

// --------------- Form1.cs -----------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace AppDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
} // ------------------- Form1.Designer.cs -------------------------
namespace AppDemo
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null; /// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
} #region Windows Form Designer generated code
}
}

3. 资源文件 与 resx

exe 或者 dll 文件需要依赖其它文件得以正常运行,

最简单的做法是:把依赖文件拷贝到客户端,程序内部用相对路径读取。

这一般是可以的,但若客户删除了这些资源,则会导致不可预期的效果。

通过资源文件,可以把这些文件嵌入到 exe 或者 dll 中。

资源文件可分为 2 类:.resx 和 .resources。前者是 xml 格式,后者是二进制。

只有当前 solution 存在同名的 .cs 文件时,.resx 文件才能正常工作。resources 则无此限制。

通过 System.Resources 下的 ResourceWriter 可以生成资源文件,Generate 产生文件,Close 关闭文件。

创建实例后,即可通过 AddResource 方法添加资源。第一个参数是标示符,可以在代码中通过标示符使用资源。

资源文件中一般存三种类型的数据:byte流(byte[])、对象(object)和字符串(string)。

ResourceWriter rw = new ResourceWriter ( "filename.resources" ) ;
rw.Generate ( ) ; // 产生文件
rw.Close ( ) ; // 添加资源
public void AddResource ( str_identifier , byte [ ] ) ;
public void AddResource ( str_identifier , object );
public void AddResource ( str_identifier , str_value ) ;
resources.ApplyResources( this.myButton, str_identifier ); // 为 this.myButton 使用资源 str_identifier
this.ApplyResource();

4. 多国语言与本地化

4.1 添加多国语言支持

在界面上添加组件后,会生成 .resx 文件,vs2010 中折叠在对应的 form.cs 下。

这是默认语言的资源文件,文件名为 form1.resx

若要开发其他语言版本,在对应 form 右侧的属性菜单中,将 Localizable 设为 True,并将 language 设为所需语言即可。

设置新的显示文本后保存,会生成对应语言的 .resx 文件。文件名格式为 form1.language-Location.resx,例如:简体中文为 form1.zh-CN.resx

  1. 仅当 Language 为 default 时才可以添加或删除界面中的组件。
  2. 仅当设定为新 language,且修改过显示内容后,才会创建对应的资源文件。
  3. 仅当选定 form 时,才能在右侧属性菜单中设置语言。若选中 form 中的 button、text 等组件时,无法设置本地化属性。
  4. 添加多国语言支持后,默认语言的 form1.resx 中不再包含显示文字 Text、控件大小 Size、显示位置 Location 等,而是放在了对应语言的资源文件中,通过 ApplyResources 取用。

4.2 获取与设定运行时语言

两个关键概念:

  • CurrentCulture:默认值是操作系统的用户区域设置,它在“区域选项”控制面板中设置。
  • CurrentUICulture: 默认值是操作系统的用户界面 (UI) 语言,即操作系统用户界面所使用的语言。
System.Globalization.CultureInfo.InstalledUICulture.Name;  // 获取当前运行语言
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo( "zh-CHS" ); // 设置当前运行语言

5. 页面布局与样式设定

SuspendLayout() 调用后控件的布局逻辑被挂起,直到调用 ResumeLayout() 方法为止。

当调整控件的多个属性时,将先调用 SuspendLayout 方法,然后设置控件的 Size、Location、Anchor 或 Dock 属性,

最后调用 ResumeLayout 方法以使更改生效。

c# 与 winform 界面开发的更多相关文章

  1. WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用

    WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用 转自:http://www.cnblogs.com/wuhuacong/arch ...

  2. winform界面开发-HTML内容编辑控件

    参照及推荐博客:伍华聪 http://www.cnblogs.com/wuhuacong/archive/2009/07/07/1518346.html http://www.cnblogs.com/ ...

  3. 今天才明白VC++.net的含义: VS系列的c++编译器可以支持托管C++(类似于C#,具体请看MS在线文档),当然包括winform界面开发。

    因此我决定用winform做界面,用C++写逻辑.当然尽量不用托管代码写逻辑.

  4. WinForm界面开发之 启动界面

    我们在开发桌面应用程序的时候,由于程序启动比较慢,往往为了提高用户的体验,增加一个闪屏,也就是SplashScreen,好处有:1.让用户看到加载的过程,提高程序的交互响应:2.可以简短展示或者介绍程 ...

  5. 调整代码生成工具Database2Sharp的Winform界面生成,使其易于列表工具栏的使用。

    在Winform界面开发的时候,有时候我们客户喜欢把功能放在列表界面的顶部,这样界面和功能整齐放置,也是一种比较美观的方式,基于这种方式的考虑,改造了代码生成工具的Winform界面生成规则,把增删改 ...

  6. 告诉你吧,一套皮肤在winform与wpf开发模式下实现的界面效果同样精彩,winform界面和wpf界面。

    一.同一资源: 二.先上软件界面: (1)wpf界面: 在wpf中实现这样类似web风格的软件界面就不用我多说了,在wpf实现这样的风格是很简单的,完全像网页设计一样的. (2)winform界面 在 ...

  7. 循序渐进开发WinForm项目(4)--Winform界面模块的集成使用

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  8. BOLT.NET 学习笔记(一) 开篇 用.net winform 快速开发 炫酷的界面

    BOLT.NET 学习笔记(一) 开篇 用.net winform 快速开发 炫酷的界面 bolt 基本介绍 Bolt界面引擎是迅雷公司从2009年开始开发的第四代界面库.迅雷7是首个采用该引擎成功开 ...

  9. ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

    在前面随笔介绍的<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>里面,介绍了如何改进和完善审计日志和登录日志的应用服务端和Winform客户端,由于篇幅限制,没有进 ...

随机推荐

  1. HTML 网页游戏 2048

    新手只会一点html和css,javascript基本不会,更别提jQuery了= = 跟着慕课网的教学视频(视频地址:http://www.imooc.com/learn/76)一点点做的,由于自己 ...

  2. .NET版本问题 转[.Net Framework Initialization Error – Unable to find a version of the runtime to run this applicatio]

    转自:http://blog.csdn.net/rrrrssss00/article/details/7069009 dev注册程序问题部署一个VS2010开发的程序时遇到 了一个非常奇怪的问题,客户 ...

  3. Altium Designer 多通道设计

    转chenzelin2009的csdn博客:http://blog.csdn.net/chenzelin2009/article/details/5751251# Altium Designer的多图 ...

  4. Emmet:一个Html/Css快速编辑神器的插件

    一.介绍:Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度 二.使用 ...

  5. FrankFan7你问我答之一

    作者:范军 (Frank Fan) 新浪微博:@frankfan7   微信:frankfan7 最近网友留言很多,你既然看得起我问了,我就说说个人浅见.看看就行了,也别认真. Q:你具体工作是什么? ...

  6. PHP 函数:intval()

    intval   变量转成整数类型. 语法: int intval(mixed var, int [base]); 返回值: 整数 函数种类: PHP 系统功能 内容说明:本函数可将变量转成整数类型. ...

  7. SpringMVC经典系列-13使用SpringMVC处理Ajax请求---【LinusZhu】

    注意:此文章是个人原创,希望有转载须要的朋友们标明文章出处,假设各位朋友们认为写的还好,就给个赞哈,你的鼓舞是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linusz ...

  8. Linux内核里的DebugFS

    DebugFS,顾名思义,是一种用于内核调试的虚拟文件系统,内核开发者通过debugfs和用户空间交换数据.类似的虚拟文件系统还有procfs和sysfs等,这几种虚拟文件系统都并不实际存储在硬盘上, ...

  9. careercup-排序和查找 11.4

    11.4 设想你有一个20GB的文件,每一行一个字符串.请说明将如何对这个文件进行排序. 解法: 当面试官给出20GB大小的限制时,实际上在暗示些什么.就此题而言,这表明他们不希望你将数据全部载入内存 ...

  10. python调用smtplib模块发送邮件

    #!/usr/bin/env python #coding: utf-8 import smtplib from email.mime.text import MIMEText from email. ...