﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-kiler</title><link>http://www.cnblogs.com/kiler/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 08 Sep 2008 15:33:09 GMT</lastBuildDate><pubDate>Mon, 08 Sep 2008 15:33:09 GMT</pubDate><ttl>60</ttl><item><title>一个切换笔记本上网设置的小工具（附代码）</title><link>http://www.cnblogs.com/kiler/archive/2008/05/04/1181100.html</link><dc:creator>kiler</dc:creator><author>kiler</author><pubDate>Sun, 04 May 2008 00:56:00 GMT</pubDate><guid>http://www.cnblogs.com/kiler/archive/2008/05/04/1181100.html</guid><wfw:comment>http://www.cnblogs.com/kiler/comments/1181100.html</wfw:comment><comments>http://www.cnblogs.com/kiler/archive/2008/05/04/1181100.html#Feedback</comments><slash:comments>45</slash:comments><wfw:commentRss>http://www.cnblogs.com/kiler/comments/commentRss/1181100.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kiler/services/trackbacks/1181100.html</trackback:ping><description><![CDATA[现在基本带着笔记本上班，由于公司上网环境和家里上网环境总是不一样，所以每天上网前最麻烦的事就是要更改上网配置了，<br />
家里上网还好，所有设置都是自动就完事，公司的就麻烦了，又是设置IP，又是设置DNS，IE还要设置代理，麻烦死了,身为一个程序员，<br />
怎么能老是做这种无聊的体力活呢，索性用vs2005写了一个winform的IP切换的工具。<br />
界面如下：<br />
<img height="516" alt="" src="http://www.cnblogs.com/images/cnblogs_com/kiler/networkswtchpre1.gif" width="552" border="0" /><br />
使用很简单，默认提供6个配置选项，设置好以后，单击应用就可以了。<br />
<br />
点击上面的保存所有配置按钮会将当前所有的配置选项保存下来。<br />
<br />
<br />
代码方面，技术含量不是很高，懒得讲了。<br />
<br />
<br />
<br />
<br />
附一个源代码在下面，有兴趣的自己拿去研究吧，要是有什么改进，记得发回一份给我就可以了。<br />
程序执行文件：<font face="Verdana">http://www.cnblogs.com/Files/kiler/NetworkSwitch.7z<br />
</font>程序源代码：<font face="Verdana">http://www.cnblogs.com/Files/kiler/NetworkSwitchSource.7z</font><br />
程序运行以后会在运行目录下面生成一个<font face="Verdana">NetworkAdapterSetting.dat文件，用来保存配置，不要删除。<br />
</font><br />
<br />
<font face="Verdana">昨晚做了点小的修改，把DNS写成DSN的错误修正了一下，程序和源代码也更新了一下。</font>
<img src ="http://www.cnblogs.com/kiler/aggbug/1181100.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42153/" target="_blank">[新闻]淘宝与微软总部达成首次合作 Silverlight加入店铺</a>]]></description></item><item><title>Visual Studio 2008 SDK Version 和Microsoft Visual Studio 2008 Shell发布了</title><link>http://www.cnblogs.com/kiler/archive/2007/11/22/968082.html</link><dc:creator>kiler</dc:creator><author>kiler</author><pubDate>Thu, 22 Nov 2007 01:14:00 GMT</pubDate><guid>http://www.cnblogs.com/kiler/archive/2007/11/22/968082.html</guid><wfw:comment>http://www.cnblogs.com/kiler/comments/968082.html</wfw:comment><comments>http://www.cnblogs.com/kiler/archive/2007/11/22/968082.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnblogs.com/kiler/comments/commentRss/968082.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kiler/services/trackbacks/968082.html</trackback:ping><description><![CDATA[继Visual Studio 2008 RTM 不久后，微软提供了Visual Studio 2008 SDK Version 1.0的下载。提供各种工具、文档、示例，以便用户为Visual Studio 2008设计、开发、测试和部署扩展，并在Visual Studio 2008 Shell基础上创建自己的工具环境。<br />
<br />
Visual Studio 2008 SDK 的主要特征为：<br />
1、Visual Studio Shell的开发支持<br />
2、领域特定语言(DSL)工具增强<br />
3、C++,、C#&nbsp;、 Visual Basic 的开发与测试支持<br />
4、支持Vista<br />
5、用于Toolbox控件、集成开发环境(IDE)、领域特定语言(DSL)、Team Foundation Server扩展、数据设计师扩展等各个方面的代码示例和文档。<br />
<br />
系统要求：<br />
1、Windows Server 2003; Windows Vista; Windows XP<br />
2、必须安装VS 2008的标准版本或更高版本，而VS 2008 Express不支持。<br />
<br />
下载地址<br />
<br />
内容页面：<a style="top: 1px" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=30402623-93ca-479a-867c-04dc45164f5b&amp;amp;amp;DisplayLang=en">点解查看</a><br />
直接下载：<a style="top: 1px" href="http://download.microsoft.com/download/5/b/3/5b3f9acf-44d2-429c-a4dc-09ea69b60c18/VsSDK_sfx.exe">Visual Studio 2008 SDK Version 1.0</a>&nbsp; 大小：96.5M<br />
<br />
<font face="Courier New">Visual Studio 2008 Shell也发布了</font><br />
<br />
整合模式<br />
<font face="Courier New"><font face="Courier New"><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=40646580-97FA-4698-B65F-620D4B4B1ED7&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?FamilyId=40646580-97FA-4698-B65F-620D4B4B1ED7&amp;displaylang=en</a></font></font><br />
孤立模式<br />
<font face="Courier New"><font face="Courier New"><font face="Courier New">http://www.microsoft.com/downloads/details.aspx?FamilyId=ACA38719-F449-4937-9BAC-45A9F8A73822&amp;displaylang=en<br />
<br />
以后可以考虑用<font face="Courier New">Visual Studio 2008 Shell</font>来做应用程序了，不知道复杂不。</font></font></font> <br />
<br />
昨晚刚看了一下，<font face="Courier New">Visual Studio 2008 Shell孤立模式暂时支持vc++2008，看来还的等等了。</font>
<img src ="http://www.cnblogs.com/kiler/aggbug/968082.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42151/" target="_blank">[新闻]苹果9日发布iTunes 8、iPhone 2.1和第四代iPod Nano</a>]]></description></item><item><title>【转】DataGridView新特色(vs2005)</title><link>http://www.cnblogs.com/kiler/archive/2007/07/11/814550.html</link><dc:creator>kiler</dc:creator><author>kiler</author><pubDate>Wed, 11 Jul 2007 11:49:00 GMT</pubDate><guid>http://www.cnblogs.com/kiler/archive/2007/07/11/814550.html</guid><wfw:comment>http://www.cnblogs.com/kiler/comments/814550.html</wfw:comment><comments>http://www.cnblogs.com/kiler/archive/2007/07/11/814550.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/kiler/comments/commentRss/814550.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kiler/services/trackbacks/814550.html</trackback:ping><description><![CDATA[<div class=cnt>
<div align=left>
<div align=left><strong>1、自定义列</strong></div>
<div align=left>&nbsp;&nbsp; Customize Cells and Columns in the Windows Forms DataGridView Control by Extending Their </div>
<div align=left>&nbsp;&nbsp;&nbsp; Behavior and Appearance </div>
<div align=left>&nbsp;&nbsp;&nbsp; Host Controls in Windows Forms DataGridView Cells </div>
<div align=left>&nbsp;&nbsp;&nbsp; 继承 DataGridViewTextBoxCell 类生成新的Cell类，然后再继承 DataGridViewColumn 生成新的Column类，并指定</div>
<div align=left>&nbsp;&nbsp;&nbsp; CellTemplate为新的Cell类。新生成的Column便可以增加到DataGridView中去。</div>
<div align=left><strong>2、自动适应列宽</strong></div>
<div align=left><strong>&nbsp;&nbsp;&nbsp;</strong> Programmatically Resize Cells to Fit Content in the Windows Forms DataGridView Control </div>
<div align=left>&nbsp;&nbsp;&nbsp; Samples：</div>
<div align=left>&nbsp;&nbsp;&nbsp; DataGridView.AutoSizeColumns(</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataGridViewAutoSizeColumnCriteria.HeaderAndDisplayedRows);</div>
<div align=left>&nbsp;&nbsp;&nbsp; DataGridView.AutoSizeColumn(</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataGridViewAutoSizeColumnCriteria.HeaderOnly,</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2, false);</div>
<div align=left>&nbsp;&nbsp;&nbsp; DataGridView.AutoSizeRow(</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataGridViewAutoSizeRowCriteria.Columns,</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2, false);</div>
<div align=left>&nbsp;&nbsp;&nbsp; DataGridView.AutoSizeRows(</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataGridViewAutoSizeRowCriteria.HeaderAndColumns,</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, dataGridView1.Rows.Count, false);</div>
<div align=left><strong>3、可以绑定并显示对象</strong></div>
<div align=left><strong>&nbsp;&nbsp;&nbsp;</strong> Bind Objects to Windows Forms DataGridView Controls </div>
<div align=left><strong>4、可以改变表格线条风格</strong></div>
<div align=left><strong>&nbsp;&nbsp;&nbsp;</strong> Change the Border and Gridline Styles in the Windows Forms DataGridView Control </div>
<div align=left>&nbsp;&nbsp;&nbsp; Samples:</div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.GridColor = Color.BlueViolet;</div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.BorderStyle = BorderStyle.Fixed3D;</div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;</div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;</div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;</div>
<div align=left><strong>5、动态改变列是否显示，和动态改变列的显示顺序</strong></div>
<div align=left><strong>&nbsp;&nbsp;&nbsp;</strong> Change the Order of the Columns in the Windows Forms DataGridView Control </div>
<div align=left>&nbsp;&nbsp;&nbsp; Samples：</div>
<div align=left>&nbsp;&nbsp;&nbsp; customersDataGridView.Columns["CustomerID"].Visible = false;</div>
<div align=left>&nbsp;&nbsp;&nbsp; customersDataGridView.Columns["ContactName"].DisplayIndex = 0;</div>
<div align=left>&nbsp;&nbsp;&nbsp; customersDataGridView.Columns["ContactTitle"].DisplayIndex = 1;</div>
<div align=left>&nbsp;&nbsp;&nbsp; customersDataGridView.Columns["City"].DisplayIndex = 2;</div>
<div align=left>&nbsp;&nbsp;&nbsp; customersDataGridView.Columns["Country"].DisplayIndex = 3;</div>
<div align=left>&nbsp;&nbsp;&nbsp; customersDataGridView.Columns["CompanyName"].DisplayIndex = 4;</div>
<div align=left><strong>6、可以在列中显示图像</strong></div>
<div align=left><strong>&nbsp;&nbsp;</strong>&nbsp; Display Images in Cells of the Windows Forms DataGridView Control </div>
<div align=left>&nbsp;&nbsp;&nbsp; Samples：</div>
<div align=left>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Icon treeIcon = new Icon(this.GetType(), "tree.ico");</div>
<div align=left>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataGridViewImageColumn iconColumn = new DataGridViewImageColumn ();</div>
<div align=left>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconColumn.Image = treeIcon.ToBitmap();</div>
<div align=left>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconColumn.Name = "Tree";</div>
<div align=left>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconColumn.HeaderText = "Nice tree";</div>
<div align=left>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataGridView1.Columns.Insert(2, iconColumn); </div>
<div align=left><strong>7、格式化显示内容:</strong></div>
<div align=left><strong>&nbsp;</strong>&nbsp;&nbsp; Format Data in the Windows Forms DataGridView Control </div>
<div align=left>&nbsp;&nbsp;&nbsp; Samples:</div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.Columns["UnitPrice"].DefaultCellStyle.Format = "c";</div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.Columns["ShipDate"].DefaultCellStyle.Format = "d";</div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.DefaultCellStyle.NullValue = "no entry";</div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.DefaultCellStyle.WrapMode = DataGridViewWrapMode.Wrap;</div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.Columns["CustomerName"].DefaultCellStyle.Alignment = </div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DataGridViewContentAlignment.MiddleRight;</div>
<div align=left>&nbsp;&nbsp;&nbsp; </div>
<div align=left><strong>8、在拖动列的滚动条时可以将指定的列冻结</strong></div>
<div align=left><strong>&nbsp;&nbsp;</strong>&nbsp; Freeze Columns in the Windows Forms DataGridView Control </div>
<div align=left>&nbsp;&nbsp;&nbsp; Samples：将指定列及以前的列固定不动</div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.Columns["AddToCartButton"].Frozen = true;</div>
<div align=left><strong>9、获取选择的单元格,行,列</strong></div>
<div align=left><strong>&nbsp;&nbsp;</strong>&nbsp; Get the Selected Cells, Rows, and Columns in the Windows Forms DataGridView Control </div>
<div align=left>&nbsp;&nbsp;&nbsp; Samples:</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 见msdn。</div>
<div align=left><strong>10、显示录入时出现的错误信息</strong></div>
<div align=left><strong>&nbsp;&nbsp;&nbsp;</strong> Handle Errors that Occur During Data Entry in the Windows Forms DataGridView Control </div>
<div align=left>&nbsp;&nbsp;&nbsp; Samples：</div>
<div align=left>&nbsp;&nbsp;&nbsp; private void dataGridView1_DataError(object sender, </div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataGridViewDataErrorEventArgs e) </div>
<div align=left>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // If the data source raises an exception when a cell value is </div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // commited, display an error message.</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (e.Exception != null &amp;&amp; </div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.Context == DataGridViewDataErrorContext.Commit)</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show("CustomerID value must be unique.");</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</div>
<div align=left>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</div>
<div align=left><strong>11、大数据量显示采用Virtual Mode </strong></div>
<div align=left>&nbsp;&nbsp;&nbsp; Implement Virtual Mode in the Windows Forms DataGridView Control </div>
<div align=left><strong>12、设置指定的列只读</strong></div>
<div align=left><strong>&nbsp;</strong>&nbsp;&nbsp; Make Columns in the Windows Forms DataGridView Control Read-Only </div>
<div align=left>&nbsp;&nbsp;&nbsp; Samples：</div>
<div align=left>&nbsp;&nbsp;&nbsp; dataGridView1.Columns["CompanyName"].ReadOnly = true;</div>
<div align=left><strong>&nbsp;</strong></div>
<div align=left><strong>13、移去自动生成的列</strong></div>
<div align=left><strong>&nbsp;&nbsp;</strong>&nbsp; Remove Autogenerated Columns from a Windows Forms DataGridView Control </div>
<div align=left>&nbsp;&nbsp;&nbsp; Sample:</div>
<div align=left>&nbsp;&nbsp;&nbsp; dataGridView1.AutoGenerateColumns = true;</div>
<div align=left>&nbsp;&nbsp;&nbsp; dataGridView1.DataSource = customerDataSet;</div>
<div align=left>&nbsp;&nbsp;&nbsp; dataGridView1.Columns.Remove ("Fax");</div>
<div align=left>&nbsp;&nbsp;&nbsp; 或：</div>
<div align=left>&nbsp;&nbsp;&nbsp; dataGridView1.Columns["CustomerID"].Visible = false;</div>
<div align=left><strong>14、自定义选择模式</strong></div>
<div align=left><strong>&nbsp;</strong>&nbsp;&nbsp; Set the Selection Mode of the Windows Forms DataGridView Control </div>
<div align=left>&nbsp;&nbsp;&nbsp; Sample：</div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;</div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.MultiSelect = false;</div>
<div align=left><strong>15、自定义设定光标进入单元格是否编辑模式（编辑模式）</strong></div>
<div align=left>&nbsp;&nbsp;&nbsp; Specify the Edit Mode for the Windows Forms DataGridView Control </div>
<div align=left>&nbsp;&nbsp;&nbsp; this.dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;</div>
<div align=left><strong>16、新行指定默认值</strong></div>
<div align=left><strong>&nbsp;</strong>&nbsp;&nbsp; Specify Default Values for New Rows in the Windows Forms DataGridView Control </div>
<div align=left>&nbsp;&nbsp;&nbsp; Sample：</div>
<div align=left>&nbsp;&nbsp;&nbsp; private void dataGridView1_DefaultValuesNeeded(object sender, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Windows.Forms.DataGridViewRowEventArgs e)</div>
<div align=left>&nbsp;&nbsp;&nbsp; {</div>
<div align=left>&nbsp; &nbsp; &nbsp;&nbsp;e.Row.Cells["Region"].Value = "WA";</div>
<div align=left>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; e.Row.Cells["City"].Value = "Redmond";</div>
<div align=left>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; e.Row.Cells["PostalCode"].Value = "98052-6399";</div>
<div align=left>&nbsp; &nbsp; &nbsp;&nbsp;e.Row.Cells["Region"].Value = "NA";</div>
<div align=left>&nbsp; &nbsp; &nbsp;&nbsp;e.Row.Cells["Country"].Value = "USA";</div>
<div align=left>&nbsp;&nbsp; &nbsp;e.Row.Cells["CustomerID"].Value = NewCustomerId();</div>
<div align=left>&nbsp;&nbsp;&nbsp; }</div>
<div align=left><strong>17、数据验证</strong></div>
<div align=left><strong>&nbsp;</strong>&nbsp;&nbsp; Validate Data in the Windows Forms DataGridView Control </div>
<div align=left>&nbsp;&nbsp;&nbsp; Samples：</div>
<div align=left>&nbsp;&nbsp;&nbsp; &nbsp;private void dataGridView1_CellValidating(object sender, </div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DataGridViewCellValidatingEventArgs e)</div>
<div align=left>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Validate the CompanyName entry by disallowing empty strings.</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dataGridView1.Columns[e.ColumnIndex].Name == "CompanyName")</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (e.FormattedValue.ToString() == String.Empty)</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataGridView1.Rows[e.RowIndex].ErrorText = </div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Company Name must not be empty";</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.Cancel = true;</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</div>
<div align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</div>
<div align=left>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</div>
</div>
</div>
<img src ="http://www.cnblogs.com/kiler/aggbug/814550.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42150/" target="_blank">[新闻]微软出品8GB蓝色和120GB Zune播放器</a>]]></description></item><item><title>【转】.Net平台下开发中文语音应用程序 </title><link>http://www.cnblogs.com/kiler/archive/2007/07/02/802854.html</link><dc:creator>kiler</dc:creator><author>kiler</author><pubDate>Mon, 02 Jul 2007 03:26:00 GMT</pubDate><guid>http://www.cnblogs.com/kiler/archive/2007/07/02/802854.html</guid><description><![CDATA[Net平台下开发中文语音应用程序
<p>&nbsp;</p>
<p>--------------------------------------------------------------------------------</p>
<p>摘要：<br>语音是人类最自然的交互方式，也是现阶段软件用户界面发展的最高目标。微软公司一直积极推动语音技术的发展，并且公布了语音开发平台Speech&nbsp;&nbsp;SDK帮助开发人员实现语音应用。<br>随着.net技术深入人心，越来越多的程序员开始转到.net平台上进行开发。然而，在新发布的.net&nbsp;&nbsp;speech&nbsp;&nbsp;SDK里面并没有对中文语音进行支持，目前支持中文的Speech&nbsp;&nbsp;SDK最高版本为Windows平台下的SAPI&nbsp;&nbsp;5.1()，本文介绍如何在.net平台下利用SAPI5.1开发中文语音应用程序。</p>
<p>--------------------------------------------------------------------------------</p>
<p>目录：<br>1.&nbsp;&nbsp;SAPI.51&nbsp;&nbsp;SDK浅析以及安装<br>2.&nbsp;&nbsp;导入COM对象到.Net<br>3.&nbsp;&nbsp;用C#开发中文TTS应用程序示例<br>4.&nbsp;&nbsp;结论<br>5.&nbsp;&nbsp;参考文献</p>
<p>--------------------------------------------------------------------------------</p>
<p>1．&nbsp;&nbsp;sapi.51&nbsp;&nbsp;sdk浅析以及安装<br>SAPI&nbsp;&nbsp;SDK是微软公司免费提供的语音应用开发工具包，这个SDK中包含了语音应用设计接口（SAPI）、微软的连续语音识别引擎（MCSR）以及微软的语音合成（TTS）引擎等等。目前的5.1版本一共可以支持3种语言的识别&nbsp;&nbsp;(英语，汉语和日语)以及2种语言的合成（英语和汉语）。SAPI中还包括对于低层控制和高度适应性的直接语音管理、训练向导、事件、语法编译、资源、语音识别(SR)管理以及TTS管理等强大的设计接口。其结构如图(1)：<br><br>图(1)<br>语音引擎则通过DDI层（设备驱动接口）和SAPI(SpeechAPI)进行交互，应用程序通过API层和SAPI通信。通过使用这些API，用户可以快速开发在语音识别或语音合成方面应用程序。<br>SAPI5.1&nbsp;&nbsp;SDK可以从微软网站下载：http://www.microsoft.com/speech/download/sdk51/&nbsp;&nbsp;需要安装程序的有Speech&nbsp;&nbsp;SDK&nbsp;&nbsp;5.1（68M）和5.1&nbsp;&nbsp;Language&nbsp;&nbsp;Pack&nbsp;&nbsp;（81.5M）。</p>
<p>--------------------------------------------------------------------------------</p>
<p>2．&nbsp;&nbsp;导入com对象到.net<br>SAPI5.1的基于Windows平台的，通过COM接口进行调用。在.Net平台下要应用SAPI5.1，我们可以利用.Net&nbsp;&nbsp;Framework自带的强大工具TlbImp.exe来把SAPI&nbsp;&nbsp;SDK的COM对象导入到.Net中。TlbImp.exe产生一个管制的包装类，管理客户端可以使用它。包装类管理实际的COM对象的参考数。当包装类当作收集的垃圾时，包装类释放掉它包装的COM对象。当然，你也可以在VS.NET环境中通过从项目参考对话框选择COM对象，实现COM对象的导入，这个过程也是通过TlbImp.exe来完成的。<br>下面演示如何导入SAPI的COM对象：<br>D:\Program&nbsp;&nbsp;Files\Common&nbsp;&nbsp;Files\Microsoft&nbsp;&nbsp;Shared\Speech&gt;Tlbimp&nbsp;&nbsp;sapi.dll&nbsp;&nbsp;/out:&nbsp;&nbsp;DotNetSpeech.dll</p>
<p>在安转sdk以后，可以在d:\program&nbsp;&nbsp;files\common&nbsp;&nbsp;files\microsoft&nbsp;&nbsp;shared\speech\目录下面找到sapi.dll，这里面定义了sapi的com对象，用tlbimp.exe工具将该dll转换成.net平台下的assembly---dotnetspeech.dll，转换的过程会提示不少的警告(warning)，但这部影响我们的开发，可以忽略。最后，我们可以用ildasm查看dotnetspeech.dll里面的对象。</p>
<p>--------------------------------------------------------------------------------</p>
<p>3．&nbsp;&nbsp;用c#开发中文tts应用程序示例<br>下面通过一个实例来介绍如何利用C#&nbsp;&nbsp;进行开发语音应用程序，开发环境为：<br>操作系统：&nbsp;&nbsp;Windows&nbsp;&nbsp;2000&nbsp;&nbsp;中文版+&nbsp;&nbsp;SP3<br>.Net&nbsp;&nbsp;Framework:&nbsp;&nbsp;1.0.3705（英文版）<br>Visual&nbsp;&nbsp;Studio.Net&nbsp;&nbsp;7.0.9466（英文版）<br>首先，新建一个C#的Windows&nbsp;&nbsp;Application工程SpeechApp，在开发环境的右边的解决方案管理器(Solution&nbsp;&nbsp;Explorer)中，添加DotNetSpeech对象库。右键点击"Reference"(参考)，选择"Add&nbsp;&nbsp;Reference"（添加参考），在弹出的文件选择对话框中找到刚才生成的DotNetSpeech.dll。<br>screen.width-333)&nbsp;&nbsp;{this.width=screen.width-333;this.title='open&nbsp;&nbsp;new&nbsp;&nbsp;window';}" &nbsp;&nbsp;onmouseover="if(this.title)&nbsp;&nbsp;{this.style.cursor='hand';}" ;&nbsp;&nbsp;onclick="if(this.title)&nbsp;&nbsp;{window.open('http://www.microsoft.com/china/community/images/TechArticleImages/Cnspeech2.jpg');}" Cnspeech2.jpg?&nbsp;&nbsp;border="0"&gt;<br>图(2)<br>打开Form1.cs代码文件,在代码开头添加名字空间（注意大小写）。<br>using&nbsp;&nbsp;DotNetSpeech;<br>这样就实现了SAPI&nbsp;&nbsp;SDK的导入，下面我们就可以开始编写应用代码了。本示例演示如何把文本通过喇叭朗读出来以及把文本转化成语音信号（Wave声音文件），程序界面如图(3)：<br>screen.width-333)&nbsp;&nbsp;{this.width=screen.width-333;this.title='open&nbsp;&nbsp;new&nbsp;&nbsp;window';}" &nbsp;&nbsp;onmouseover="if(this.title)&nbsp;&nbsp;{this.style.cursor='hand';}" ;&nbsp;&nbsp;onclick="if(this.title)&nbsp;&nbsp;{window.open('http://www.microsoft.com/china/community/images/TechArticleImages/Cnspeech3.jpg');}" Cnspeech3.jpg?&nbsp;&nbsp;border="0"&gt;<br>//朗读<br>private&nbsp;&nbsp;void&nbsp;&nbsp;buttonSynthesis_Click(object&nbsp;&nbsp;sender,&nbsp;&nbsp;System.EventArgs&nbsp;&nbsp;e)<br>{<br>try<br>{<br>SpeechVoiceSpeakFlags&nbsp;&nbsp;SpFlags&nbsp;&nbsp;=&nbsp;&nbsp;SpeechVoiceSpeakFlags.SVSFlagsAsync;<br>SpVoice&nbsp;&nbsp;Voice&nbsp;&nbsp;=&nbsp;&nbsp;new&nbsp;&nbsp;SpVoice(); <br>Voice.Speak(this.textBoxText.Text,&nbsp;&nbsp;SpFlags);<br>}<br>catch(Exception&nbsp;&nbsp;er)<br>{<br>MessageBox.Show("An&nbsp;&nbsp;Error&nbsp;&nbsp;Occured!","SpeechApp",&nbsp;&nbsp;MessageBoxButtons.OK,&nbsp;&nbsp;MessageBoxIcon.Error);<br>}<br>}<br>//生成声音文件(Wav)<br>private&nbsp;&nbsp;void&nbsp;&nbsp;buttonTTStoWave_Click(object&nbsp;&nbsp;sender,&nbsp;&nbsp;System.EventArgs&nbsp;&nbsp;e)<br>{<br>try<br>{<br>SpeechVoiceSpeakFlags&nbsp;&nbsp;SpFlags&nbsp;&nbsp;=&nbsp;&nbsp;SpeechVoiceSpeakFlags.SVSFlagsAsync;<br>SpVoice&nbsp;&nbsp;Voice&nbsp;&nbsp;=&nbsp;&nbsp;new&nbsp;&nbsp;SpVoice(); <br>SaveFileDialog&nbsp;&nbsp;sfd&nbsp;&nbsp;=&nbsp;&nbsp;new&nbsp;&nbsp;SaveFileDialog();<br>sfd.Filter&nbsp;&nbsp;=&nbsp;&nbsp;"All&nbsp;&nbsp;files&nbsp;&nbsp;(*.*)|*.*|wav&nbsp;&nbsp;files&nbsp;&nbsp;(*.wav)|*.wav";<br>sfd.Title&nbsp;&nbsp;=&nbsp;&nbsp;"Save&nbsp;&nbsp;to&nbsp;&nbsp;a&nbsp;&nbsp;wave&nbsp;&nbsp;file";<br>sfd.FilterIndex&nbsp;&nbsp;=&nbsp;&nbsp;2;<br>sfd.RestoreDirectory&nbsp;&nbsp;=&nbsp;&nbsp;true;<br>if&nbsp;&nbsp;(sfd.ShowDialog()==&nbsp;&nbsp;DialogResult.OK)&nbsp;&nbsp;<br>{<br>SpeechStreamFileMode&nbsp;&nbsp;SpFileMode&nbsp;&nbsp;=&nbsp;&nbsp;SpeechStreamFileMode.SSFMCreateForWrite;<br>SpFileStream&nbsp;&nbsp;SpFileStream&nbsp;&nbsp;=&nbsp;&nbsp;new&nbsp;&nbsp;SpFileStream();<br>SpFileStream.Open(sfd.FileName,&nbsp;&nbsp;SpFileMode,&nbsp;&nbsp;false);<br>Voice.AudioOutputStream&nbsp;&nbsp;=&nbsp;&nbsp;SpFileStream;<br>Voice.Speak(txtSpeakText.Text,&nbsp;&nbsp;SpFlags);<br>Voice.WaitUntilDone(Timeout.Infinite);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpFileStream.Close();<br>}<br>}<br>catch(Exception&nbsp;&nbsp;er)<br>{<br>MessageBox.Show("An&nbsp;&nbsp;Error&nbsp;&nbsp;Occured!","SpeechApp",&nbsp;&nbsp;MessageBoxButtons.OK,&nbsp;&nbsp;MessageBoxIcon.Error);<br>}<br>}</p>
<p>接下来,还要去控制面板配置speech&nbsp;&nbsp;sdk引擎当前所处理语言。打开"控制面板"，打开"语音"配置项目，可以看到在这里我们可以指定当前可以对何种语言进行识别或者合成，还可以配置相关的硬件设备以及控制语速。（如图4）<br>screen.width-333)&nbsp;&nbsp;{this.width=screen.width-333;this.title='open&nbsp;&nbsp;new&nbsp;&nbsp;window';}" &nbsp;&nbsp;onmouseover="if(this.title)&nbsp;&nbsp;{this.style.cursor='hand';}" ;&nbsp;&nbsp;onclick="if(this.title)&nbsp;&nbsp;{window.open('http://www.microsoft.com/china/community/images/TechArticleImages/Cnspeech4.jpg');}" Cnspeech4.jpg?&nbsp;&nbsp;border="0"&gt;<br>在"文字-语音转换"的"语音选择"组合框中选择简体中文(Microsoft&nbsp;&nbsp;Simplified&nbsp;&nbsp;Chinese)。这样就可以合成汉语文字了。<br>回到VS.Net，F5编译运行刚才的应用程序，在文本框里输入汉字，戴上耳机，点击"朗读"按钮，开始体验新一代的智能人机界面吧，呵呵：）</p>
<p>--------------------------------------------------------------------------------</p>
<p>4．&nbsp;&nbsp;结论<br>微软为语音人机界面提供了强大的平台，.net环境更使这种开发方便快捷。赶快去下载SAPI5.1&nbsp;&nbsp;SDK，让你的应用程序"绘声绘色"，体现Nature&nbsp;&nbsp;UI，Let&#8217;s&nbsp;&nbsp;GO!!!</p>
<p>--------------------------------------------------------------------------------</p>
<p>5．&nbsp;&nbsp;参考文献<br>[1]&nbsp;&nbsp;Speech&nbsp;&nbsp;SDK自带的说明文档(SAPI.chm)<br>[2]&nbsp;&nbsp;MSDN&nbsp;&nbsp;(msdn.microsoft.com)</p>
<p>--------------------------------------------------------------------------------&nbsp;</p>
<img src ="http://www.cnblogs.com/kiler/aggbug/802854.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42144/" target="_blank">[新闻]千亿美元市值榜:微软居首移动第二 诺基亚退榜</a>]]></description></item><item><title>企业应用架构模式电子版(PDF格式)下载</title><link>http://www.cnblogs.com/kiler/archive/2007/06/28/798667.html</link><dc:creator>kiler</dc:creator><author>kiler</author><pubDate>Thu, 28 Jun 2007 03:20:00 GMT</pubDate><guid>http://www.cnblogs.com/kiler/archive/2007/06/28/798667.html</guid><wfw:comment>http://www.cnblogs.com/kiler/comments/798667.html</wfw:comment><comments>http://www.cnblogs.com/kiler/archive/2007/06/28/798667.html#Feedback</comments><slash:comments>25</slash:comments><wfw:commentRss>http://www.cnblogs.com/kiler/comments/commentRss/798667.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kiler/services/trackbacks/798667.html</trackback:ping><description><![CDATA[一本很不错的书，如果你将来想做一名优秀的架构师，就一定要读读这本书。<br>现在这本书已经买不到了，所以找一个电子版给大家分享一下。 <br><a href="http://www.cnblogs.com/Files/kiler/企业应用架构模式中文版.part1.rar"><br>http://www.cnblogs.com/Files/kiler/企业应用架构模式中文版.part1.rar</a> <br><a href="http://www.cnblogs.com/Files/kiler/企业应用架构模式中文版.part2.rar"><br>http://www.cnblogs.com/Files/kiler/企业应用架构模式中文版.part2.rar</a> <br><a href="http://www.cnblogs.com/Files/kiler/企业应用架构模式中文版.part3.rar"><br>http://www.cnblogs.com/Files/kiler/企业应用架构模式中文版.part3.rar</a> <br><a href="http://www.cnblogs.com/Files/kiler/企业应用架构模式中文版.part4.rar"><br>http://www.cnblogs.com/Files/kiler/企业应用架构模式中文版.part4.rar</a> 
<img src ="http://www.cnblogs.com/kiler/aggbug/798667.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42142/" target="_blank">[新闻]Google申请“海上数据中心”专利 可能付诸行动</a>]]></description></item><item><title>整理了一个castle的文档，供大家学习使用</title><link>http://www.cnblogs.com/kiler/archive/2007/05/16/748516.html</link><dc:creator>kiler</dc:creator><author>kiler</author><pubDate>Wed, 16 May 2007 06:06:00 GMT</pubDate><guid>http://www.cnblogs.com/kiler/archive/2007/05/16/748516.html</guid><wfw:comment>http://www.cnblogs.com/kiler/comments/748516.html</wfw:comment><comments>http://www.cnblogs.com/kiler/archive/2007/05/16/748516.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.cnblogs.com/kiler/comments/commentRss/748516.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kiler/services/trackbacks/748516.html</trackback:ping><description><![CDATA[把castle官方网站上面的文档整理了一下，做一个word文档，方便大家离线查看或者打印。<br><a href="http://www.cnblogs.com/Files/kiler/Castle%20Reference%20Documentation.rar"><font color=#002c99>Castle Reference Documentation.rar</font></a> 
<img src ="http://www.cnblogs.com/kiler/aggbug/748516.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42141/" target="_blank">[新闻]用Google Earth实时追踪人造卫星</a>]]></description></item></channel></rss>