杨洋疯狂C# 刊号:201207 第1期

前言:

    将网页上的标签有机组合,通过JavaScript操作DOM改变标签实现效果,通过数据库存储或其他手段存储数据,实现动态网页,实现的技术就产生了很多编程语言去实现人们想要的效果,人们很聪明也很懒,就写了很多框架方便开发,而这些框架就需要学习了,为了实现真正的跨平台,于是产生了HTML5,为了满足人们眼球的私欲,就产生了JS,Flash,SilverLight等为了偷懒开发,就产生了JQuery,Dojo,ExtJS等JS框架,时代在进步,手机等小型的方便的智能设备更加得到人们的青睐,于是产生了IOS,Andriod,WP7等,于是产生了很多手机应用和开发人员的那些东西,为了提高网页效率,人们在浏览器上下功夫,产生了CSS3和HTML5 来替代以前JS,Flash等,就目前而言,能实现客户想要的效果的都是好技术,目前估计CSS3和HTML5不会影响太大,未来就不一定了。网页开发( BS )比那些桌面开发(CS)的东西要掌握的东西要多的多,考虑的问题也很多,界面要好看,用户体验要好,就产生UI工程师和很多新技术(例如AJAX),做动态网站的后台语言不同,就产生了,PHP,ASP.NET,JSP等行业,不同的专业知识就有很多知识你要掌握了,这辈子估计你都学不完.游戏行业又有很多知识,关于其他的,我就不想说了,总之一句话:确定你的目标,知道你需要那些知识,然后计划,最后实现它,几年应该要的。本系列文章只作为参考和学习用,帮你引导,本人能力有限,错误之处还请多多包涵。目前没有索引页,等全部或者适当的需要的情况下会建立索引页。

    第一期主要讲一些很基础的东西,也是后面几期学习的基础。巩固自己的知识,分享自己的技术,活的会觉得很有价值~

    本期宣传语:没有你的允许,没有人能叫你放弃!我会选择坚持!

 

============================================= 目录 ======================================

1.html篇

2.C#控制台篇

3.Asp.NET篇

4.sqlserver篇

5.JavaScript篇

6.JQuery篇

7.C# Winform篇

 

8.C# 框架篇

          --------------------------------------------------------SubSonic篇----------------------------------------------------------------------------------

         SubSnoic 框架入门到提高(1)---全程记录

         SubSnoic 框架入门到提高(2)---全程记录

 

 工作为主吧...还请原谅


                           ACTION   GO!            清新空气QQ1578741102


 

一、 HTML篇

[掌握要求:知道w3c和一些规范等,会熟练使用盒子模型,设计盒子布局,浮动属性等]

1.1 W3C标准

①    World Wide Web Consortium:对Web进行标准化,不是针对Web网页制订的标准,而是一系列标准的集合

  • 结构(Structure):内容方面:XHTML(Extension HyberText Markup Language)和XML
  • 表现(Presentation):用来美化界面,主要包括css
  • 行为(Behavior):主要包括DOM(Document Object Model)和ECMAScript等

②    DOM和ECMAScript是javascript的标准,XHTML是更严格更纯净的HTML版本,XHTML1.0规定了三种级别的声明

  • Strict(严格类型)
  • Transitional(过渡类型)
  • Frameset(框架类型):Strict严格标准不允许使用框架,当页面中需要使用框架时,则使用该声明

③    常用组织内容的标签:

div,span,p,h1,h2,h3,h4,h5,h6,ol,ul,li,dl-dt-dd

④      CSS:Cascading Style Sheets 层叠样式表

在</head>标签之上添加

<link rel="stylesheet" type="text/css" href="Style.css"/>

引入外部样式表

⑤     JS:JavaScript

     在</head>标签之上添加

     <script type="text/javascript" src="jquery.js"></script>

     引入外部js文件,和css引入方法很多相似,行内,内嵌,外部

⑥     XHTML规范有很多,主要基本规范

  • 标签名和属性名必须小写
  • HTML标签必须关闭
  • 属性值必须用引号引起来
  • 标签必须正确嵌套
  • 文档必须有一个根元素
  • 属性不能简写

⑦      Web开发注意的问题,主要以下几点

  • 不要使用不符合W3C标准的标签,例如<b><font><marque>,可以参考w3教程(http://w3school.com.cn)或官方文档(http://www.w3c.org)
  • <img/>标签必须有alt属性值,给出图片说明
  • 注意样式和内容分离的原则
  • 注意表单控件name和id属性。<form>表单推荐使用id而不是name属性。例如<form id=”mail”…>,除单选按钮外,控件的命名一般同事用id和name属性,两者取值相同。命名规范,例如userName,maxAge
  • 页面布局尽量采用DIV+CSS布局:HTML的内容结构语义化,使用表格布局看不出语义。商业网站的二面要尽量符合搜索引擎优化(SEO),增强页面结构层次,方便被Google,sohu,百度等搜索引擎搜索到,提高排名
  • 页面兼容性:网页的内容组织和样式表现要尽量符合W3C XHTML 1.0的标准

符合W3C规范页面的结构

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>无标题文档</title>

</head>

<body>

</body>

</html>

1.2 盒子模型

这幅图已经很明显的告知了你盒子模型了。顺便也告诉你margin,padding,border的用法了。

1.2.1关于页面元素的宽度和高度的计算

还有一幅图:最右边的元素也就是最上面的显示元素,上面的遮住下面的元素,可见背景图片是在背景颜色上面的

 

理论不如实践(初步体验JS,CSS)

小知识:<div>独占一行,也可以通过css属性,使多个div在一行,<span>标签,在一行,都可以理解成盒子,HTML中的盒子:用来容纳很多HTML元素(也就是标签)的一个逻辑整体。

注意:CSS,JS文件与页面分开写,必要的话也可以写在页面里,方便管理

本例子只是演示

附录一(Dreamweavor快捷键):

文件菜单 

  新建文档        Ctrl+N 
  打开一个 HTML文件   Ctrl+O或者将文件从[文件管理器]或[站点]窗口拖动到[文档]窗口中 
  在框架中打开       Ctrl+Shift+O 
  关闭           Ctrl+W 
  保存 Ctrl+S 
  另存为         Ctrl+Shift+S 
  检查链接        Shift + F8 
  退出          Ctrl+Q 

  编辑菜单 

  撤消          Ctrl+Z 
  重复          Ctrl+Y 或 Ctrl+Shift+Z 
  剪切          Ctrl+X 或Shift+Del 
  拷贝          Ctrl+C 或Ctrl+Ins 
  粘贴          Ctrl+V 或Shift+Ins 
  清除          Delete 
  全选          Ctrl+A 
  选择父标签       Ctrl+Shift+< 
  选择子标签       Ctrl+Shift+> 
  查找和替换       Ctrl+F 
  查找下一个       F3 
  缩进代码         Ctrl+Shift+] 
  左缩进代码       Ctrl+Shift+[ 
  平衡大括弧       Ctrl+’ 
  启动外部编辑器     Ctrl+E 
  参数选择        Ctrl+U 

  页面视图 

  标准视图        Ctrl+Shift+F6 
  布局视图        Ctrl+F6 
  工具条         Ctrl+Shift+T 

  查看页面元素 

  可视化助理       Ctrl+Shift+I 
  标尺          Ctrl+Alt+R 
  显示网格        Ctrl+Alt+G 
  靠齐到网格       Ctrl+Alt+Shift+G 
  头内容         Ctrl+Shift+W 
  页面属性        Ctrl+Shift+J

  代码编辑 

  切换到设计视图     Ctrl+Tab 
  打开快速标签编辑器   Ctrl+T 
  选择父标签       Ctrl+Shift+< 
  平衡大括弧       Ctrl+’ 
  全选          Ctrl+A 
  拷贝          Ctrl+C 
  查找和替换       Ctrl+F 
  查找下一个       F3 
  替换          Ctrl+H 
  粘贴          Ctrl+V 
  剪切          Ctrl+X 
  重复          Ctrl+Y 
  撤消          Ctrl+Z 
  切换断点        Ctrl+Alt+B 
  向上选择一行      Shift+Up 
  向下选择一行      Shift+Down 
  选择左边字符      Shift+Left 
  选择右边字符      Shift+Right 
  向上翻页        Page Up 
  向下翻页        Page Down 
  向上选择一页      Shift+Page Up 
  向下选择一页      Shift+Page Down 
  选择左边单词      Ctrl+Shift+Left 
  选择右边单词      Ctrl+Shift+Right 
  移到行首        Home 
  移到行尾        End 
  移 动到代码顶部     Ctrl+Home 
  移 动到代码尾部     Ctrl+End 
  向上选择到代码顶部   Ctrl+Shift+Home 
  向下选择到代码顶部   Ctrl+Shift+End 

  编辑文本 

  创建新段落       Enter 
  插入换行               Shift+Enter 
  插入不换行空格     Ctrl+Shift+Spacebar 
  拷贝文本或对象到页面其他位置   Ctrl+拖动选取项目到新位置 
  选取一个单词      双击 
  将选定项目添加到库   Ctrl+Shift+B 
  在设计视图和代码编辑器之间切换   Ctrl+Tab 
  打开和关闭[属性]检查器 Ctrl+Shift+J 
  检查拼写         Shift+F7 

  格式化文本 

  缩进          Ctrl+] 
  左缩进         Ctrl+[ 
  格式>无         Ctrl+0 (零) 
  段落格式        Ctrl+Shift+P 
  应用标题1到6到段落   Ctrl+1 到 6 
  对齐>左对齐       Ctrl+Shift+Alt+L 
  对齐>居中        Ctrl+Shift+Alt+C 
  对齐>右对齐       Ctrl+Shift+Alt+R 
  加粗选定文本      Ctrl+B 
  倾斜选定文本      Ctrl+I 
  编辑样式表       Ctrl+Shift+E 

  查找和替换文本 

  查找          Ctrl+F 
  查找下一个/再查找    F3 
  替换          Ctrl+H

DreamweavorCS6中的代码提示默认是 Ctrl+H

 

其他:在菜单栏→编辑→快捷键→命令→应用原格式,将原格式应用于选定内容 设置快捷键,常用的,我设置的是CTRL+Shift+Q  (Q代表全部)和 CTRL+Shift+E(这个我受vs的Ctrl+E+D格式化代码影响)

Ctrl_Alt+I 插入图片,Ctrl+Alt+F 插入Flash

在快捷键→编辑→代码提示工具,将下面的快捷键进行修改,很常用,我都是Ctrl+Alt开头的

下面是我的设置

Ctrl+U 打开首选参数设置界面

 

F12 运行网页

根据个人能力去设置哦;

个人比较喜欢这个demo,虽然比较丑,但是几乎融合了50%的HTML标签,有的没有写在里面是因为,有的标签很重要,想单独举例讲

本例稍稍添加了一个css3特性  transition  单击表单案例中的checkbox会有动画效果。本例中的后台代码注释也添加了很多说明,也是自己对某些的标签的简短看法

1、Demo1(回忆曾经的标签,曾经基本的):

常用标签大回忆
  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3 <head>
  4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5 <!--我在这里设置了网页编码信息,中简:gb2312,繁体:big5,纯英文iso
  6 -8859-1我想起了JAVA中的JSP乱码-->
  7 <title>预备知识</title>
  8 <style>
  9 <!--随便一个初体验css3-->
 10 #ckd,#ckSport_0,#ckSport_1,#ckSport_2 {
 11     -webkit-transition: all 1s ease-in 0s;
 12     -moz-transition: all 1s ease-in 0s;
 13     -ms-transition: all 1s ease-in 0s;
 14     -o-transition: all 1s ease-in 0s;
 15     transition: all 1s ease-in 0s;
 16 }
 17 #ckd:checked,#ckSport_0:checked,#ckSport_1:checked,#ckSport_2:checked {
 18     border-color: #F0F0F0;
 19     margin-left: 50px;
 20 }
 21 
 22 </style>
 23 <!--我是注释-->
 24 <script src="Scripts/swfobject_modified.js" type="text/javascript"></script>
 25 </head>
 26 <body bgcolor="#999999">
 27 <!--可类比于Table,tr,td-->
 28 <div style="height:600px;900px"><!--内嵌样式-->
 29   <h2>各种各样的基本网页标签</h2>
 30   <!----> 
 31   <!--直接写内容-->以下是 h+数字标题系列,可用Ctrl+数字1-6键
 32   ,快速输入,选中需要的文字,按Ctrl+数字,快速给文字加标题
 33   <div>
 34     <h1>h1</h1>
 35     <h2>22</h2>
 36     <h3>h3</h3>
 37     <h4>h4</h4>
 38     <h5>h5</h5>
 39     <h6>h6</h6>
 40     <p>关于转义符号&,输入后有很多提示,列举几个:
 41       &amp;lt;是&lt;,&amp;bt;是&gt;,&amp;quot;是引号,&amp;nbsp;是空格,dw中用Ctrl+Shift+空格,打出一个以上的空格,&amp;copy;打出版权&copy;等,具体直接看提示代码就行了,不要死记硬背</p>
 42     <p>&nbsp;</p>
 43     <p>&lt;p&gt;表示段落</p>
 44     <p><br/>
 45       &lt;br/&gt;表示换行</p>
 46     <p>&lt;img&gt; 标签插入图片,Ctrl+Alt+I 快速插入,flash是Ctrl+Alt+F,alt在w3c中必须要写,规定的</p>
 47     <p>图片align属性,表示图像与文本的对齐</p>
 48     <p> <img src="image/testPic.jpg" width="250" height="400" alt="我是测试图片,我的align是middle" align="middle" border="3" />我是文字,我的左侧图片的align设置成了middle,我还可以设置top,bottom,left,right,我被直接设置了border,  HTML 4.01 不推荐使用图像的 &quot;border&quot; 属性。在 XHTML 1.0 Strict DTD 和 HTML 5 中,不再支持该属性。 </p>
 49     <p>建议:
 50       &lt;img style=&quot;border:5px solid black&quot;&gt; </p>
 51     <p>插入一段flash</p>
 52     <p>
 53       <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="590" height="300" id="FlashID" title="绚烂极光">
 54         <param name="movie" value="image/58.swf" />
 55         <param name="quality" value="high" />
 56         <param name="wmode" value="opaque" />
 57         <param name="swfversion" value="8.0.35.0" />
 58         <!-- 此 param 标签提示使用 Flash Player 6.0 r65 和更高版本的用户下载最新版本的 Flash Player。如果您不想让用户看到该提示,请将其删除。 -->
 59         <param name="expressinstall" value="Scripts/expressInstall.swf" />
 60         <!-- 下一个对象标签用于非 IE 浏览器。所以使用 IECC 将其从 IE 隐藏。 --> 
 61         <!--[if !IE]>-->
 62         <object type="application/x-shockwave-flash" data="image/58.swf" width="590" height="300">
 63           <!--<![endif]-->
 64           <param name="quality" value="high" />
 65           <param name="wmode" value="opaque" />
 66           <param name="swfversion" value="8.0.35.0" />
 67           <param name="expressinstall" value="Scripts/expressInstall.swf" />
 68           <!-- 浏览器将以下替代内容显示给使用 Flash Player 6.0 和更低版本的用户。 -->
 69           <div>
 70             <h4>此页面上的内容需要较新版本的 Adobe Flash Player。</h4>
 71             <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="获取 Adobe Flash Player" width="112" height="33" /></a></p>
 72           </div>
 73           <!--[if !IE]>-->
 74         </object>
 75         <!--<![endif]-->
 76       </object>
 77     </p>
 78     <p>&nbsp;</p>
 79     <p>&nbsp;</p>
 80     <pre><!--在标签内什么样,显示出来就什么样,空格也方便了,哈哈,吼吼!-->
 81     hello,你好   我在学习html基础知识 我在用&lt;pre&gt;,&lt;pre&gt;
 82          在标签内什么样,显示出来就什么样,空格也方便了,哈哈,吼吼!
 83        哈哈,吼吼!
 84 </pre>
 85     我是&lt;hr&gt;标签
 86     &lt;hr size=&quot;5&quot; width=&quot;600&quot; color=&quot;#23530D&quot;/&gt;
 87     表示长度一般都可以用百分比表示比率
 88     <hr size="5" width="600" color="#23530D"/>
 89     <p>垂直:</p>
 90     <hr size="600" width="5" color="#23530D"/>
 91     <p>&nbsp;</p>
 92     <p>下面是个很重要的标签,经常用于做导航栏和列表显示数据</p>
 93     <p>无序列表&lt;ul&gt;&lt;li&gt;,他还有个类似的有序列表&lt;ol&gt;&lt;li&gt;</p>
 94     <p>无序列表 &lt;!--三个值,squre,circle,disc(默认值),也可以不显示,无序列表,没有显示的顺序--&gt;</p>
 95     <div>
 96       <ul type="square">
 97         <!--三个值,squre,circle,disc(默认值),也可以不显示,无序列表,没有显示的顺序-->
 98         <li>中国人</li>
 99         <li>韩国美女</li>
100         <li>日本男人</li>
101       </ul>
102     </div>
103     <div>
104       <ol type="1">
105         <p> 
106           <!--五个值,1(默认值)a,A,I,i,也可以不显示,有序列表,显示的有顺序,比如数字作为标号--> 
107         </p>
108         <p>有序列表 &lt;!--五个值,1(默认值)a,A,I,i,也可以不显示,有序列表,显示的有顺序,比如数字作为标号--&gt;</p>
109         <li>中国人</li>
110         <li>韩国美女</li>
111         <li>日本男人</li>
112       </ol>
113     </div>
114     <p> 超链接&lt;a href=&quot;&quot;&gt;</p>
115     <p>本页链接 跳到<a href="#suggestDontUse">建议不用的标签</a>这里</p>
116     <p>其他页面链接<a href="HyberLinkTest.html">测试超链接</a></p>
117     <p>顺便学习一下表格</p>
118     <p>&lt;!--dw中直接插入表格,输入几行几列就行了,选中单元格可以行合并colspan或者列合并,cellspacing,cellpadding常被设成0,具体怎样,尝试一下,你就知道了,边框看不见可以设置border=0,此处为了演示,就显示出来,在dw中设计界面按住Ctrl不放,鼠标移到table的td中可选中TD</p>
119     <p>然后dw中界面有个属性窗口,你可以修改他的属性</p>
120     <table width="600" border="1" cellspacing="0" cellpadding="0" bgcolor="yellow" bordercolor="#000000" >
121       <!--dw中直接插入表格,输入几行几列就行了,选中单元格可以行合并colspan或者列合并,cellspacing,cellpadding常被设成0,边框不用可以设置border=0,此处为了演示,就显示出来了-->
122       <tr  bgcolor="#33FF00">
123         <td>属性值</td>
124         <td>说明</td>
125       </tr>
126       <tr>
127         <td><a href="HyberLinkTest.html" target="_blank">_blank</a></td>
128         <td>新启动一个窗口打开链接</td>
129       </tr>
130       <tr>
131         <td><a href="HyberLinkTest.html" target="_self">_self</a></td>
132         <td bgcolor="#FF0000">在本窗口中打开</td>
133       </tr>
134       <tr>
135         <td><a href="HyberLinkTest.html" target="_parent">_parent</a></td>
136         <td>在上一级窗口中打开</td>
137       </tr>
138       <tr align="center"><!--相对于tr-->
139         <td><a href="HyberLinkTest.html" target="_top">_top</a></td>
140         <td>在整个浏览器的窗口中打开</td>
141       </tr>
142       <tr>
143         <td colspan="2">&nbsp;</td>
144       </tr>
145       <tr>
146         <td colspan="2" align="center">只是演示colspan (column span)合并列 ,还有rowspan合并行,文字居中</td>
147         <!--align可用于--> 
148       </tr>
149     </table>
150     <p>&nbsp;</p>
151     <p>关于电子邮件链接: <a href="mailto:1578741102@qq.com">我的邮箱</a></p>
152    
153     <div style="height:600px;900px;background:url(image/styl%2011.jpg)">
154       <h3>表单系列</h3>
155       <!--post安全,get不安全-->
156       <form action="HyberLinkTest.html" method="post" name="firstForm" target="_blank">
157         <!--文本框 --> 
158         文本框:
159         <input name="username" type="text" height="20" maxlength="20" />
160         <br/>
161         
162         密码框:
163         <input name="userpwd" type="password" height="20" maxlength="20" />
164           <br/>
165         文本域:
166     <textarea  name="mark" cols="22" rows="4"></textarea>
167         <br/>
168         普通按钮:
169         <input name="btn1" type="button" value="普通" />
170           <br/>
171              提交按钮:
172         <input name="btn2" type="submit" value="提交" />
173               <br/>
174         重置按钮:
175         <input name="btn3" type="reset" value="重置" />
176           <br/>
177          复选框:
178          <br/>
179         <p>
180            <label>
181              <input type="checkbox" name="ckSport" value="中国" id="ckSport_0"/>
182              中国</label>
183           <br />
184            <label>
185              <input type="checkbox" name="ckSport" value="韩国" id="ckSport_1" />
186              韩国</label>
187           <br />
188            <label>
189              <input type="checkbox" name="ckSport" value="日本" id="ckSport_2" />
190             日本</label>
191           <br />
192            <!--radio单选按钮要同名,表示一组 -->
193            <input name="sex" type="radio" value="" checked="checked" />194             <input name="sex" type="radio" value=""  />195         </p>
196         <p>列表框
197   <!-- 加size="5" 调节select可见的选项数量,也表示列表,加上size后,加 multiple="multiple" 可以多选-->
198           <select name="birthday">
199             <option value="" selected="selected">--请选择日期--</option>
200             <option value="1">一月</option>
201             <option value="2">二月</option>
202             <option value="3">三月</option>
203             <option value="4">四月</option>
204             <option value="5">五月</option>
205             <option value="6">六月</option>
206             <option value="7">七月</option>
207             <option value="8">八月</option>
208             <option value="9">九月</option>
209             <option value="10">十月</option>
210             <option value="11">十一月</option>
211             <option value="12">十二月</option>
212           </select>
213         </p>
214         <p>&nbsp; </p>
215         <fieldset>
216           <legend>我是&lt;fieldset&gt;标签,&lt;legend&gt;里写标题,相当于winform里面的groupbox</legend>
217       姓名:
218       <input type="text" />
219       密码:
220       <input type="password" />
221   </fieldset>
222       </form>
223     </div>
224   </div>
225   <h1><a name="suggestDontUse">建议不用的标签</a></h1>
226   <div><font color="#FF0000" face="微软雅黑" size="+5">我是以前的&lt;font&gt;标签,微软雅黑,5号字</font></div>
227   <marquee>
228   我在的&lt;marquee&gt;标签里面,我的默认方向是从右向左滚动←
229   </marquee>
230   <marquee direction="right" scrolldelay="50" >
231   我在的&lt;marquee&gt;标2签里面,我被设置了方向是从左向右滚动→,我还有up和down
232   </marquee>
233   <marquee direction="left" scrolldelay="50" onmouseover="this.stop()" onmouseout="this.start()">
234   我在的&lt;marquee&gt;标3签里面,鼠标移过来我停,移走我动
235   </marquee>
236 </div>
237 <div></div>
238 <script type="text/javascript">
239 swfobject.registerObject("FlashID");
240 </script>
241 </body>
242 </html>

测试连接页面代码

测试超链接等标签的页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<h1>超链接测试成功!</h1>
</body>
</html>

Demo1下载地址

 2、CSS修饰标签,CSS3增强网页元素的显示效果(暂时不讲)

   待添加

3.Dreamweavor的框架的使用 

    待添加

二、 C# 控制台篇 

对于那些基础知识,我只能给个demo了,所有的,我要说的,都已经在代码里了

此Demo,只要你从上往下看代码,就能掌握C#的基本语法,代码中含有大量vs2010操作技巧,命名规范小贴士,用代码顺便解说简单题目,学习语法,本例也添加了很多面试题里需要注意的地方,例如String和string,值类型,引用类型,ref,out,params等。全文贯穿 C#注释写法,我最看好的还是,别处学也学不到的vs2010操作技巧,让你的代码敲得别人快

 

2.1 点兵

Demo1   (万事开头难,赢在起跑线)

C#基础知识
/******************************************************   第一种注释 
FileName(文件名):  清新空气杨洋疯狂学习C#系列
Copyright (版权) (c)  2011-2012 杨洋疯狂学习C#
Writer(作者): 杨洋
create Date(创建日期): 2012-06-10
Rewriter(修改者): 杨洋
Rewrite Date(修改日期):2012-06-10
Impact(影响):
Main Content(Function Name、parameters、returns)(主要内容(函数名称、参数、返回值))
******************************************************/

using System;        //using导入其他命名空间  第二种注释
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace CSharpChap1   //namespace指定当前文件的命名空间
{
    class Program     //所谓的类class,还有struct
    {
        static void Main(string[] args)        //C#有4中写法,这是其中之一
        {
            #region 基本定义变量  第三种注释
            //
            #region 值类型
            int one;  // [声明] [变量][值类型][堆栈]
            int i = 1;  //【声明并赋值】
            int j, k; //同时声明同类型的两个变量赋值
            bool boolTe = false;  //就两个值false,true
            j = 2;
            k = 3;
            int a = 0, b = 1;//同类型的两个变量可以一行赋值
            Console.WriteLine("i的值ToString()后的" + i.ToString() + "\n" + "没有ToString()后的j是" + j);  //建议用ToString(),可以减少一次装箱,【隐式转换】【装箱(值类型→引用类型)】,\n表示换行 类似的还有很多,例如\t,用+ 号拼接字符串
            //好长的赋值
            i = j = k = one = 100;
            #endregion

            #region 引用类型string,但我觉得她是中间者
            string stringTest1 = "";
            char charTest2 = '@';
            String upperStringTest = ""; //注意和string一模一样,没有任何区别,可以理解为人的一个大名一个小名,类似的还有bool,Boolean,objec和Object一样的
            StringBuilder sb = new StringBuilder();  //new关键字有很多用法,其中之一
            sb.Append("第一次Append");  //sb后面的叫  方法,一个带参数的方法,这里调用了,选中Append,按F12切换到最初定义的地方
            stringTest1 = string.Format("我在用string.Format(),方法定义string第一个字:{0},第二个字:{1},第三个字:{2}\n连在一起:{0}{1}{2}", "", "", "");
            Console.WriteLine(stringTest1);
            //同样 Console.WriteLine(),也可以这样定义
            Console.WriteLine("我在用string.Format(),方法定义string第一个字:{0},第二个字:{1},第三个字:{2}\n连在一起:{0}{1}{2}", "", "", "蛋C#");   //快捷键:cw+Tab*2  "输入cw,按两下tab键"
            #endregion

            #region if语句
            string if1 = "A";
            string if2 = "B";
            string if3 = "C";
            string if4 = "c";
            if (true)    // 快捷键 输入 if + Tab*2
            {
                Console.WriteLine("是true啊!");
            }

            if (if1.Equals(if2))  //if(括号内容)   括号内容最终返回的是bool类型的
            {      //判断是否相等
                Console.WriteLine("if1相等if2");  //相等的执行这个
            }
            else
            {
                Console.WriteLine("if1不相等if2");//不相等的执行这个
            }
            if (!(if1.Equals(if2)))  //!去条件的反  非 条件
            {      //判断是否相等
                Console.WriteLine("if1不相等if2");//不相等的执行这个
            }
            else
            {
                Console.WriteLine("if1相等if2");  //相等的执行这个
            }

            //多个else
            if (if1.Equals(if2))
            {
                Console.WriteLine("if1相等if2");  //相等的执行这个
            }
            else if (if2.Equals(if3))
            {
                Console.WriteLine("if2相等if3");  //相等的执行这个
            }
            else
            {
                Console.WriteLine("if2跟if3不一样,跟if1也不一样");  //满足条件执行这个
            }

            //if (true | false)
            //{
            //    Console.WriteLine("满足2!       true&&true条件");  //
            //}

            if (if1.Equals(if2) && if2.Equals(if3))   //并 条件之一 我自己取名叫双且,都为true,才为true
            {
                Console.WriteLine("if2既等于if1,也等于if3");  //
            }
            if (!(if1.Equals(if2) || if2.Equals(if3)))        //或 条件之一 我自己取名叫双或,其中一个为true,就为true
            {
                Console.WriteLine("if2既不等于if1,也不等于if3");
            }

            //条件符号 & |
            bool x = true;
            bool y = false;   //如果 x 为 false,则不计算 y(因为不论 y 为何值,“与”操作的结果都为 false。这被称作为“短路”计算)。
            Console.WriteLine("x&y:{0}", x & y);  //
            Console.WriteLine("x|y:{0}", x | y);  // 你可以常规理解代码从上往下执行,从左向右执行,代码执行到x,发现x为true,对于或运算,一个为true,全部为true,所以他后面的其他条件都不判断了,也就不执行了。对于|| 如果从左到右,它会把每个条件都判断完,即使有一个为true了

            //三元运算符表示条件语句 条件 ? true要执行的内容  : false要执行的内容
            string sex = true ? "" : "";
            Console.WriteLine("用三元运算符判断出来的性别:{0}", sex);
            int userAge = 20;
            string age = userAge > 0 && userAge < 3 ? "婴儿"
                                  : userAge > 3 && userAge < 18 ? "小孩"
                                  : userAge > 18 && userAge < 30 ? "青年"
                                  : userAge > 30 && userAge < 50 ? "壮年"
                                  : userAge > 50 && userAge < 90 ? "老人"
                                  : userAge > 90 && userAge < 200 ? "化石"
                                  : "不是人";
            Console.WriteLine("年龄是:{0},属于{1}", userAge, age);

            //if里面嵌套if不说了,很多用法做项目会感觉到的 if(){ if(){} }

            //还有个等值判断,switch(){}     【break,default,switch】,这种结构在简单工厂经常用到 
            int number = 4;
            switch (number)
            {
                case 1:
                    Console.WriteLine("你的号码是1");
                    break;        //请写break;否则会报错
                case 2:
                    Console.WriteLine("你的号码是2");
                    break;        //请写break;否则会报错
                case 3:
                case 4:
                case 5:
                    Console.WriteLine("你的号码等于3,4,5之间的一个数字");
                    break;        //请写break;否则会报错
                default:
                    Console.WriteLine("我猜不到你的数字!");
                    break;        //请写break;否则会报错
            }
            //switch里面的判断条件可以是字符,字符串,bool, 快捷键 输入switch + Tab*2
            Boolean switchBool = false;  //跟bool一模一样的,将当做bool的别名吧
            switch (switchBool)
            {
                case true:
                    Console.WriteLine("true");
                    break;
                default:
                    Console.WriteLine("false");
                    break;
            }
            string switchString = "";  //为了演示string的null和"" 的区别 : null 没有给switchString分配内存,    "" 分配了内存
            //string switchString = null; 
            switch (switchString)
            {
                case "中国":
                    Console.WriteLine("switch:  中国");
                    break;
                case "日本":
                    Console.WriteLine("switch:  日本");
                    break;
                case "韩国":
                    Console.WriteLine("switch:  韩国");
                    break;
                case "":
                    Console.WriteLine("switch: \"\"");
                    break;
                default:
                    Console.WriteLine("switch:  null");
                    break;
            }

            #endregion


            #region 循环演示
            #region while 循环演示--图片播放
            Console.WriteLine("\n\n\n============while循环=================\n\n\n");
            int tempCount = 1;
            while (tempCount < 5)      //第一种   while(条件){循环体}    循环   //快捷键 while + Tab*2
            {
                Console.WriteLine("正在播放:第{0}张图片", tempCount);
                tempCount++;    //++代表   tempCount=tempCount+1
            }
            #endregion

            #region 三顾茅庐 do while循环
            Console.WriteLine("\n\n\n============三顾茅庐演示 dowhile循环=================\n");

            int threeVisitedHouse = 1;        //刘备三顾茅庐,至少一次对吧,顺便演示嵌套,continue 和  break的区别
            do           //快捷键 do + Tab*2        此循环的循环体至少执行一次
            {
                Console.WriteLine(Environment.NewLine + "刘备第{0}次拜访茅庐", threeVisitedHouse);   //Environment.NewLine也表示换行
                if (threeVisitedHouse <= 2)    //不等于是 !=
                {
                    Console.Write("诸葛亮第{0}次拒绝", threeVisitedHouse);
                    threeVisitedHouse++;
                    continue;       //跳出本层循环,执行本层循环体外的代码,例如:本例中是执行下一次的拜访
                }
                else
                {
                    Console.WriteLine("诸葛亮说:\"好吧我跟你回蜀国!");
                    break;     //跳出本层的所有循环
                }
            } while (true);

            #endregion

            Console.WriteLine("\n\n\n============乘法口诀n*n 演示 for循环=================\n");

            int forCount = 9;
            for (int m = 1; m <= forCount; m++)             //快捷键 输入for+Tab两次
            {
                for (int n = 1; n <= m; n++)        //将光标至于变量名里或者相邻,  快捷键 Ctrl + R +R 可进行快速重命名
                {
                    Console.Write("{0}×{1}={2}       ", m, n, m * n);
                }
                Console.WriteLine();
            }
            //实际开发中 for循环  非常常用

            Console.WriteLine("\n\n\n============ 演示 foreach 循环=================\n"); //用来遍历那些实现了IEnumerable的容器类型

            #region 无聊的数组,我认为已经被集合替代了,建议用集合,而且是泛型的
            //数组的声明方式
            // 类型[] 变量名=new 类型[长度];     类型[] 变量名=null; 类型[] 变量名;
            int[] arrayTest1 = null;
            int[] arrayTest3;
            int[] arrayTest = new int[5];
            // 类型[] 变量名=new 类型[长度]{具体值};
            arrayTest1 = new int[8] { 1, 2, 4, 7, 3, 5, 2, 11 };
            arrayTest3 = new int[] { 1, 2, 4, 7, 3, 5, 2, 11 };
            // 类型[] 变量名={具体值};  还比较常用,常见的异常:数组越界
            int[] arrayTest2 = { 2, 7, 2, 4, 83, 4, 5, 76, 4 };        //掌握这种就行了
            Console.WriteLine("数组中第一个的值:{0}", arrayTest2[0]);       //数组,集合如果索引方式获得 都是从0开始
            //由于数组中的东西是object,所以数组中的类型也可以是个数组,这样就产生了多维数组,由于数组的长度不一样,
            // 就产生了什么矩形数组,锯齿数组等,数组有几层叫几维
            //下面介绍一个  int[第一个数组的长度,第二个数组的长度],下面省写,表示等长度的数组,像个矩形
            int[,] mulitArray1 = { { 1, 2, 3, 4 }, { 2, 3, 4, 5 }, { 3, 4, 5, 6 } };       //应该很好理解
            //访问数组
            Console.WriteLine("多维数组中第1个数组中的第2个值的值:{0}", mulitArray1[0, 1]);     //正确的应该是2  {1,2,3,4}中的2
            int[, ,] mulitArray2 = {                       //应该感受到区别了吧
                                   {{1,2,3,4},{13,22,13,44},{1,5,3,4},{13,25,13,44}},
                                   {{1,2,13,4},{17,22,13,44},{1,2,23,4},{13,22,13,34}},
                                   {{1,12,3,4},{93,22,13,44},{1,2,13,4},{13,22,13,34}}
                                   };
            Console.WriteLine("三维数组中第二个数组里面第三个数组中的第三个数是:{0}", mulitArray2[1, 2, 2]);     //正确的应该是23  第二行里面第三个数组中的第三个数
            //多维数组自己可以参考msdn学习

            //下面正题,foreach    //快捷键 输入foreach+Tab两次,本例对arrayTest2数组求和
            //快捷键后默认有个var类型,可和js中作类比,再此不多说
            int sumNumber = 0;
            foreach (int c in arrayTest2)
            {
                sumNumber += c;
            }
            Console.WriteLine("arrayTest2累加的和是:{0}", sumNumber);

            #endregion

            //注释的快捷键 选中代码,按Ctrl+E+C,取消注释Ctrl+E+U,或者不选中某一行,把光标置于某行前面,按快捷键,可快速注释
            Console.WriteLine("\n\n\n============ 演示冒泡排序================\n"); //排序对程序很重要,方法也有很多,本例就对目前所掌握的知识进行一个总结,对arrayTest2数组排序
            int temp = 0;//为排序做中间变量
            for (int outLayer = 0; outLayer < arrayTest2.Length - 1; outLayer++)      //Length是数组的长度,注意L大写, 外层循环 数组长度-1    ,控制比较的轮数
            {
                for (int innerLayer = 0; innerLayer < arrayTest2.Length - 1 - outLayer; innerLayer++)  //内部循环 数组长度-1-外层索引
                {
                    //把大数字放在后面
                    if (arrayTest2[innerLayer] > arrayTest2[innerLayer + 1])
                    {
                        //temp = arrayTest2[innerLayer];                 //先把大数字放在临时变量里
                        //arrayTest2[innerLayer] = arrayTest2[innerLayer + 1];  //注意:数组中的 [索引]   索引越小,数字越靠前面,所以将小数字赋值到前面的一个变量(比较大小的对手)去 
                        //arrayTest2[innerLayer + 1] = temp;   //将临时变量的(较大的那个数,放在数组中较后面的位置,供下一周的比较)
                        //也可以不用临时变量交换两个数字的位置
                        arrayTest2[innerLayer] = arrayTest2[innerLayer] + arrayTest2[innerLayer + 1];
                        arrayTest2[innerLayer] = arrayTest2[innerLayer] - arrayTest2[innerLayer + 1];
                        arrayTest2[innerLayer + 1] = arrayTest2[innerLayer] - arrayTest2[innerLayer + 1];
                        //按住Alt选择代码,会有意想不到的代码哦,试试吧
                        #region 交换位置的一个小算法
                        //int aa = 9;
                        //int bb = 10;
                        //aa = aa + bb;
                        //bb = aa - bb;
                        //aa =  aa - bb;
                        //Console.WriteLine(aa+"  "+bb); 
                        #endregion
                    }
                }
            }
            //数组排序好了,进行输出
            Console.WriteLine("排序后的数字:");
            foreach (int item in arrayTest2)
            {
                Console.Write(item.ToString() + ",");
            }
            //要比较的轮数=  数组长度-1   ;   
            //第n轮比较,每轮比较的周数=数组长度-n+1 ;(其中>数组长度>n>0)
            //一共比较多少次,这个用排列组合知识比较简单, C的右下角是数组长度+1,右上角是2   得到结果后再减去1
            #endregion

            #endregion

            #region 值类型,引用类型对比,目前基础课不重要,以后非常重要
            bool boolTest;
            bool boolTest2 = false;
            boolTest = boolTest2;
            boolTest = true;
            Console.WriteLine("boolTest1:{0}\tboolTest2:{1}", boolTest.ToString(), boolTest2.ToString());

            string wifeLi = "我的老公是Zhang";
            string husbandZhang = "我的老婆是Li";
            Console.WriteLine("\n\n\nwifeLi:{0}\nhusbandZhang:{1}", wifeLi, husbandZhang);
            Console.WriteLine("\n===========结婚一年后===========\n");
            wifeLi = husbandZhang;
            husbandZhang = "我变心了,不喜欢你了";
            Console.WriteLine("wifeLi:{0}\thusbandZhang:{1}", wifeLi, husbandZhang);
            wifeLi = "我也变心了,我根本不喜欢你";
            Console.WriteLine("wifeLi:{0}\thusbandZhang:{1}", wifeLi, husbandZhang);

            //表示引用关系,而不是他的副本,于是提出了深复制,浅复制,这个以后再说
            StringBuilder wifeQin = new StringBuilder("我的老公是Wang");
            StringBuilder husbandWang = new StringBuilder("我的老婆是Qin");
            Console.WriteLine("\n\nwifeQin:{0}\thusbandWang:{1}", wifeQin, husbandWang);
            Console.WriteLine("\n===========结婚一年后===========\n");
            wifeQin = husbandWang;
            husbandWang.Clear();
            husbandWang.Append("我变心了,不喜欢你了");
            Console.WriteLine("wifeQin:{0}\thusbandWang:{1}", wifeQin, husbandWang);
            wifeQin.Clear();
            wifeQin.Append("我也变心了,我根本不喜欢你");
            Console.WriteLine("wifeQin:{0}\thusbandWang:{1}", wifeQin, husbandWang);

            //Ctrl+E+D  格式化一下代码
            #endregion

            #region 下面就 C#中方法的参数可以有几种传递方式 说一下
            Console.WriteLine("\n\n\n============ref,out,params方法参数修饰关键字=================\n\n\n");
            //方法中的参数 关键字  ref out param,一共有2个,ref,out都实现了参数的引用传递,区别在于ref要求参数在传入前被初始化,而out要求参数在方法返回前被初始化
            //params实现了参数数目可变的方法
            //顺便学习,目标:会定义方法,知道这几个关键字用法,了解引用和值类型,方法签名,方法重载
            //方法签名=返回类型 方法名(参数列表)
            //方法的定义 访问修饰符 方法签名{  }

            int refTest = 0;
            Console.WriteLine("初始值:" + refTest.ToString());
            NotRefMethod(refTest);
            Console.WriteLine("通过非引用传递参数后的结果:" + refTest.ToString());
            RefMethod(ref refTest); //虽然调用了方法,但还是改变了原有的值,因为这里的参数已经加ref变成引用类型了,RefMethod里的parameter在堆栈里已经指向了refTest,就好比他俩不同名字,但是同一个人,修改其中一个,另一个也就会变
            Console.WriteLine("通过ref引用传递参数后的结果:" + refTest.ToString());
            int outTest;  //仅仅声明,没有值
            OutMethod(out outTest);
            Console.WriteLine("通过out引用传递参数后的结果:" + outTest.ToString()); //奇怪的是outTest有值了,这就是out的作用
            //下面介绍一下params
            Console.WriteLine("\n\n\n============params方法参数修饰关键字=================\n\n\n");
            string param1 = "以下是清新空气的基本信息(身高,体重)";
            double param2 = 1.78;
            int param3 = 100;
            //params作为方法的修饰参数的好处,可直接将所有变量集合传入,无需声明一个数组对象
            UseParams(param1, param2, param3);
            //没有params,需要先建立一个数组
            object[] objCollection = { param1, param2, param3 };
            NotUseParams(objCollection);    //翻代码累了,定位代码3种方式①光标置于方法名,按F12,②Ctrl+G,然后输入行号③网上有vs2010插件

            #endregion

            #region 常用的知识,类型转换 Convert.ToXX(),字符串的基本处理
            Console.WriteLine("\n\n\n============  常用的知识,类型转换 Convert.ToXX(),字符串的基本处理=================\n");
            //目标:掌握数字间基本转换,字符串处理
            //string exampleConvert = "19";
            //经常做表单时遇到 担心别人输入的不是数字,有很多方法解决
            //①try{}catch(){}finally{} 顺便学习一下异常处理,更多详细,网上有讲解,多重catch时必须从子类到父类的写,否则编译不通过 【继承】
            Console.WriteLine("我来学你说话.请输入:");
            string text = Console.ReadLine(); //让用户可以再控制台输入东西,作为程序执行下一步的判断条件等等
            Console.WriteLine("你刚才输入的是:{0}", text);
            Console.WriteLine("你要我对你说什么? 1.我爱你  2.我喜欢你 3.其实我不是人\n请输入数字选择:");
            try
            {
                int choice = int.Parse(Console.ReadLine());
                switch (choice)
                {
                    case 1:
                        Console.WriteLine("我爱你");
                        break;
                    case 2:
                        Console.WriteLine("我喜欢你");
                        break;
                    case 3:
                        Console.WriteLine("其实我不是人");
                        break;
                    default:
                        Console.WriteLine("你说什么?我听不懂。");
                        break;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("请输入数字进行选择!");
                //Console.WriteLine(ex.Message); //这里只是为了说明调试技巧:用Message属性可以输出错误信息,方便调试:常用的,解决不了,将错误信息粘贴到网上去查找解决办法
                //Console.WriteLine(ex.StackTrace); //输出堆栈中的错误信息
                return; //程序到这里不执行下面的代码了,很常用
            }

            //第二种也是很保险的一个方法,推荐的,
            Console.WriteLine("\n\n你还要我对你说什么? 1.我爱你  2.我喜欢你 3.其实我不是人\n请输入数字选择:");
            int tryparseChoice; //不要赋值
            string text2 = Console.ReadLine();
            if (int.TryParse(text2, out tryparseChoice))   //应该还记得吧  out,试图将字符串转换为int,成功的话 tryparseChoice就被赋值了,否则赋值失败,if里的条件也就是false了,但不会报异常的
            {
                switch (tryparseChoice)
                {
                    case 1:
                        Console.WriteLine("我爱你");
                        break;
                    case 2:
                        Console.WriteLine("我喜欢你");
                        break;
                    case 3:
                        Console.WriteLine("其实我不是人");
                        break;
                    default:
                        Console.WriteLine("你说什么?我听不懂。");
                        break;
                }
            }
            else
            {
                Console.WriteLine("请输入数字进行选择!");
            }

            //通过tryparse系列方法,和parse方法,是将字符串转换成其他类型的方法
            //真正常用的还有 Convert.ToXXX系列的方法,他可以将M类型,转换成N类型,转换的条件当然要是合理,希望不要钻字眼
            //例如
            double stringToDouble = Convert.ToDouble("12.15");  //此类型语句,在ado.net中经常用,数据库中读的一般都是string类型的
            Console.WriteLine("stringToDouble现金是{0:C}", stringToDouble);  //这里用到了{0:C} 格式化字符串
            double intToDouble = Convert.ToInt32(12);
            Console.WriteLine("intToDouble现金是{0:C}", intToDouble);  //这里用到了{0:C} 格式化字符串
            Console.WriteLine("\n\n\n============ 字符串的基本处理=================\n");
            //关于string字符串的某些方法
            string testWord = "我是生活在空气里的空气Yangyang!";
            Console.WriteLine("原句子:{0}", testWord);
            Console.WriteLine("testWord.Substring(0,2)  >> {0}",
                testWord.Substring(0, 2)        //敲代码的时候就有提示了,第一个参数是起始点,第二个指要截取的长度 →我是
                );
            Console.WriteLine("testWord.Substring(3)   >> {0}",
           testWord.Substring(3)        //→活在空气里的空气Yangyang!从0开始数,3正好在活上面,然后取到尾部,呵呵,我已开始,用手指只在上面数,从左往右→从0开始数,最后停在那个字符上,就是最后手指压着的那个字符开始截取
           );
            Console.WriteLine("testWord.testWord.IndexOf(\"空气\")    >> {0}",
          testWord.IndexOf("空气")        //→5!从0开始数 左→右 先停下的那个字符,后面的重复的不管
          );
            Console.WriteLine("testWord.testWord.LastIndexOf(\"空气\")    >> {0}",
         testWord.LastIndexOf("空气")        //→9!从0开始数 左→右, 在最后1个指定的字符停下,前面的重复的不管
   );
            Console.WriteLine("testWord.testWord.ToUpper()    >> {0}",
testWord.ToUpper()        //→我是生活在空气里的空气YANGYANG! 转换成大写,同理还有ToLower()等方法;
);
            string fileName = "CSharpChap1.sln";
            //截取后缀名,文件名
            Console.WriteLine("后缀名:{0};文件名:{1}",
                fileName.Substring(fileName.IndexOf("."), fileName.Length - fileName.IndexOf(".")), fileName.Substring(0, fileName.IndexOf("."))
                );
            //记不住没有关系,有个Path类提供了
            Console.WriteLine("Path类方式后缀名:{0};Path类方式文件名:{1}",
        Path.GetExtension(fileName),Path.GetFileNameWithoutExtension(fileName)      //如果你不知道Path来自那个命名空间,不要死机硬背,告诉你一个黄金级的快捷键 Shift+Alt+F10
    );
            
            #endregion

            #region 关于方法重载
            //输入Reloading,然后输入 (  会提示同名方法两个不同的调用,这就是方法重载,关于重写override是继承里面的,子类重写父类的方法,例如我们可以重写Object对象的ToString()方法,所有的东西都是面向对象,C#中的类的祖先是Object,继承Object,这里不多说了,以后会说的
            //Reloading(
            Console.WriteLine("\n\n\n============ 扩展方法调用=================\n");
            //扩展方法调用
            TestExtensionMethod th = new TestExtensionMethod(); //创建类的对象,创建好后,就可以调用可以访问的属性、变量和方法等
            GetExtensionMethodThree(th);
            //其他写法     GetExtensionMethodThree(new TestExtensionMethod());    只希望领悟代码是活的
            #endregion

            Console.WriteLine("\n\n\n============ 到此我认为的基础C#知识已经学习完毕,本次demo耗时8个小时,谢谢学习=================\n");
            Console.ReadLine(); //为了让控制台程序台暂时停止等待用户输入;或者Console.ReadKey
        }

        #region ref out params 关键字相关说明的方法
        /// <summary>     最常用的注释,可以让你在别处调用此方法时,有提示,该提示就是你自己命名的
        /// Ref修饰方法参数
        /// </summary>
        /// <param name="parameter">一个被ref修饰的int类型</param>
        public static void RefMethod(ref int parameter)      //static 只有加上static关键字,才可以在static的类(静态类)中使用,static修饰的方法和字段,在运行时就被加载在内存中,不管你有没有调用,尽量少用static,因为它占内存
        {
            parameter += 10; // 等同于parameter=parameter+10;
        }
        /// <summary>     最常用的注释,可以让你在别处调用此方法时,有提示,该提示就是你自己命名的
        /// Ref修饰方法参数
        /// </summary>
        /// <param name="parameter">一个被ref修饰的int类型</param>
        public static int OutMethod(out int parameter)   //parameter再传过来时可以没有值,也就是没有初始化都没关系
        {
            parameter = 20;
            parameter = parameter + 10;
            return parameter;
        }


        /// <summary>
        /// 非ref修饰方法参数,普通的方法
        /// </summary>
        /// <param name="parameter">一个int数字</param>
        public static void NotRefMethod(int parameter)
        {
            parameter += 10; // 等同于parameter=parameter+10;
        }

        public static void NotUseParams(Object[] obj)
        {
            //为了演示提取方法,特意这样写,选中你要重构的那些代码,然后  快捷键 Ctrl+R,M
            FindObjectArray(obj);
            //顺便演示先写方法名,然后自动生成方法的快捷键 Ctrl+K,M
            MethodTestEasyFast();
        }

        private static void MethodTestEasyFast()
        {
            Console.WriteLine("演示先写方法名,自动生成方法的快捷键 Ctrl+K,M演示成功!");
        }
        /// <summary>
        /// 遍历数组中的元素,此方法的参数含有params关键字
        /// </summary>
        /// <param name="obj"></param>
        public static void UseParams(params Object[] obj)
        {
            FindObjectArray(obj);
        }
        /// <summary>
        /// 普通遍历
        /// </summary>
        /// <param name="obj"></param>
        private static void FindObjectArray(Object[] obj)
        {
            foreach (Object item in obj)
            {
                Console.WriteLine(item);
            }
        }
        #endregion

        #region 方法重载
        //返回值 方法名相同,参数不同的方法
        public static void Reloading()
        {

        }
        public static void Reloading(string para1)
        {

        }
        //返回值不同 方法名相同,参数相同的,编译都通不过哦,所以不要这样写OK?
        //public static int Reloading2(string para1)
        //{
        //    return 1;
        //}
        //public static void Reloading2(string para1)
        //{
        //}


        //以下是对TestExtensionMethod类的方法添加了一个新方法,叫ExtensionMethodThree,表面上这个类写在program.cs下,你可以就把它当做在ExtensionMethodThree类里面写就行了
        public static void GetExtensionMethodThree(TestExtensionMethod getMethodThree)
        {
            getMethodThree.ExtensionMethodOne();  //调用本类中的方法
            getMethodThree.ExtensionMethodThree();  //调用刚刚扩展的方法
        }
        #endregion

    }
    /*
     * 也是一种注释
     * 回车一下试试
     * */
    public class PropertypPesentationsClass
    {
        //同一命名空间下的第二个类,可以写在一个页面里,也可以其他的cs文件里,本类主要演示属性和命名法
        public PropertypPesentationsClass() { }
        public PropertypPesentationsClass(StringBuilder username)
        {
            this.UserName = username;   //理解好了this的用法,对代码很有好处的,在js中也很常用
        }
        //快捷键:输入prop+Tab*2
        public StringBuilder UserName { get; set; }  //Pascal命名法,常用于大名称,例如类名方法名,属性名,其他编程也有用到,太多了,不列举了
        public StringBuilder userPwd { get; set; }  //Camel命名法,常用于变量名
        public StringBuilder User_Address { get; set; }  //匈牙利命名法1  个人喜好,想用就用吧,C++多一点
        public StringBuilder _UserAddress { get; set; }  //匈牙利命名法2
        public StringBuilder UAddress { get; set; }  //匈牙利命名法3


        //第二种写法,先输入        private StringBuilder userPhone; 然后封装字段(快捷键Ctrl+R+E),变量名第一个小写,你可以在封装字段的界面里,取消预览,确定后,按下delete键,使代码更工整吧,如果你喜欢注释,可以不delete
        private StringBuilder userPhone;
        /// <summary>
        /// 用户电话              第四种注释,在属性或者方法上///,非常常用,而且这样的注释还可以到处xml文档               快捷键  / *3
        /// </summary>
        public StringBuilder UserPhone
        {
            get { return userPhone; }
            set { userPhone = value; }
        }

        //如果你写了大写命名,后面就是加数字命名,以此类推,建议不要这样
        private int UserAge;
        public int UserAge1
        {
            get { return UserAge; }
            set { UserAge = value; }
        }

        //属性名用_开头
        private int _UserEMail;
        public int UserEMail
        {
            get { return _UserEMail; }
            set { _UserEMail = value; }
        }

    }

    /// <summary>
    /// 本类知识用来学习扩展方法:当原来的类不能添加方法时,比如我们引入其他dll文件,源码没有,又想往它里面添加方法,就要用扩展方法了
    /// </summary>
    public class TestExtensionMethod
    {
        /// <summary>
        /// 顺便演示4.0新特性 , 方法的参数可以直接在括弧里赋值,初始值
        /// </summary>
        public void ExtensionMethodOne(int hello = 3)
        {
            Console.WriteLine("扩展方法演示,我是方法一:我的参数默认值是{0}", hello.ToString());        //减少装箱
        }
        public int ExtensionMethodTwo()
        {
            Console.WriteLine("扩展方法演示,我是方法二");
            return 1;
        }
    }
    public static class ExtensionTestExtensionMethod
    {
        //以下是对TestExtensionMethod类的方法添加了一个新方法,叫ExtensionMethodThree,表面上这个类写在program.cs下,你可以就把它当做在ExtensionMethodThree类里面写就行了
        //扩展方法必须在非泛型静态类中定义
        public static void ExtensionMethodThree(this TestExtensionMethod methodThree)
        {
            Console.Write("我是扩展的方法,我被调用成功! \t");
            methodThree.ExtensionMethodOne();  //当做在TestExtensionMethod的类中写,当然可以调用本类中的方法咯
        }

    }
}

demo1下载 

本期的C#篇主要学习基本语法,最近发现将代码写出,用代码注释讲课,效果好很多倍。本代码未经允许不允许粘贴复制作为个人劳动成果,仅供学习和交流,请尊重...

 

三、 C# AspNET篇 

3.1   优点:

  生成的代码与浏览器无关 

方便设置断点,易于调试

编译后执行,运行效果提高

代码后置,使代码更清新

3.2    Asp.NET运行机制

      第一次会请求Asp.NET页面时,Asp.NET引擎检测这个页面对应的类,找不到,Asp.NET引擎会=将会aspx文件和cs文件重新生成一个页面类,并编译成程序集,然后返回处理结果。

       第二次访问时,无需再次编译,只需要执行和输出。

3.3    编码方式:代码内嵌(<%.....%),代码后置

3.4    PostBack机制

      如果Page.IsPostBack为true时则为首次加载页面

      if(!Page.IsPostBack){}//页面不是首次加载时,控制

3.5    ViewState机制

      页面代码中<%@ Page EnableViewState="true" %>,或者控件的EnableViewState=”false”可以来禁用

3.6   Asp.NET 生命周期

主要阶段:页面初始化时(Init){实例化所有控件,并赋予默认值}→加载页面时(Load){IsPostBack是否首次加载,不是的话,则为控件加载ViewState,读取并更新控件的属性值}  →

服务器端控件进行验证时→控件事件时→页面显示时(Render){不是事件,对该页和所有控件的保存视图状态,调用每个控件的Render()方法,Response对象已经不可用}→页面卸载时(Unload){将该页面发送至客户端,释放资源,写在页属性,例如Request和Response}

3.7   Request对象

      URL地址:例如跳转(重定向)   Response.Redirect("Default2.aspx?txtUser="+this.TextBox1.Text+"&action=delete"); 

Default2.aspx页面

       获取值: Request.QueryString[“…”],Request.Form[“…”],Request[“…”],Request.Params[“…”]

       浏览器,服务端,客户端信息 

Request.ServerVariable[“…”],例如HTTP_USER_AGENT;    Request.Browser…

      Request.URL 获取当前请求的URL信息

      方法:Request.MapPath(),将请求的URL中的虚拟路径映射到服务器的物理路径

3.8  Response对象

     Response.Write(),Response.Redirect() 

3.9  Cookie对象 

            Response.Cookies["userLogin"].Value = "杨洋";

            //或者

            HttpCookie cookie = new HttpCookie("userLogin2", "芳芳");

            Response.Cookies.Add(cookie);

     保存时,同名覆盖;Expires设置为MaxValue,永远不过期,未设置,则关闭浏览器结束保存;Cookie可禁用,4KB大小

     应用:用户浏览记录,用户上次登录时间

 

四、 C# SQLSERVER篇  

    这里以company这个数据库为例

      4.1  附加数据库

exec sp_attach_db @dbname='company',@filename1='C:\Users\yangyang\Desktop\网页教程demo\DB\company_Data.MDF'

,@filename2='C:\Users\yangyang\Desktop\网页教程demo\DB\company_Log.LDF'

      4.2  备份数据库

           backup database company to disk='D:\backupSQLSRVER\20120611company.bak'

      4.3  还原数据库

            use master

            go

            restore database company from disk='D:\backupSQLSRVER\20120611company.bak'

      4.4   收缩数据库

            DBCC SHRINKDATABASE(company)

       4.5  分离数据库

            exec sp_detach_db 'company'

五、 C# JavaScript篇 

         5.1  初次认识

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<script>
function Add(a){
    alert('你调用了:'+a);
    }
Add(15);


//var f1=function(a){alert(a)};
//alert(f1(15));


<!--alert(function(a,b){return a+b;}(1,2));-->

</script>
<body>
<a href="javascript:alert('超链接调用js1')">超链接调用js1</a>
<a href="1.html" onclick="alert('超链接调用js2')">超链接调用js2,单击后跳转1.html页面</a>
<input type="button" onclick="Add('js调用方式3')" value="js调用方式3"/>
</body>
</html>

         5.2  数组与集合的js用法

         

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<script type="text/javascript">
/*当Dictionary用*/
/*var dicTest=new Array();
dicTest["sql基础"]=38.9;
dicTest["sql中级"]=59;
dicTest["sql高级"]=89;
alert(dicTest["sql中级"]);
alert(dicTest.sql高级);*/

/*当Array用   数组是dictionary的一个特例*/ 
/*var arrayTest=new Array();
arrayTest[0]='sql基础';
alert(arrayTest[0]);*/

/*for循环*/
/*var dicTest=new Array();
dicTest["sql基础"]=38.9;
dicTest["sql中级"]=59;
dicTest["sql高级"]=89;
for(var i in dicTest){   //遍历出这个集合所有的键,类似c#的foreach,还有1个for循环
    alert(i+'   价格:'+dicTest[i]);
    }*/
    
/*array简化声明*/
/*①数组   用[] 括号表示*/
/*var array=['sql基础','sql中级','sql高级'];    
for(var i=0;i<array.length;i++){
    alert(array[i]);
    }
alert(array.join('@'));*/
    
/*②字典  用{}  表示*/
/*var dicTest={"sql基础":38.9,"sql中级":59,"sql高级":89};
for(var key in dicTest){
    alert(key+":"+dicTest[key]+"元");
    }*/
    
</script>

<body>
</body>
</html>

5.3 JavaScript也有OOP,别误解了,没有类的说法

这里的Book你可以曲解跟C#中的类相比,GetBookIntroduction是一个方法,属性一不要事先声明,最好玩的是调用Book的时候会有代码提示

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<script type="text/javascript">
  function Book(title,price,author){
      
      this.Title=title;
      this.Price=price;
      this.Author=author;
      this.GetBookIntroduction=function(){
          alert('书名:'+this.Title+'它的价格是:'+this.Price+",作者:"+this.Author);
          };
      }      
      var SqlBook=new Book('sql编程基础',39.8,'杨洋');
      SqlBook.GetBookIntroduction();
      SqlBook.Author='亚马逊';
      SqlBook.GetBookIntroduction();
</script>

<body>
</body>
</html>

待添加...

六、 C# JQuery篇 

      既然会了JQuery,我觉得不要花太多的时间放在DOM编程上了,但是我也会补充一点,JQuery就是,你要用一切方法获得你想要的元素,然后用js或者jquery提供的某些东西,去改变你想要的元素

   6.1  初次见面,在HTML中,先导入jquery的js文件,一个最简单的调用,<script type="text/javascript" src="js/jquery-1.7.2.min.js">,即引入了,还有个js/jquery-ui-1.8.20.custom.min.js先不要管,它是一个jquery的ui库  

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>基础</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.min.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
/*①是②的简写形式*/
/*$(function(){alert('第一种方式!')});*/


/*②创建加载*/
/*$(document).ready(function() {
    alert("第二种方式");
});
*/

/*原始的DOM方式,很像C#中的委托形式,onload只能注册一次,而且只执行最后一次注册的,不信的话你可以试一试*/
window.onload=function(){
    alert('第一种方式');
    };
window.onload=function(){
    alert('第二种方式');
    };
    
/*onload是在所有DOM元素创建完毕图片CSS都加载完了才被触发,而JQuery中的ready是在Dom元素创建完未加载时就触发了,提高了网页的响应速度*/
</script>

<body>

</body>
</html>

6.2 初次体验

   

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>初次体验</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){
    $("#btn1").click(function(){
        alert(this.value); /*this代表事件源,你可以认为是引发事件的那个对象,这里就是id为btn1的按钮对象*/
        });
    
    $("#btn2").click(
    function(){$("#div1").toggle("slow");} /*把toggle改成hide试试*/
    );
}
);
</script>
<body>
<input type="button" id="btn1" value="获得提示"/>
<input type="button" id="btn2" value="隐藏下面文字"/>
<div id="div1">
阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋阳阳阳阳阳阳阳阳杨洋
</div>
</body>
</html>

6.3 jquery的数组和集合的遍历 .map()   .each()

    

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>遍历数组</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>

<script type="text/javascript">
/*①$.map(array,函数)     不能处理Dictionary风格的数组*/
/*var array=[1,2,3,4,5,6];
$.map(array,function(item){
    alert(item*2);
    });
*/


/*②$.each(array,函数)*/
<!--案例1-->
/*var dicTest={"sql基础":38.9,"sql中级":59,"sql高级":89};
$.each(dicTest,function(key,value){
    alert("key:"+key+"  value:"+value);
    });*/
    
<!--案例2-->
/*var array1=[1,2,3,4,5,6];
$.each(array1,function(key,value){
        alert("key:"+key+"  value:"+value);   //key竟然是array1的元素的索引,从0开始
    }
);*/

<!--案例3-->
/*var array3=[3,4,5,6];
$.each(array3,function(){alert(this);});   //就是里面的值
*/


<!--案例4-->
var dicTest4={"sql基础":38.9,"sql中级":59,"sql高级":89};
$.each(dicTest4,function(){
    alert(this);            //this在这里竟然是value,不是key
    });

</script>

<body>
</body>
</html>

6.4 Jquery对象和DOM对象 css(),html(),val(),text()

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Jquery对象和DOM对象</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
/*①这里的$("#test1")指的就是Jquery对象,既然是对象,就能够调用对象的属性或者方法,这里调用了html()方法*/
/*$(
function(){
    alert($("#test1").html());
    
    }
);
*/

/*②传统的DOM对象操作,类比①中的方法*/
/*window.onload=function(){
var a=document.getElementById("test1").innerHTML;
alert(a);
}*/



/*③案例集合*

<!--案例1-->
/*$(function(){
    $("#test1").html('<a href="http://www.cnblogs.com/">去博客园</a>');      //①外面竟然是双引号,为了能解析,里面的原本是双引号的当然要写成单引号啦!②外面用单引号,里面用该什么样子就什么样子,极力推荐第二种
    });*/
    
    
<!--案例2-->
//将JQuery对象转换成DOM对象,$(DOM对象)[0]
/*$(function(){
var domTest=$("#test1")[0];
alert(domTest.innerHTML);
});*/


<!--案例3  JQuery的对象CSS()-->
/*$(function(){
    $("#myList li").css("background","red");   //学过CSS的都能潜移默化的很容易接受  $(选择器)   选择器的写法,这个很像CSS中选择器,这里表示id为myList的对象里面的 所有li元素,获得对象后,就可以调用Jquery对象的属性或者方法操作了,学会基本的语法或者常用的Jquery对象方法后,你就可以学着去用Jquery手册自己学习提高了
    
    alert($("#myList li").css("background"));
    });*/

<!--案例4  JQuery的对象val()-->
/*$(function(){
    $("#txtName").val("茗洋芳竹");   //应该懂了吧,我觉得学了JQuery,你可以基本忘掉以前的那些DOM了
    alert($("#txtName").val());
    });
*/

<!--案例5 text()方法相当于 DOM的innerTEXT-->
$(function(){
    alert($("#test1").text());  //不含html标签代码,你可以把它放心的和html方法类比
    });
    
</script>

<body>
<div id="test1">测试1
<ul style="float:left;list-style:none" id="myList">
<li id="title">
杨洋疯狂C#
</li>
<li id="author">
编写人:杨洋
</li>

</ul>
<input type="text" id="txtName" value="待定"/>
</div>
</body>
</html>

6.5  Jquery选择器(基本) 标签,ID,类选择器

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Jquery选择器</title>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
    
<style type="text/css">
/*只为演示方便,所以在这里写样式,建议将样式与界面分离,还有js代码*/

.current {                          /*类选择器,页面中在元素里用class="current" 就可以应用这里定义的样式了*/
    border-bottom: thin #03F 2px;
}
ul li {                           /*css中的标签选择器   空格代表包含关系,后面的元素在前面的元素中,这里可以理解为本页面中所有ul下的所有li元素都应用这个样式*/
    list-style: none;              /*去除li前面的的列表标记*/
    float:left;               /*元素左浮动,当然还有右浮动,具体的就可以看他的提示代码,然后改一下看一下效果,试试就知道了*/
    cursor:pointer;
}
ul li:hover{                      /*:hover 锚伪类,还有其他的很多,这个效果是鼠标移上去的css效果,当然也能用js写的*/
    
    }
</style>
<script type="text/javascript">
//在学之前,如果你会CSS,那么学起来将特别的简单

<!--案例1 $(标签)-->
$(
function(){
    //tagname选择器
    $("p").text("哈哈");  //所有P元素都会被赋值 , 相当于DOM的 getElementByTagName("p")
    
    //id选择器
    $("#div1").text("div也被赋值了");  //用# 加上 id名,即可获得此id的元素对象,相当于 getElementById("div1")
    
    //类选择器
    $(".current").click(function(){
        window.location.href="http://www.baidu.com";
        });
    }
);

</script>
</head>
<body>
<p>第一个哈哈</p>
<p></p>
<p></p>
<p></p>
<p></p>
<div id="div1">
</div>
<div id="div3">
  <ul>
    <li class="current">&nbsp;百度首页</li>
    <li>&nbsp;购物广场</li>
    <li>&nbsp;会员中心</li>
    <li>&nbsp;帮助</li>
  </ul>
</div>
</body>
</html>

6.6  Jquery初接触事件 mouseenter 你可以拓展到其他事件试试

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(function(){
var elements=$("#test1");//验证一下是否有id叫test1的DOM元素
if(elements.length<=0){
    alert('没有');
    return;
    }    
    
    
$("#test1").mouseenter(
function(){
alert('真移动上去了');
});    

});
</script>
<body>
<input id="test1" type="button" value="移到我头上看看" />
</body>
</html>

6.7  Jquery元素获取技巧1  next()  nextAll() siblings()

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>元素获取技巧1</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">

$(function(){
    //next()方法用于获得节点之后的挨着的第一个同辈的元素,nextAll(),单方向的
    //案例1
      /*$("div").click(function(){
        alert($(this).next("div").text());
        });*/
        
    //案例2
/*    $("div").click(function(){
        alert($(this).next("p").text());
        })    */
        
    //案例3
/*    $("div").click(function(){
        alert($(this).nextAll("div").text());
        })    */
        
    //案例4
/*    $("div").click(function(){
    $.each($(this).nextAll("div"),function(){
        $(this).css("background","red");
        });
})*/
    
    //案例5  无须循环
/*    $("div").click(function(){
    $(this).nextAll("div").css("background","red");
    })
    */
    
    
    //sblings()用于获取所有同辈元素
    //案例6  silings 选中当前元素背景有色,其他兄弟同级别无色
     $("div").mouseover(function(){
        //第一种写法,非链式写法
/*     $(this).css("background","red");
     $(this).siblings("div").css("background","white").css("cursor","pointer");*/
    
     //第二种写法,链式的写法,Jquery的风范
     $(this).css("background","red").siblings("div").css("background","white");
});

});

</script>
<body>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<p>5</p>
<div>6</div>
<div>7</div>
<div>8</div>
</body>
</html>

6.8  Jquery 评分控件  removeClass() 删除一个css样式,addClass()   添加一个css样式,如果有css基础就好学了

  $("#rating td")中间有个空格,跟css中一样,表示td是id为rating元素的子元素,说白了,id为rating的元素下的所有td元素

如果改成了  $("#rating .borderstyle")   则代表  id为rating的元素下的所有应用了borderstyle这个样式的元素

如果改成了  $("#rating td.borderStyle")  则代表  id为rating的元素下的所有应用了borderstyle这个样式的td类型的元素

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>评分</title>
</head>
<style type="text/css">
.borderStyle{
    border:#F00 2px solid;
    }
</style>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){    
//先全部初始状,鼠标移上去,先全部变成激活状,然后设置事件源的右边同辈元素设初始状
$("#rating td").html('<img src="images/1.png" width="12" height="12" />').mouseover(function(){
    $("#rating td").html('<img src="images/2.png" width="12" height="12" />');
    $(this).nextAll().html('<img src="images/1.png" width="12" height="12" />');
    });
  
 //添加样式addClass(),RemoveClass() 
$("#rating td").addClass("borderStyle");
$("#rating td").click(function(){
$(this).removeClass("borderStyle");
});
}
);
</script>
<body>
<table id="rating">
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
</table>
</body>
</html>

6.9 JQuery 过滤器  本例子有很多知识点

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>过滤器</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<style type="text/css">
.boldTitle {
    font-weight: bold;
    font-size: 14px;
    text-align: center;
}
.last {
    text-align: center;
    font-size: 18px;
}
</style>
<script type="text/javascript">
$(
function(){
//表格第一行标题加粗
$("#table1 tr:first").addClass("boldTitle");
//表格最后一行标题加粗
$("#table1 tr:last").addClass("last");

//前三行字体变大,tr的序号是大于0小于4的,因为:gt先大于0那么从编号为1的又重新开始编索引,那么编号再小于3的只有  123了
$("#table1 tr:gt(0):lt(3)").css("font-size","28px");//也可以写成28

//排除第一行标题后取奇数行,背景设为红色
$("#table1 tr:gt(0):even").css("background","red");

//相对选择器
$("#div2").click(
function(){
$("ul",$(this)).css("background","red");   //第二个参数表示前一个元素的基准点,相对定位
}
);



//属性过滤器表单对象过滤器
$("input[value=显示选中项]").click(function(){
alert($("input:checked").val());
});


//遍历的each的另一种用法,数组.each()
$("input[name=ckBooks]").click(
function(){
var names=$("input[name=ckBooks]:checked");
var arr=new Array();
names.each(function(index, element) {       //开始遍历
    arr[index]=$(element).val();
});
$("#women").text("你选中了"+arr.length+"条:"+arr.join(","));
}
);

//表单选择器
/*$(":input");      //例如还有:text    :password  :hidden  :radio   :checkbox     :submit  :image    :reset    :file    :button等*/

//attr方法
alert($("#link1").attr("href"));  //获得
//设置
$("#link1").attr("href","http://www.google.com")
}
);
</script>
<body>
<table id="table1" width="200" border="1">
  <tr>
    <td>编号</td>
    <td>姓名</td>
  </tr>
  <tr>
    <td>1</td>
    <td>网吧</td>
  </tr>
  <tr>
    <td>2</td>
    <td>王武</td>
  </tr>
  <tr>
    <td>3</td>
    <td>天霸</td>
  </tr>
  <tr>
    <td>4</td>
    <td>虎妞</td>
  </tr>
  <tr>
    <td>5</td>
    <td>七八</td>
  </tr>
  <tr>
    <td>上一页</td>
    <td>下一页</td>
  </tr>
</table>
<div id="div2">
  <ul id="ul1">
    <li>a</li>
    <li>b</li>
    <li>c</li>
    <li>d</li>
    <li>e</li>
  </ul>
</div>
<div id="div3">
  <ul id="ul2">
    <li>a2</li>
    <li>b2</li>
    <li>c2</li>
    <li>d2</li>
    <li>e2</li>
  </ul>
</div>
<div id="checkBoxes">
  <input type="checkbox" name="ckBooks" value="sql"/>
  sql书
  <input type="checkbox" name="ckBooks" value="html"/>
  html书
  <input type="checkbox" name="ckBooks" value="C#"/>
  C#书</div>
<input type="button" value="显示选中项"/>
<a href='http://www.baidu.com' id="link1">百度</a>
<div id="women"></div>
</body>
</html>

6.10 动态创建DOM节点 append(),appendto,自己拓展学习after,before

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>动态创建DOM节点</title>
</head>
<style type="text/css">
.current{
 background:#069;
    }
</style>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){
//append常用的一个方法,在元素的末尾追加一个元素,添加一个节点,相对应的还有个AppendTo
/*var ele=$('<a href="http://www.baidu.com">百度</a>');
$("div:first").append(ele);*/


//prepend在元素的开始添加元素,after在元素之后添加元素(添加兄弟),before,




//加载书籍列表
var books={"sql基础":"28.98","sql中级":"49.98","sql高级":"99.98"};
$.each(books,function(a,b){
var tr=$('<tr><td>书名:'+a+'</td><td>书架:¥'+b+'</td></tr>');
$("#booklist").append(tr);
});




//删除一个节点Remove(),相当于剪切
/*$("#ul1 li.current").remove();*/


//其实没有删除,剪切
var ff=$("#ul1 li.current").remove();
$("#ul2").append(ff);
}
);
</script>
<body>
<div>
<table id="booklist">

</table>
<ul id="ul1">
<li class="current">aaaaa</li>
<li>bbbbb</li>
<li>ccccc</li>
<li>ddddd</li>
</ul>
<ul id="ul2"></ul>
</div>
</body>
</html>

6.11 简单的权限管理,append操作,remove()

   remove()我觉得理解剪切更好,$("#select1 option:selected")表示id为select1元素下的  option节点,:selected是个过滤器,表示选中的

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>权限管理模拟</title>
</head>
<style type="text/css">
#buttons{
    float:left;
    100px;
    }
#buttons input{
    float:left;
    100%;
    }
</style>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){
$("#ltr").click(function(){
var ite=$("#select1 option:selected").remove();
$("#select2").append(ite);
});
}
);
</script>
<body>
<select style="height:100px;float:left" name="leftAuthorization" multiple="multiple" id="select1">
<option>添加</option>
<option>删除</option>
<option>修改</option>
<option>查询</option>
<option>打印</option>
</select>
<div id="buttons">
<input type="button" id="ltr" value=">"/>
<input type="button" value=">>"/>
<input type="button" value="<"/>
<input type="button" value="<<"/>
</div>
<select style="height:100px;100px;float:left" name="rightAuthorization" multiple="multiple" id="select2"></select>
</body>
</html>

6.12  加法计算 

$("input[name=txtOne]")表示input标签里 name属性为txtOne的元素,想一想还可以怎么拓展
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>加法计算</title>
</head>

<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){
    $("#calc").click(function(){
        var c=parseInt($("input[name=txtOne]").val())+parseInt($("input[name=txtTwo]").val());
        $("input[name=txtResult]").val(c);
});
});
</script>
<body>
<input name="txtOne" type="text" />+<input name="txtTwo" type="text" /><input value="计算" id="calc" type="button" /><input name="txtResult" type="text" />
</body>
</html>

6.13  倒计时

setInterval(方法名称(),时间),多少秒执行一次这个指定的方法,clearInterval,清除计时器
attr(),属性,可读取属性值,设置属性值

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>倒计时</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">

var times=10;
var timeInte;
$(
function(){
    $("#nextg").val("请仔细阅读,还剩"+times+"");
$("#nextg").attr("disabled","true");//禁用按钮
timeInte=setInterval("fre()",1000);
}
);


function fre(){
if(times<=0){
$("#nextg").val("同意");
$("#nextg").attr("disabled","false");//启用按钮
clearInterval(timeInte);
return;
    }else{
$("#nextg").val("请仔细阅读,还剩"+times+"");
times--;
        }
}

</script>
<body>
<textarea name="" cols="" rows="">ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff</textarea>
<input name="ff"id="nextg" type="button" value="同意" />
</body>
</html>

6.14 Jquery 焦点事件接触,水印文本框

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>blur focus</title>
</head>
<style type="text/css">
.borderRed {
    border: #F00 1px solid;
}
</style>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">

$(
function(){
$("#one1").focus(function(){
$("#one1").addClass("borderRed");
if($("#one1").val()=="请输入内容"){
    $("#one1").val("");
    }
}
);
$("#one1").blur(function(){
$("#one1").removeClass("borderRed");
if($("#one1").val()==""){
    $("#one1").val("请输入内容");
    }
}

);

}
);
</script>
<body>
<!--第一种方式,通常也用于文本框失去焦点验证输入是否合法-->
获得焦点事件,离开事件
<input type="text" id="one1" value="请输入内容"/>
<!--第二种方式-->

水印文字
<input type="text" name="textfield" value="我爱你" onfocus="if(this.value=='我爱你')this.value='';" onblur="if(this.value=='')this.value='我爱你';" />
</body>
</html>

6.15  Jquery样式管理,addClass,removeClass,hasClass,toggleClass,filter:Gray,搜索框效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>样式管理</title>
</head>
<style type="text/css">
.fontColor {
    color: #F00;
}
.grayBrush {
    color:#666;
}
body{
/*    filter:Gray;*/      /*窗体变成黑白色*/
    }
</style>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){
    
$("#addclass").click(function(){
$("#title").addClass("fontColor");
});
$("#removeclass").click(function(){
$("#title").removeClass("fontColor");
});
$("#toggleclass").click(function(){
$("#title").toggleClass("fontColor");   //toggle 是切换的意思,以后还会遇到很多次
});
$("#hasclass").click(function(){
alert($("#title").hasClass("fontColor"));  //是否应用了这个样式
});

//模仿前面的鼠标移上去移走的效果(高亮显示)addClass,removeClass
$("#gr input").mousemove(function(){
$(this).addClass("fontColor").siblings().removeClass("fontColor");
});

//搜索框
$("#txtSearch").val("请输入搜索关键字").addClass("grayBrush")
.focus(function(){
if($(this).val()=="请输入搜索关键字"){
    $(this).val("").removeClass("grayBrush");
}})
.blur(function(){
if($(this).val()==""){
    $(this).val("请输入搜索关键字").addClass("grayBrush");
    }

});

});

//关于调试浏览器的兼容性
// IECollection   IETester工具都可以
</script>
<body>
<b id="title">我们依然继续</b>
<div id="gr">
  <input type="button" id="addclass" value="addClass()" />
  <input type="button" id="removeclass" value="removeClass()" />
  <input type="button" id="toggleclass" value="toggleClass()" />
  <input type="button" id="hasclass" value="hasClass()" />
</div>

<input type="text" value="" name="searchBox" id="txtSearch"/>
</body>
</html>

6.16 节点操作  replaceWith,wrap方法,当然也有unwrap方法,自己参考手册学习

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>节点操作</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){
//将换行替换成分割线
$("br").replaceWith("<hr/>");

/*wrap()用来包裹元素*/
$("p").wrap('<font size="12px" color="red"></font>');
}
);
</script>
<body>
<br/>
<p>我一直都在等待1</p>
<p>我一直都在等待2</p>
<p>我一直都在等待3</p>
</body>
</html>

6.17 radiobutton  Jquery操作

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>radiobutton操作</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){

}
);
function getRdoValue(){
    if($("input:radio:checked").length>0){
    alert($("input:radio:checked").val());
    }
    }
    
function setBoy(){
    $("input[name=gender]").val([""]);
    
    }
function setGirl(){
    $("input[name=gender]").val([""]);
    
    }
</script>
<body>
<input name="gender" type="radio" value="" /><input name="gender" type="radio" value="" /><input type="button" value="获取radiobutton的值" onclick="getRdoValue()"/>
<input type="button" value="设置为男" onclick="setBoy()"/>
<input type="button" value="设置为男" onclick="setGirl()"/>
</body>
</html>

6.18 checkbox 操作 全选,反选,全不选问题

 反选可能你难理解一点,设置checked值为原值的反值,true的反值就是false

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>全选全不选反选</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
function SetAll(){
$("input[name=books]").attr("checked",true);    
    }
function SetFan(){
$("input[name=books]").each(function(
) {
    $(this).attr("checked",!$(this).attr("checked"));
});
    }
function SetNo(){
$("#ckList :checkbox").attr("checked",false);    
    }
</script>
<body>
<div id="ckList">
<input type="checkbox" name="books" value="sql基础练习"/>sql基础练习</br>
<input type="checkbox" name="books" value="sql入门进阶"/>sql入门进阶</br>
<input type="checkbox" name="books" value="sql中级"/>sql中级</br>
<input type="checkbox" name="books" value="sql风采"/>sql风采</br>
<input type="checkbox" name="books" value="sql我猜"/>sql我猜</br>
</div>
<div>
<input type="button" value="全选" onclick="SetAll()"/>
<input type="button" value="反选" onclick="SetFan()"/>
<input type="button" value="全不选" onclick="SetNo()"/>
</div>
</body>
</html>

6.19 事件初步了解   .hover事件,hover(移入事件,移出事件),bind,bind第一个参数,不一定要js自带的事件,例如不需要click,你也可以写pressed

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>事件</title>
</head>
<style type="text/css">
.overlight{
    background:url(../image/Button.png) no-repeat 100% 100%;
    color:white;
    90px;
    height:35px;
    border:0px;
    margin:0px;
    padding:0px;
    font-weight:bold;
    }
.leavelight{
    background:url(../image/Button.png) no-repeat  0% 0%;
    90px;
    height:35px;
    color:red;
        border:0px;
    margin:0px;
    padding:0px;
        border,margin,padding:0px;
    font-weight:bold;
    }
</style>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){
//以前是   元素.bind("click",function(){});   简写 元素.click(function(){});
$("#test1").bind("click",function(){
alert("bind 测试成功!");    /*你可以将click替换成其他事件*/
});

$("#test2").click(function(){
alert("bind 的简写形式测试成功!");    /*你可以将click替换成其他事件*/
});

$("#test3").hover(
function(){
$("#test3").attr("class","overlight");
},
function(){
$("#test3").attr("class","leavelight");
}
);

$("#test4").hover(
function(){
$(this).text("你来了");
},
function(){
$(this).text("你慢走");
}
);
});
</script>
<body>
<input name="test1" type="button" id="test1" value="测试bind方法"/>
<input name="test2" type="button" id="test2" value="测试bind方法简写形式"/>
<input name="test3" id="test3" type="button" style="cursor:pointer" class="leavelight" value="hover">
<p id="test4">你慢走!</p>
</body>
</html>

6.20  事件冒泡   stopPropagation()阻止

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>事件冒泡</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){

//本例在其他语言有共通之处,其他语言也有事件冒泡一说,例如wpf中的冒泡事件和隧道事件
$("#p1").click(function(e){alert("p1被点击了");e.stopPropagation()});
$("#a1").click(function(){alert("a1被点击了")});
$("#b1").click(function(){alert("b1被点击了")});
$("#tb1").click(function(){alert("tb1被点击了")});
$("#tr1").click(function(){alert("tr1被点击了")});
$("a").click(function(e){
alert("超链接失败!");
e.preventDefault();
});

//冒泡事件小范围会波及的它的父节点的同性质事件,同时的它的父节点也触发它的父父节点的同性质的事件,以此类推,范围有小变大,就像冒泡一样
//组织冒泡用  stopPropagation()    
});
</script>
<body>
<table>
  <tr id="tr1">
    <td id="a1">aaaaa</td>
    <td><table id="tb1">
        <tr >
          <td id="b1"><p id="p1">bbbbb</p></td>
          <td>cccccccc</td>
        </tr>
      </table></td>
  </tr>
</table>

<a href="http://www.baidu.com"/>阻止默认行为</a>
</body>
</html>

6.21 鼠标键盘事件略讲  e.target  通过此属性可获得事件源对象,e.pageX,e.pageY获得鼠标的位置,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>鼠标键盘事件</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){
//获得触发事件的元素
$("#div1").click(function(e){
var a=e.target;
alert(a.innerHTML);
});


//keyCode(键盘码)    charCode(ASC码)
$(document).mousemove(    //跟着鼠标走
function(e){
$("#div2").css("left",e.pageX).css("top",e.pageY);
}
);

});
</script>
<body>
<div  id="div1" style="140px">pppppppppppp</div>
<div id="div2" style="position:absolute"><img src="images/1.png" alt="确定"/></div>
</body>
</html>

6.22 e.pageX,e.PageY练习

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
//集合重新认识,假设是AJAX传过来的JSON数据
var dic={"images/a.png":["images/aa.png","杨洋疯狂C#平面图","25.98"],"images/b.png":["images/bb.png","杨洋疯狂C#立体","49.98"]};


$(
function(){


//attr新认识,你可以添加不存在的属性名,只为存一个临时数据,以便读取
$.each(dic,function(key,value){
//注意这里的value也是一个数组
var smallImg=$('<img src="'+key+'"/>');
smallImg.attr("imgSrc",value[0]);
smallImg.attr("imgName",value[1]);
smallImg.attr("imgPrice",value[2]);


//添加事件
smallImg.mouseover(function(e){
$("#detailImage").attr("src",$(this).attr("imgSrc"));
$("#title").text($(this).attr("imgName"));
$("#price").text($(this).attr("imgPrice"));
$("#details").css("left",e.pageX).css("top",e.pageY).css("display","block");
});



//添加此图片元素
$("body").append(smallImg);

});

});
</script>
<body>
<div style="position:absolute;display:none" id="details">
<img src="" id="detailImage"/>
<p id="title"></p>
<p id="price"></p>
</div>

</body>
</html>

6.23 基本动画 hide,show,更多的请参考手册学习

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>小型动画show,hide,toggle</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){
$("#hideButtonId").click(function(){
$("#baseHide").hide();  /*隐藏*/

});

$("#ahideButtonId").click(function(){
$("#baseHide").hide("slow");  /*动画隐藏    试着换成fast*/

});

$("#showButtonId").click(function(){
$("#baseHide").show();  /*显示*/

});

$("#ashowButtonId").click(function(){
$("#baseHide").show("slow");  /*动画显示*/

});

$("#toggleButtonId").click(function(){
$("#baseHide").toggle();    //隐藏,出现,来回切换
});


$("#atoggleButtonId").click(function(){
$("#baseHide").toggle("slow");    //隐藏,出现,来回切换
});




});
</script>
<body>
<div id="baseHide">
杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#杨洋疯狂C#
</div>
<input name="hideButton" id="hideButtonId" type="button" value="隐藏hide" />
<input name="ahideButton" id="ahideButtonId" type="button" value="动画隐藏hide" />
<input name="showButton" id="showButtonId" type="button" value="显示show" />
<input name="ashowButton" id="ashowButtonId" type="button" value="动画显示show" />
<input name="toggleButton" id="toggleButtonId" type="button" value="切换toggle" />
<input name="atoggleButton" id="atoggleButtonId" type="button" value="动画切换toggle" />
</body>
</html>

 

6.24  qq盒子效果,事件的人工触发

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>qq盒子according效果</title>
</head>
<style type="text/css">
#menu li{
        list-style:none;
        cursor:pointer;
    }
#menu{
    border:3px solid #900;
    background:url(images/styl%2011.jpg);
    100px;
    
    }
/*去点点*/
.childPanel{

    font-family:微软雅黑;
    text-align:left;
    100%;
    }
#menu li a{
text-decoration:none;
cursor:pointer;
font-size:12px;
color:white;

    }
.header{
    background:#999;
    }


</style>

<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){
//先创建一个如下的ul,li样式
//偶数行添加样式
$("#menu li:odd").addClass("childPanel");
//奇数行添加单击事件
$("#menu li:even").addClass("header").click(function(){
$(this).next("li.childPanel").show("fast").siblings("li.childPanel").hide("fast");
});


//到目前基本已经完成了
//触发单击事件
$("#menu li:first").click();
});
</script>


<body>
<ul id="menu">
<li>我的好友</li>
<li><a href="htp://www.baidu.com">阿花</a>
<br />
<a href="htp://www.baidu.com">阿牛</a>
<br />
<a href="htp://www.baidu.com">阿毛</a>
</li>

<li>大学同学</li>
<li><a href="htp://www.baidu.com">天子</a>
<br />
<a href="htp://www.baidu.com">秃子</a>
<br />
<a href="htp://www.baidu.com">房子</a>
</li>


<li>绿林老友</li>
<li><a href="htp://www.baidu.com">鬼见愁</a>
<br />
<a href="htp://www.baidu.com">兔仔鸡</a>
<br />
<a href="htp://www.baidu.com">老郢</a></li>


<li>陌生人</li>
<li><a href="htp://www.baidu.com">孩子</a>
<br />
<a href="htp://www.baidu.com">疯子</a>
<br />
<a href="htp://www.baidu.com">傻子</a></li>
</li>
</ul>

</body>
</html>

 6.25 Jquery Cookie

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>插件1--Cookie</title>
</head>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery.cookie.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){
    //加载上次登录保存的用户名
    if($.cookie("userName")){
        $("#txtUserNameID").val($.cookie("userName")); //我的不支持谷歌,ie,firefox测试通过
        }
    
$("#loginButtonID").click(function(){
if($("#loginButtonID").val().length>0){
    $.cookie("userName",$("#txtUserNameID").val()); //存进值,$.cookie(键,值)
    alert("登录成功!");
    /*$.cookie(A,B,C)        C这个第三个参数   {expires:7,path:'/,domain:baidu.com,secure:true'}    可以先不管,具体遇到再补习*/
}


});
});
</script>
<body>
<input name="txtUserName" id="txtUserNameID" type="text" />
<input name="btnLogin" type="button" id="loginButtonID" value="登录" />
</body>
</html>

6.26 Jquery UI介绍与初体验,tab和dialog

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JqueryUI初接触</title>
</head>
<!--把下载好的ui包解压后,development-bundle\themes\ui-darkness这个文件夹拷贝到项目下,引入ui-darkness/jquery-ui-1.8.20.custom.css这个样式,或者自己看着ui包解压后就有个案例,模仿着用吧-->
<link rel="stylesheet" type="text/css" href="ui-darkness/jquery-ui-1.8.20.custom.css"/>
<script type="text/javascript" src="js/jquery-1.7.2.js">
</script>
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript">
$(
function(){
    
//显示一个对话框,具体的用法,请参考下载好ui包里面的demo用法来提升自己
$("#mydialog").dialog();
$("#tabBookList").tabs();
});
</script>
<body>
<!--对话框-->
<div id="mydialog">确认删除吗?</div>

<!--tab框①创建个层,ul下的li代表tab的标题,每个标题href="#具体内容层对应的ID"-->
<div id="tabBookList" style="60%;height:500px">
<ul>
<li><a href="#a">电子计算机书籍</a></li>
<li><a href="#b">数据库书籍</a></li>
<li><a href="#c">热门推荐的书籍</a></li>

<!--建对应的内容层-->
<div id="a"><input name="" type="text" />电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表电子计算机书籍列表</div>
<div id="b">数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表数据库书籍列表</div>
<div id="c">热门推荐的书籍列表热门推荐的书籍列表热门推荐的书籍列表热门推荐的书籍列表热门推荐的书籍列表热门推荐的书籍列表热门推荐的书籍列表热门推荐的书籍列表热门推荐的书籍列表</div>
</ul>
</div>

</body>
</html>

 Jquery第一期下载地址: http://download.csdn.net/download/yangyanghaoran/4424796

八、 C# Winform篇

     

       8.1  跟鼠标属性相关的,主要是闪烁频率,双击间隔,鼠标键数等

         DllImport是导入外部dll,你只管输入DllImport,然后光标置入那里,按Shift+alt+F10即可导入命名空间,本例并不难,如果初次见到DllImport可能你很难理解,这个在C#winform中经常见,要习惯,有时候要播放声音,就可以这样,至于用法,本期不讲

[DllImport("winmm.dll", EntryPoint = "mciSendString")]
private static extern Int32 mciSendString(String lpstrCommand, String lpstrReturnString, Int32 uReturnLength, Int32 hwndCallback);

都很类似,要习惯的

 

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;
using System.Runtime.InteropServices;

namespace mainFrm
{
    public partial class form001 : Form
    {
        public form001()
        {
            InitializeComponent();
        }

        //用 [ ] 在一个方法或属性上叫做特性  attribute
        //导入一个类库
        [DllImport("user32", EntryPoint = "GetDoubleClickTime")] //指示要调用的DLL入口点的名称和序号,鼠标双击间隔
        public extern static int GetDoubleClickTime();

        [DllImport("user32", EntryPoint = "GetCaretBlinkTime")] //光标闪烁的频率
        public extern static int GetCaretBlinkTime();

        //GetSystemMetrics函数主要用来返回与windows环境相关的信息,43代表鼠标的键数
        [DllImport("user32", EntryPoint = "GetSystemMetrics")]
        public extern static int GetSystemMetrics(int intcount);


        private void form001_Load(object sender, EventArgs e)
        {
            //鼠标间隔
            lbldoubleClick.Text = GetDoubleClickTime().ToString() + "毫秒";
            //光标频率
            lblCaretBlink.Text = GetCaretBlinkTime().ToString() + "毫秒";

            //鼠标键数
            lblKeyCount.Text = GetSystemMetrics(43).ToString()+"";

            //设置此范围内光标为等待光标
            panel1.Cursor = Cursors.WaitCursor;

        }

        /// <summary>
        ///鼠标在窗体上按下时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void form001_MouseDown(object sender, MouseEventArgs e)
        {
            this.lblMouseLocation.Text = "(" + e.X + "," + e.Y + ")";
            if (e.Button == MouseButtons.Left)
            {
                rtbRecord.Text += DateTime.Now.ToString("hh时mm分ss秒") + "按下鼠标左键!\n";
                rtbRecord.Select(rtbRecord.TextLength, 0);
            }
            else if (e.Button == MouseButtons.Right)
            {
                rtbRecord.Text += DateTime.Now.ToString("hh时mm分ss秒") + "按下鼠标右键!\n";
                rtbRecord.Select(rtbRecord.TextLength, 0);
            }
            else if (e.Button == MouseButtons.Middle)
            {
                rtbRecord.Text += DateTime.Now.ToString("hh时mm分ss秒") + "按下鼠标中键!\n";
                rtbRecord.Select(rtbRecord.TextLength, 0);
            }
        }
    }
}

     8.2 截取系统消息和自定义静态cur 鼠标样式

           实现IMessageFilter接口,或者重写 本窗体的WndProc方法来截取windows消息,根据截取的消息的消息ID号,判断是什么消息,然后做出处理

/******************************************************   
FileName(文件名):  清新空气杨洋疯狂学习C#系列
Copyright (版权) (c)  2011-2012 杨洋疯狂学习C#
Writer(作者): 杨洋
create Date(创建日期): 2012-07-13
Rewriter(修改者): 杨洋
Rewrite Date(修改日期):2012-07-13
Impact(影响): 网上有一类叫  鼠标手势的软件,我不知道是不是截获windows消息做的
Main Content(Function Name、parameters、returns)(主要内容(函数名称、参数、返回值))
******************************************************/

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 mainFrm
{
    public partial class form002 : Form
    {
        public form002()
        {
            InitializeComponent();
        }
        //截取系统消息,有两种手段
        //①通过在Form中重写Control类的虚方法WncProc来截取Windows信息
        //②通过实现IMessageFilter接口来创建消息筛选器,从而截取Windows消息
        MessageFilter mf = new MessageFilter();


        //窗体加载一个消息筛选器
        private void form002_Load(object sender, EventArgs e)
        {
            ////添加消息筛选器以便在向目标传送 Windows 消息时监视这些消息
            Application.AddMessageFilter(mf);   //如果想查看鼠标替换后的样子,请先将这行代码注视
          
        }

        //从窗体中移除一个消息筛选器
        private void form002_FormClosing(object sender, FormClosingEventArgs e)
        {
            //从应用程序的消息泵移除一个消息筛选器
            Application.RemoveMessageFilter(mf);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Cursor = new Cursor(Environment.CurrentDirectory + @"\images\cursor\pen_il.cur");  //指定新的鼠标样子
        }


        ////方法一,重写WndProc虚方法,与方法二不可同时存在
        //protected override void WndProc(ref Message m)
        //{
        //    switch (m.Msg)//判断系统消息的ID号
        //    {
        //        case 513:
        //            MessageBox.Show("第一种方式单击了鼠标左键!", "系统信息");
        //            m.Result = (IntPtr)0;//为了响应消息处理而向 Windows 返回的值
        //            break;
        //        case 516:
        //            MessageBox.Show("第一种方式单击了鼠标右键!", "系统信息");
        //            m.Result = (IntPtr)0;//为了响应消息处理而向 Windows 返回的值
        //            break;
        //        default:
        //            base.WndProc(ref m);
        //            break;
        //    }
        //}

        //这里我把方法1注释掉了,如果用方法1来实现,只需要这一个方法就行了,如果用方法2,除了WndProc这个重写的方法不用写其他都要

        //关于Wnd 我自己记忆的方法就是   Window,我读也读window,proc我理解我进程process


    }

    //方法二,实现IMessageFilter接口,从而获得Windows消息,与方法一不可同时存在
    public class MessageFilter : IMessageFilter
    {
        public bool PreFilterMessage(ref Message message)
        {
            switch (message.Msg)//判断系统消息的ID号
            {
                case 513:
                    MessageBox.Show("第二种方式单击了鼠标左键!", "系统信息");
                    return true;
                case 516:
                    MessageBox.Show("第二种方式单击了鼠标右键!", "系统信息");
                    return true;
                default:
                    return false;
            }
        }

    }
}

     8.3 关于设置系统全局的鼠标图标,还有设置本窗体的动态 ani格式的鼠标图案,例如游戏中的鼠标图标都是很个性化的

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;
using System.Runtime.InteropServices;
using System.Reflection;

namespace mainFrm
{
    public partial class Form003 : Form
    {
        public Form003()
        {
            InitializeComponent();
        }

        [DllImport("user32.dll")]
        public static extern IntPtr LoadCursorFromFile(string fileName);
private void button1_Click(object sender, EventArgs e)
        {
            #region 引入这段代码,加上LoadCursorFromFile这个方法,就可以自定义动态鼠标
            Cursor myCursor = new Cursor(Cursor.Current.Handle);
            IntPtr colorCursorHandle = LoadCursorFromFile("0081.ani");//鼠标图标路径
            myCursor.GetType().InvokeMember("handle", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetField, null, myCursor, new object[] { colorCursorHandle });
            this.Cursor = myCursor; 
            #endregion
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.Default;
        }


        //替换系统默认的鼠标图案
        [DllImport("user32", EntryPoint = "LoadCursorFromFile")]
        public static extern int IntLoadCursorFromFile(string lpFileName);

        [DllImport("user32", EntryPoint = "SetSystemCursor")]
        public static extern void SetSystemCursor(int hcur, int i);


        //已知 OCR_HAND标识符的 值为32649
        const int OCR_HAND = 32649;

        private void button3_Click(object sender, EventArgs e)
        {
            //新的图标地址,请事先把你的图标放在C:\WINDOWS\Cursors\下,然后再设置
            string handpath = @"C:\WINDOWS\Cursors\wait_r.cur";
            //通过IntLoadCursorFromFile(新的图片路径)将图片转换成数字
            int num = IntLoadCursorFromFile(handpath);
            //存值
            SetSystemCursor(num, OCR_HAND);

            //如果没效果,请移到能够超链接的地方试试,不仅在本窗口,在系统的其他地方也行
        }

        private void button4_Click(object sender, EventArgs e)
        {

            int num = IntLoadCursorFromFile(@"C:\WINDOWS\Cursors\arrow_i.cur");
            //存值
            SetSystemCursor(num, 32512);  //32512代表箭头
        }
    }
}

 

     8.4 限制鼠标移动范围  Cursor.Clip 

        本人试过,如果是子窗体化显示,会有问题,鼠标可以逃脱本窗体的范围;如果正常显示窗体,就没问题

        

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 mainFrm
{
    public partial class Form004 : Form
    {
        public Form004()
        {
            InitializeComponent();
        }


        //Cursor内有很多属性,有个叫Clip的属性用来限制鼠标移动范围,   ,Current用来获得当前鼠标Cursor对象
        private void button1_Click(object sender, EventArgs e)
        {
            this.Cursor = new Cursor(Cursor.Current.Handle);
            Cursor.Position = new Point(Cursor.Position.X,Cursor.Position.Y);   //获取或者设置光标位置
            Cursor.Clip = new Rectangle(this.Location, this.Size); //Rectangle 类型很重要,后面常见的有四个参数,(起始x坐标,起始Y坐标,宽度,高度)
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //获取屏幕信息
            Screen[] screen = Screen.AllScreens;  //因为现在有多屏显示操作
            this.Cursor = new Cursor(Cursor.Current.Handle);
            Cursor.Clip = screen[0].Bounds;         

        }
    }
}

       

   8.5 播放器上的鼠标,鼠标停留停留在播放器界面上,不移动的话,会自动隐藏      user32.dll 的  ShowCursor函数

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;
using System.Runtime.InteropServices;

namespace mainFrm
{
    public partial class Form005 : Form
    {
        public Form005()
        {
            InitializeComponent();
        }
        //本功能在播放器上经常看到
        [DllImport("user32", EntryPoint = "ShowCursor")]
        public extern static bool ShowCursor(bool bShow);

        //隐藏
        private void button1_Click(object sender, EventArgs e)
        {
            ShowCursor(false);
        }
        //显示
        private void button2_Click(object sender, EventArgs e)
        {
            ShowCursor(true);
        }

        private void Form005_Load(object sender, EventArgs e)
        {

        }
    }
}

 

   8.6 SendKey类的使用,该类我感觉就像用代码去按某个键那样,具体用法可参考msdn

    我自己摘抄了一个MSDN的Sendkey的其他参数列表 ,不过有点乱

     http://www.cnblogs.com/Fresh-Air/archive/2012/05/12/2497653.html

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 mainFrm
{
    public partial class form006 : Form
    {
        public form006()
        {
            InitializeComponent();
        }

        private void form006_DoubleClick(object sender, EventArgs e)
        {
            SendKeys.Send("{tab}");
        }
    }
}

   8.7  简单的文本框文字的拖放,不怎么样主要是思想

/******************************************************   
FileName(文件名):  清新空气杨洋疯狂学习C#系列
Copyright (版权) (c)  2011-2012 杨洋疯狂学习C#
Writer(作者): 杨洋
create Date(创建日期): 2012-07-13
Rewriter(修改者): 杨洋
Rewrite Date(修改日期):2012-07-13
Impact(影响): 本例子主要用到了TextBox控件的DoDragDrop方法,DragEventArgs类的Data属性和Effect属性以及DataObject类的GetData方法
 *                      DragEventArgs类包含与所有拖放事件(DragEnter、DragLeave,DragOver和Drop)相关的参数,Data属性用来获取一个数据对象,该对象包含与对应拖动事件关联的数据
Main Content(Function Name、parameters、returns)(主要内容(函数名称、参数、返回值))
******************************************************/

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 mainFrm
{
    public partial class form007 : Form
    {
        public form007()
        {
            InitializeComponent();
        }

        private void form007_Load(object sender, EventArgs e)
        {

        }
        //第一步
        private void textBox1_MouseMove(object sender, MouseEventArgs e)
        {
            //写在移动事件里,移动的时候判断鼠标左键是否按下
            if (e.Button == MouseButtons.Left)
            {
                //可以设置鼠标样式
                //this.Cursor = new Cursor("新地址");
                DragDropEffects dropEffect = this.textBox1.DoDragDrop(this.textBox1.Text, DragDropEffects.Copy );      //DoDragDrop开始进行拖放操作  
            }
        }


        //第二步,当有东西被拖着,经过文本框2时的事件,将鼠标图标换成可复制的,请讲文本框2的AllowDrop属性设为true
        private void textBox2_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Copy;   //到目前为止看看是不是有点小效果了,但是数据还没有过来,没事,第三步
        }


        //在文本框2上拖拽结束,释放鼠标左键时,也就是我们赋值的时候
        private void textBox2_DragDrop(object sender, DragEventArgs e)
        {
            //来吧,最后一步了
            textBox2.Text = e.Data.GetData(DataFormats.Text).ToString();    //DataFormat中含有很多数据格式,我选了个文本

        }

        //本次也是以后拖放学习的基本思路


        //关于文本框在啰嗦几个吧
        //1.    AcceptReturn属性    如果是true的话,此文本框内可以按回车键,表示换行
    }
}

   8.8  网上有一类叫 教鞭的软件,可以在屏幕上画东西教学使用,这里只是提供一个简单的思路,在窗体上画画

/******************************************************   
FileName(文件名):  清新空气杨洋疯狂学习C#系列
Copyright (版权) (c)  2011-2012 杨洋疯狂学习C#
Writer(作者): 杨洋
create Date(创建日期): 2012-07-13
Rewriter(修改者): 杨洋
Rewrite Date(修改日期):2012-07-13
Impact(影响): 网上有一类叫  教鞭的软件,可以在屏幕上画东西教学使用,这里只是提供一个简单的思路
 * 我觉得那个教鞭就是,先截图,然后当此窗体的背景,然后窗体最大化,然后你们可以绘图了
Main Content(Function Name、parameters、returns)(主要内容(函数名称、参数、返回值))
******************************************************/
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 mainFrm
{
    public partial class Form008 : Form
    {
        public Form008()           //此处为窗体的构造函数,我理解是最先执行的地方,窗体没显示就执行了
        {
            InitializeComponent();

            //初始化信息
            pen = new Pen(Color.FromName("black"));//始末画笔 ,当然你可以提供颜色供用户选了
            graphics = CreateGraphics();//初始画板
        }


      public  bool isPressed = true;  //判断在鼠标移动的时候是否鼠标左键是否按下
        public Point lastPoint = Point.Empty;//定义绘图开始点
        public Pen pen;//声明画笔
        public Graphics graphics;//声明绘图对象

        //画东西,你的鼠标是不是要不停的移动,当然选择这个事件了,思路和上一个拖放文本很像
        private void Form008_MouseMove(object sender, MouseEventArgs e)
        {
            if (lastPoint.Equals(Point.Empty))//判断绘图开始点是否为空
            {
                lastPoint = new Point(e.X, e.Y);//记录鼠标当前位置
            }
            if (isPressed)//开始绘图
            {
                Point cruuPoint = new Point(e.X, e.Y);//获取鼠标当前位置
                graphics.DrawLine(pen, cruuPoint, lastPoint);//绘图
            }
            lastPoint = new Point(e.X, e.Y);//记录鼠标当前位置
        }

        private void Form008_MouseDown(object sender, MouseEventArgs e)
        {
            isPressed = true;
        }

        private void Form008_MouseUp(object sender, MouseEventArgs e)
        {
            isPressed = false;
        }



    }
}

   8.9 用代码将鼠标的指针移动,单击,或者其他的,不是人工的,很想按键精灵,网上有一种工具,记住你的操作步骤,然后它可以照你刚才的操作重复执行,本次用到了mouse_event   API函数

/******************************************************   
FileName(文件名):  清新空气杨洋疯狂学习C#系列
Copyright (版权) (c)  2011-2012 杨洋疯狂学习C#
Writer(作者): 杨洋
create Date(创建日期): 2012-07-13
Rewriter(修改者): 杨洋
Rewrite Date(修改日期):2012-07-13
Impact(影响): 网上有一类叫  按键精灵的东西,记住你的按键,重复你的动作,本例子只是让鼠标自动上移而已
Main Content(Function Name、parameters、returns)(主要内容(函数名称、参数、返回值))
******************************************************/
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;
using System.Runtime.InteropServices;

namespace mainFrm
{
    public partial class Form009 : Form
    {
        public Form009()
        {
            InitializeComponent();
        }

//本例主要用到了API函数mouse_event [DllImport("user32.dll")] public static extern int mouse_event(int dwFlags,int dx,int dy,int dwData,int dwExtraInfo); //列出几个 const int MOUSEEVENTF_MOVE = 0x0001; const int MOUSEEVENTF_LEFTDOWN = 0x0002; const int MOUSEEVENTF_LEFTUP = 0x0004; private void btnMouseUp_Click(object sender, EventArgs e) { mouse_event(MOUSEEVENTF_MOVE, -80, -20, 0, 0);//模拟移动鼠标  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//第一次鼠标左键按下 mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//第一次鼠标左键松开 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//第二次鼠标左键按下 mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//第二次鼠标左键松开 //当然你可以自动触发,鼠标任意动作了 //这里先移动,然后双击停下来的位置 //mouse_event 第一个参数请参考表格 } private void Form009_DoubleClick(object sender, EventArgs e) { //MessageBox.Show("您的鼠标发生了自动上移,并双击了窗体一次!"); } } }

   8.10 鼠标透过窗体,顺便学习,window桌面右下角有小图标,并且右击会有个性化的菜单的制作

  

/******************************************************   
FileName(文件名):  清新空气杨洋疯狂学习C#系列
Copyright (版权) (c)  2011-2012 杨洋疯狂学习C#
Writer(作者): 杨洋
create Date(创建日期): 2012-07-13
Rewriter(修改者): 杨洋
Rewrite Date(修改日期):2012-07-13
Impact(影响): 
 * ①新建窗体,拖一个 notifyIcon   和   ContextMenuStrip 控件,指定notifyIcon的ico图标和它的菜单,即ContextMenuStrip这个快捷菜单
 * ② 放入一些需要         欲取回的信息的   nIndex的值
 * ③ 放入   SetWindowLong 和 GetWindowLong   两个api函数
Main Content(Function Name、parameters、returns)(主要内容(函数名称、参数、返回值))
******************************************************/
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;
using System.Runtime.InteropServices;

namespace mainFrm
{
    public partial class Form010 : Form
    {
        public Form010()
        {
            InitializeComponent();

            //指定小图标的头像和右键菜单,用NotifyIcon控件可以做出QQ最小化的那种效果,当然本例主要不是做这个
            this.ntfMenu.Icon = new Icon(@"images\2.ico");
            this.ntfMenu.ContextMenuStrip = this.cmsBackMenu;
            //使窗体最大化,且无边框
            this.WindowState = FormWindowState.Maximized;
            this.FormBorderStyle = FormBorderStyle.None;
            //窗体透明度设置60%
            this.Opacity = 0.6;     //如果对于陌生的属性不认识,不知道怎么赋值时,那么将鼠标移动到此属性上,vs会有提示的,看它需要什么类型的,给它就行了

        }


        #region 基本常量   第一步
        private const uint WS_EX_LAYERED = 0x80000;
        private const int WS_EX_TRANSPARENT = 0x20;
        private const int GWL_EXSTYLE = (-20);
        private string tsmiName = "";//记录当前操作的类型
        #endregion

        #region 第二步
        #region 在窗口结构中为指定的窗口设置信息
        /// <summary>
        /// 在窗口结构中为指定的窗口设置信息
        /// </summary>
        /// <param name="hwnd">欲为其取得信息的窗口的句柄</param>
        /// <param name="nIndex">欲取回的信息</param>
        /// <param name="dwNewLong">由nIndex指定的窗口信息的新值</param>
        /// <returns></returns>
        [DllImport("user32", EntryPoint = "SetWindowLong")]
        private static extern uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong);
        #endregion

        #region 从指定窗口的结构中取得信息
        /// <summary>
        /// 从指定窗口的结构中取得信息
        /// </summary>
        /// <param name="hwnd">欲为其获取信息的窗口的句柄</param>
        /// <param name="nIndex">欲取回的信息</param>
        /// <returns></returns>
        [DllImport("user32", EntryPoint = "GetWindowLong")]
        private static extern uint GetWindowLong(IntPtr hwnd, int nIndex);
        #endregion
        #endregion

        #region 第三步,调用那两个函数,使窗口有鼠标穿透功能
        /// <summary>
        /// 使窗口有鼠标穿透功能
        /// </summary>
        private void CanPenetrate()
        {
            uint intExTemp = GetWindowLong(this.Handle, GWL_EXSTYLE);
            uint oldGWLEx = SetWindowLong(this.Handle, GWL_EXSTYLE, WS_EX_TRANSPARENT | WS_EX_LAYERED);
        }

        //窗体初始化时触发事件
        private void Form010_Load(object sender, EventArgs e)
        {
            this.TopMost = true;//使窗体始终在其它窗体之上
            this.ShowInTaskbar = false;//窗体的缩略图不出现在Windows任务栏中
            CanPenetrate();   //开始使鼠标透过窗体
        }
        #endregion

        #region 第四步,写菜单的事件,当然菜单上有很多要单击的菜单项,我们不可能为每个菜单项都写吧,此处是winform最常用的一个写法,必须弄懂,在winform中,同一类型的对象,可以同时调用同一个事件,为了区分是哪个对象,有时候就根据某些对象的我们在界面端设置的tag值作为判断或者作为赋值依据,总归有用
        #region 设置颜色和透明度的状态
        /// <summary>
        /// 设置颜色和透明度的状态
        /// </summary>
        private void SetEstate(Form Frm, object sender)
        {
            tsmiName = ((ToolStripMenuItem)sender).Name;            //这里的sender   是事件源,就像我们说过的 jquery篇里面的 e.target,不过这里我们需要将sender强制转换成ToolStripMenuItem类型的,不是隐式转换的,转换成功后,我们就可以调用事件源里面的属性或者方法了
           //关于转换,下面还有方法比较好,也建议这么用
         
            //   ToolStripMenuItem tsmiTemp = sender as ToolStripMenuItem;//这里如果转换失败,tsmiTemp会是null的,但不会报异常
            //   if(tsmiTemp!=null){
            //   ...............
            //   }
            
            //这里根据菜单项对象的名称判断的,然后动态选择执行哪些代码
            
            string Tem_Str = tsmiName;
            if (tsmiName.IndexOf('_') >= 0)
            {
                tsmiName = Tem_Str.Substring(0, Tem_Str.IndexOf('_'));
            }

            switch (tsmiName)
            {
                case "ToolColor":          //如果是设置颜色一类的
                    {
                        Color Tem_Color = Color.Gainsboro;
                        switch (Convert.ToInt32(((ToolStripMenuItem)sender).Tag.ToString()))
                        {
                            case 1: Tem_Color = Color.Gainsboro; break;
                            case 2: Tem_Color = Color.DarkOrchid; break;
                            case 3: Tem_Color = Color.RoyalBlue; break;
                            case 4: Tem_Color = Color.Gold; break;
                            case 5: Tem_Color = Color.LightGreen; break;
                        }
                        Frm.BackColor = Tem_Color;
                        break;
                    }
                case "ToolClarity":      //如果是设置透明度
                    {
                        double Tem_Double = 0.0;
                        switch (Convert.ToInt32(((ToolStripMenuItem)sender).Tag.ToString()))
                        {
                            case 1: Tem_Double = 0.1; break;
                            case 2: Tem_Double = 0.2; break;
                            case 3: Tem_Double = 0.3; break;
                            case 4: Tem_Double = 0.4; break;
                            case 5: Tem_Double = 0.5; break;
                            case 6: Tem_Double = 0.6; break;
                            case 7: Tem_Double = 0.7; break;
                            case 8: Tem_Double = 0.8; break;
                            case 9: Tem_Double = 0.9; break;

                        }
                        Frm.Opacity = Tem_Double;
                        break;
                    }
                case "ToolAcquiescence":
                    {
                        Frm.BackColor = Color.Gainsboro;
                        Frm.Opacity = 0.6;
                        break;
                    }
                case "ToolClose":
                    {
                        Close();
                        break;
                    }

            }
        }
        #endregion

        #endregion


        #region 第五步,写个方法,调用这里面的方法,并且在界面那一端,将所有的要单击的menu中的菜单项的click事件都指向这个事件
        private void ToolClarity_10_Click(object sender, EventArgs e)
        {
            SetEstate(this, sender);
        }
        #endregion
        /// <summary>
        /// 关闭窗体
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ToolClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

   8.11 无边框窗体可以被拖动+右键菜单

 我的其中一个学习方法: 不要死记硬背,记住需要哪些代码,怎么用即可,这些代码我保存成文档了,这个文档我的存放位置就行了,这就导致了,有的我会写,但是不给我网络,不给我看书,我就记不起来了,立即叫你口述就完了。

/******************************************************   
FileName(文件名):  清新空气杨洋疯狂学习C#系列
Copyright (版权) (c)  2011-2012 杨洋疯狂学习C#
Writer(作者): 杨洋
create Date(创建日期): 2012-07-13
Rewriter(修改者): 杨洋
Rewrite Date(修改日期):2012-07-13
Impact(影响): 右键菜单:①拖一个ContextMenuStrip控件,界面上单击窗体,找到ContextMenuStrip属性,右边下拉框选择一个菜单就行了
 * ②后台指定
Main Content(Function Name、parameters、returns)(主要内容(函数名称、参数、返回值))
******************************************************/
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;
using System.Runtime.InteropServices;

namespace mainFrm
{
    public partial class Form011 : Form
    {
        public Form011()
        {
            InitializeComponent();
            this.ContextMenuStrip = this.contextMenuStrip1;
        }

        #region 第一步
        [DllImport("user32.dll")]
        public static extern bool ReleaseCapture();//用来释放被当前线程中某个窗口捕获的光标
        [DllImport("user32.dll")]
        public static extern bool SendMessage(IntPtr hwdn, int wMsg, int mParam, int lParam);
        #region 本程序中需要声明的变量
        public const int WM_SYSCOMMAND = 0x0112;//该变量表示将向Windows发送的消息类型
        public const int SC_MOVE = 0xF010;//该变量表示发送消息的附加消息
        public const int HTCAPTION = 0x0002;//该变量表示发送消息的附加消息
        #endregion
   
        #endregion

        #region 第二步 在窗体的鼠标按下事件中放入以下这段代码即可
        //向指定的窗体发送Windows消息
        private void Form011cs_MouseDown(object sender, MouseEventArgs e)
        {
            ReleaseCapture();//用来释放被当前线程中某个窗口捕获的光标
            SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);//向Windows发送拖动窗体的消息
        }
        #endregion

        private void 关闭ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

winform篇下载地址:http://download.csdn.net/detail/yangyanghaoran/4427076

待编写的...

   8.11钩子的安装和释放技术和系统热键的接触和屏蔽技术

   8.12 鼠标设置器,就是类似于window控制面板中的鼠标那一项的东东。

 

十、 C# .net框架篇

          --------------------------------------------------------SubSonic篇----------------------------------------------------------------------------------

         SubSnoic 框架入门到提高(1)---全程记录

         SubSnoic 框架入门到提高(2)---全程记录

         SubSnoic 框架入门到提高(3)---全程记录

         SubSnoic 框架入门到提高(4)---全程记录

 

更正一下错误:   &逻辑判断符号,先执行两侧表达式,再判断;&&先执行左侧,再判断,需要时再执行右侧表达式 ,同理|  和  || 一样的道理

 

 

原文地址:https://www.cnblogs.com/AaronYang/p/2544097.html