C#笔记(01)

C#笔记

OpenFileDialog类

用例:

OpenFileDialog dlg = new OpenFileDialog();

            dlg.Title = "Open Photo";

            dlg.Filter = "jpg files (*.jpg)|*.jpg|All files(*.*)|*.*";

 

            if (dlg.ShowDialog() ==DialogResult.OK) {

                try{

                    dlg.CheckFileExists = true;

                    pictureBox1.Image = new Bitmap(dlg.OpenFile());//载入用户指定的图片

 

                    pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

                    //pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;

 

                    dlg.Dispose();//关闭dlg

 

                    processText.Text = "成功打开" + dlg.FileName;

                    processText.Text += "pic width = " + pictureBox1.Image.Width;

                    processText.Text += "; height = " + pictureBox1.Image.Height;

                    processText.Show();

 

                }catch (Exception exs) {

                    processText.Text = "无法打开指定文件" + dlg.FileName + ",请勿指定非图片文件!";

                    processText.Show();

                }

            }

 

Anchor 属性

可以使用anchor 属性将控件相对于窗体的边缘固定到窗体上。.net 框架中的所有控件都支持Anchor属性,以实现这个效果。这个属性是AnchorStyles枚举来设置的。Anchor属性维护控件到它的容器的锚定边缘的距离。

我们可以把锚看成是一艘小艇用一根绳子固定到湖边的一个浮动码头上。湖会随着水面的涨落而改变大小,但小艇和浮动码头的距离也就是绳子的长度总是固定的。

Dock属性

Anchor属性一样,Dock属性也使用枚举值,也就是DockStyle枚举。注意,AnchorStyles枚举是复数形式,因为一个控件可以具有多个锚定设置,但DockStyle枚举是单数形式,因为一个控件只有一个停靠处。

Dock属性除了具有Anchor属性具有的left、right、bottom、top、none属性外,还具有一个特殊的属性fill。它表示控件被停靠到容器的所有边缘。

.NET中的菜单

.NET所提供的菜单类在.NET 2.0中进行了完全的重写。在.NET 1.x中,菜单类是基于Win32的菜单类,是由Menu类层次结构所支持的。MainMenu、ContextMenu和MenuItem类都是从Menu类派生的,支持Windows Form应用程序内部的Win32菜单和上下文菜单。犹豫兼容性的原因,.NET 2.0仍然支持并可以使用这些类,但它们已经不再是大多数应用程序优先使用的菜单机制。

新的、经过改进的菜单类基于ToolStrip和ToolStripItem类,这两个类是所有工具栏对象以及它们内部的项的积累。MenuStrip类是从ToolStrip类派生的,专门表示菜单。ToolStripMenuItem类是从ToolStripItem类派生的,表示菜单中的一个菜单项。

上下文菜单

用户在控件上单击鼠标右键可以立即看到一个命令列表,这是一种功能强大的机制。经验丰富的用户尤其喜欢这个功能。

如何添加上下文菜单:

Step1:

form中添加一个ContextMenuStrip对象。在“工具箱”的“菜单和工具栏”中。

Step2:

把这个新的上下文菜单与PictureBox控件(或其他你想要关联的对象)相关联。具体的方法是:

a)         显示该控件的属性窗口

b)        点击ContextMenuStrip项的右边

c)         从列表中选择想要关联的上下文菜单的名称

状态条

StatusStrip控件是直接从基类ToolStrip继承的。

从技术上说,状态条可以出现在任何父容器中,并可以停靠在容器的任何一边。但是,按照传统,状态条总是放在窗体对象的底部。

注意,生成状态条的界面与生成菜单的界面具有很大的不同。左边那个小小的、大部分为白色的图标用于添加ToolStrip StatusLabel对象,而图标右边的下拉箭头显示一个上下文菜单,用于把各种ToolStripItem对象添加到状态条中。

可以使用isLink方法,来把状态label变成连接,并且可以通过设置click事件处理方法来处理该事件。

this.processStatus.IsLink = true;

效果截图:

当某个状态label太长而可能显示不完时,可以设置其ToolTipText属性,并且要记得把这个label所在的状态条的ShowItemToolTips属性设置为true。

创建类库

在程序中直接定义要用的类是可行的。这种做法能够很好的实现目的,但很难让其他应用程序使用这些类。因此,我们把这些类放在类库时,使它们可以被其他程序所复用。在windows的世界里,这种类库称为动态链接库(DLL)。

步骤:

1.新建项目

2.visual c# -》类库

3.输入名称。完成。

如何设置项目的版本号

1.       展开想的“属性”项

2.           双击Assembly.cs文件

3.           设置程序集和文件的版本属性,以及其他需要设置的属性

C#中属性的创建方式

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Manning.MyPhotoAlbum

{

    //<summary>该类用来表示一幅图像</summary>

    public class Photograph

    {

        private string _fileName;

        private Bitmap _bitmap;

 

        public Photograph(string fileName) {

            _fileName = fileName;

            _bitmap = null;

        }

 

        public string FileName {

            get { return _fileName; }

        }

 

        public Bitmap Image {

            get {

                if (_bitmap == null) {

                    _bitmap = new Bitmap(_fileName);

                }

                return _bitmap;

            }

        }

            

    }

}

c#中,属性的创建方式与方法很相似。我们定义这个属性的访问级别、类型和名称。按照microsoft的约定,属性的名称以大写字母开头,并使用名词或名词短语。名词后面不带括号,告诉编译器这是个属性,而不是方法

在花括号内部,定义了这个属性的访问符。访问符通过get关键字提供了读取访问,或者通过set关键字提供了写入访问。Get访问符必须返回这个属性的定义类型,而set访问符则使用保留字value来访问赋值号右边所赋的值。例如,如果我们想让Photograph类的用户设置FileName属性,可以使用下面的代码:

public string FileName {

            get { return _fileName; }

            set { _fileName = value; }

        }

为了在c++中实现表示文件名成员的set和get功能,程序员一般提供像SetFileName和GetFileName这样的方法。在c#中,属性对这个概念进行了格式化,使所有的程序使用一种标准的机制来进行这种风格的访问。

属性的使用:

public bool HasChanged {

            get { return _hasChanged; }

            internal set { _hasChanged = value; }

        }

        public string Caption {

            get { return _caption; }

            set {

                if (_caption != value) {

                    _caption = value;

                    HasChanged = true;

                }

            }

        }

 

关于类库中的注释

在产品代码中为所有的public类成员(包括属性)提供三斜杠(///)文档式注释是个非常好的做法。Visual studio可以提取这些注释,供使用这个类库的其他程序员使用。因此,通过这种接口进行信息交流时一种非常好的方法。

如何引用其他类库

示例:引用System.Drawing.dll类库

步骤:

1.         在“解决方案资源管理器”窗口中,在MyPhotoAlbum项目的上下文菜单中,右击“引用”,并选择“添加引用”

2.   .NET选项卡中选择SystemDrawing.Dll项,并“确定”。

3.         Photograph.cs文件的顶部,添加System.Drawing命名空间的using 命令。

Internal关键字

public bool HasChanged {

            get { return _hasChanged; }

            internal set { _hasChanged = value; }

        }

Internal关键字表示_hasChanged属性智能由MyPhotoAlbum程序集的成员才可以set。

String.Equals方法

默认的String.Equals方法执行大小写敏感的字符串比较。我们可以使用另一种形式的StringEquals方法,它接受一个StringComparison枚举值,表示应该怎样比较字符串。StringComparison.InvariantCultureIgnoreCase将执行文化不变性的比较,并且忽略大小写。

示例:

public overridebool Equals(object obj)

        {

            if (obj is Photograph) {

                Photograph p = (Photograph)obj;

                return (FileName.Equals(p.FileName,StringComparison.InvariantCultureIgnoreCase));

            }

            return false;

        }

文化不变性的概念:文化表示一种特定的语言或区域,例如美国英语或加拿大法语等。“当前文化”指当前系统的文化。文化不变性与英语相关联,但与国家或地区无关。我们在这里通过文化不变性获得和文化独立的比较结果。

接口与集合

类定义了一组操作,接口定义了类可以支持的一种操作。

接口定义了支持这个接口的类必须实现的属性、方法和事件。接口封装了一些共同概念,可以由不相关的类所使用。而抽象类虽然也封装了一些共同的概念,但它们一般由相关联的类所使用。

一些.NET集合类

描述

Array

固定长度的数组。这个抽象类是.NET中所有简单数组的基类。

ArrayList

一种动态长度的数组。

CollectionBase

一个用于创建强类型集合的抽象类。

DataView

一种自定义的数据库表的视图。

Hashtable

一种存储基于散列码(称为键)的值的集合。

Queue

FIFO队列。一种先进先出的对象集合。

SortedList

一种键和值的有序集合,可以通过键和索引来访问。

StringCollection

字符串对象集合。

Stack

LIFO队列,一种后进先出的对象集合。

CollectionBase类

CollectionBase类是个抽象类,用于创建强类型的集合。如果一个类在它的方法中只允许一种或一些特定的类型,而不允许使用像object这样的通用类型,它就是强类型。强类型的类允许编译器保证传递给类的方法是适当的对象,以防止因为类型而导致的运行时错误。

CollectionBase类派生是创建强类型集合的推荐方式。在.NET2.0之前,这是创建这种集合的最佳方法。在.NET2.0中,C#支持一种称为泛型的概念,可以提供更好的选择。

IDisposable接口

IDisposable接口表示一个对象可以被销毁。支持这个接口的对象实例在这个对象的最后一个引用被丢弃之前应该调用Dispose方法来释放系统资源。这个接口位于System命名空间。

公共方法

Dispose

释放这个对象所使用的任何系统资源

对话框

创建OK消息框

string msg = String.Format("unable to open album file{0}\n({1})",fileName,exs.Message);

                MessageBox.Show(msg,"unable to open");

 

创建YESNO消息框

private void yesNoButt_Click(object sender, EventArgs e)

        {

            string msg = "";

            msg = String.Format("you want to click {0} or {1}","yes", "no");

 

            DialogResult result =MessageBox.Show(this, msg,"yes or no?", MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question);

            if (result == DialogResult.Yes) {

                Console.WriteLine("client press Yes!!");

            }

        }

 

如何把一个普通Form设置成Dialog Form

1.       form上放上所需的ok、reset、cancel等按钮,并将各自的DialogResult设置为对应的值

 

2.       在分别设置form的属性如下:

属性

AcceptButton

Form上Okbutton的名字

CancelButton

Form上CancelButton的名字

FormBorderStyle

FixedDialog

MaximizeBox

False

MinimizeBox

False

ShowInTaskBar

False

设置文本的掩码

文本掩码涉及到MaskedTextBox类。这个类基于Visual Basic 6 的类似控件,它保证控件所接收的是一种特定类型的输入。

MaskedTextBox控件的核心是Mask属性。这个属性定义了用户可以接收的输入长度和内容。掩码可以使控件禁止所有不符合预定义格式的输入。

MSDN中输入“MaskedTextBox.Mask”可以查看mask属性的相关内容。

掩码元素

说明

0

数字,必选。此元素将接受 0 9 之间的任何一个数字。

9

数字或空间,可选。

#

数字或空间,可选。如果掩码中该位置为空白,在Text 属性中将把它呈现为一个空格。允许使用加号 (+)和减号 (-)

L

字母,必选。将输入限定为 ASCII字母 a-z A-Z。此掩码元素等效于正则表达式中的 [a-zA-Z]

?

字母,可选。输入限定为 ASCII字母 a-z A-Z。此掩码元素等效于正则表达式中的 [a-zA-Z]?

&

字符,必选。如果AsciiOnly 属性设置为 true,此元素的行为将与“L”元素类似。

C

字符,可选。任何非控制字符。如果AsciiOnly 属性设置为true,此元素的行为将类似于“?”元素。

A

字母数字,可选。如果将AsciiOnly 属性设置为true,则它接受的唯一字符是 ASCII字母 a-z A-Z

a

字母数字,可选。如果将AsciiOnly 属性设置为true,则它接受的唯一字符是 ASCII字母 a-z A-Z

.

小数点占位符。使用的实际显示字符将是适合于格式提供程序的小数点符号,格式提供程序由控件的FormatProvider 属性决定。

,

千分位占位符。使用的实际显示字符将是相应于格式提供程序的千分位占位符,格式提供程序由控件的FormatProvider 属性决定。

:

时间分隔符。使用的实际显示字符将是适合于格式提供程序的时间符号,格式提供程序由控件的FormatProvider 属性决定。

/

日期分隔符。使用的实际显示字符将是适合于格式提供程序的日期符号,格式提供程序由控件的FormatProvider 属性决定。

$

货币符号。显示的实际字符将是相应于格式提供程序的货币符号,格式提供程序由控件的FormatProvider 属性决定。

转换为小写。将后续所有字符都转换为小写。

>

转换为大写。将后续所有字符都转换为大写。

|

禁用前一个大写转换或小写转换。

\

转义。对掩码字符进行转义,将其转变为原义字符。“\\”是反斜杠的转义序列。

其他所有字符

原义字符。所有非掩码元素都将原样出现在MaskedTextBox 中。原义字符在运行时始终占据掩码中的一个固定位置,用户不能移动或删除该字符。

如果您在 MaskedTextBox 已包含前一个掩码筛选过的用户输入时更改掩码,MaskedTextBox会尝试将该输入迁移至新的掩码定义。如果失败,将清除现有的输入。为掩码赋予一个零长度的字符串会保留控件中现有的任何数据。当与零长度掩码一起使用时,MaskedTextBox的行为与单行 TextBox控件的类似。

小数点 (.)、千分位 (,)、时间 (:)、日期 (/) 和货币 ($) 符号默认为按照应用程序的区域性的定义显示这些符号。可以通过使用FormatProvider 属性强制这些符号显示为其他区域性的符号。

运行时掩码中的字符插入由InsertKeyMode 属性控制。用户可以通过使用左箭头和右箭头或鼠标指针在掩码中移动,或者可以通过输入空格跳过掩码中的可选位置。

重要说明:

MaskedTextBox 支持除代理项和纵向组合字符以外的所有 Unicode 字符。

下表显示了示例掩码。

掩码

行为

00/00/0000

采用国际日期格式的日期(日、数字月份、年份)。“/”字符是逻辑日期分隔符,将以相应于应用程序当前区域性的日期分隔符形式显示给用户。

00->L<LL-0000

美国格式的日期(天、月缩写和年),其中月份用缩写的三个字母表示,第一个字母大写并且其余两个字母小写。

(999)-000-0000

美国电话号码(区号可选)。如果用户不想输入可选字符,他们可以输入空格或将鼠标指针直接放在掩码中第一个 0表示的位置。

$999,999.00

货币值的范围从 0 999999。货币、千位和十进制字符在运行时会被替换为区域特定的等效内容。

 

向窗体添加ToolTip的方法

1.    从“工具箱”-“公共控件”中,拖动ToolTip到窗体上。

2.    给新拖入得toolTip设置好名字

3.    在代码中使用myToolTip.setToolTip函数给tooltip设置内容。

PS:一个toolTip可以给一个窗体公用,只要设置setToolTip时,注意绑定的Control即可。

示例代码:

private void username_TextChanged(object sender, EventArgs e)

        {

            selfShow.Text = username.Text;

            tip1.SetToolTip(selfShow, username.Text);// selfShow为一个textBox的名字

            tip1.SetToolTip(this,"in this form");//this是这个form的指针

        }

ListBox类

设置listBox为可多选

fileList.SelectionMode = SelectionMode.MultiExtended;

 

listBox添加项目

for(int i = 0; i < 15; i++){

                fileList.Items.Add(String.Format("file{0}",i));

            }

 

读取listBox被选中的项目

System.Windows.Forms.ListBox.SelectedObjectCollection selectItems = fileList.SelectedItems;

            foreach (object itemin selectItems) {

                string path = item.ToString();

                path = path.Substring(path.IndexOf('.')+1);//获得路径

                PicForm p = openFile(path);//显示路径对应的图片

                p.Show();

            }

comboBox类

1.       无法设置多选,但可以设置文本框是否可编辑。

this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;

 

2.       添加项目

for (int i = 0; i < 15; i++)

            {

                comboBox1.Items.Add(String.Format("file{0}", i));

            }

设置默认项

this.comboBox1.SelectedIndex = 0;

 

3.       获取选中的项目

label1.Text = comboBox1.SelectedItem.ToString();

 

4.       自动完成(即,自动匹配文本)

要设置ComboBox的AutoCompleteMode属性置以及AutoCompleteSource属性

AutoCompleteMode允许有四种值:

 

None:默认值,指示ComboBox不使用自动功能。

Suggest:在ComboBox中输入字符后,ComboBox会自动展开,显示匹配的子项,输入行不受影响,需要自己输入后续字符,或者在下拉框中点选完整子项。

Append:输入字符后,字符后会自动补充匹配内容(以反色显示),但是ComboBox不会展开。按上下键可以在多个匹配内容中切换。

SuggestAppend:上述两种模式的组合。

 

AutoCompleteSource属性,共有9种,指示自动完成将要在其中进行查找的数据源。常用的几种如下:

 

ListItems:数据源为ComboBox的Item集合。

FileSystem:文件系统。例如输入c:\后会展开c:\下的目录列表(或append模式下的自动添加)。同样的,此数据源也支持文件名的补全。

CustomSource:自定义数据源。选用此方式时必须在代码中指定ComboBox的AutoCompleteCustomSource属性为你构建的AutoCompleteStringCollection对象,否则不会生效。AutoCompleteStringCollection类似于List<string>,将你的数据add进去即可。

 

this.editable.AutoCompleteMode = AutoCompleteMode.SuggestAppend;

this.editable.AutoCompleteSource = AutoCompleteSource.ListItems;

 

如何选择文件夹

FolderBrowserDialog fbd = new FolderBrowserDialog();

 

            if (fbd.ShowDialog() ==DialogResult.OK) {

                folderPath = fbd.SelectedPath;

                string str = string.Format("当前路径:{0}", folderPath);

                statusStrip1.ShowItemToolTips = true;

                currentPath.Text = str;

                currentPath.ToolTipText = str;

               

                //将文件列表添加到listBox控件中

                string[] files = Directory.GetFiles(folderPath);

                int pos = 0;

                fileList.Items.Clear();//先清空之前的list列表

                //添加新的列表

                foreach(string filein files){

                    fileList.Items.Add(string.Format("{0}. {1}",++pos, file));

                }

            }

如何获得文件夹下的文件名称

///<summary>

        ///根据文件夹的路径名,获得该文件夹下的所有文件的名称

        /// Elar @ 2010.12.31

        ///</summary>

        ///<param name="sender"></param>

        ///<param name="e"></param>

 

        private string[] getFiles(string path) {

            return Directory.GetFiles(path);

        }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值