<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_缤纷</title><subtitle type="text">繁多而杂乱的样子,也指颜色多而绚丽.</subtitle><id>http://feed.cnblogs.com/blog/u/27651/rss</id><updated>2012-02-16T03:47:53Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/27651/rss"/><entry><id>http://www.cnblogs.com/gxlxzys/archive/2012/02/16/2353025.html</id><title type="text">c#+Winform实现自定义的“复制、粘贴”右键快捷菜单，多个控件共享使用一个右键菜单。</title><summary type="text">程序中需要用到文本框或者RichTextBox进行文字输入或显示，对于一般使用者，可能连快捷键Ctrl+C复制，Ctrl+V粘贴都不会用，作为开发者就必须做一个右键菜单，以显示“复制”，“粘贴”。可以将一个上下文菜单（ContextMenuStrip，也叫右键菜单、快捷菜单）分配给几个控件使用，方法是将这几个控件的ContextMenuStrip属性设置为需要显示的菜单。在菜单事件中，如何判断是在哪个控件点击的呢？答案是此上下文菜单的SourceControl属性，以下是复制、粘贴的代码：</summary><published>2012-02-16T03:40:00Z</published><updated>2012-02-16T03:40:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2012/02/16/2353025.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2012/02/16/2353025.html"/><content type="html">&lt;p&gt;程序中需要用到文本框或者RichTextBox进行文字输入或显示，对于一般使用者，可能连快捷键Ctrl+C复制，Ctrl+V粘贴都不会用，作为开发者就必须做一个右键菜单，以显示&amp;ldquo;复制&amp;rdquo;，&amp;ldquo;粘贴&amp;rdquo;。&lt;/p&gt;&lt;p&gt;可以将一个上下文菜单（ContextMenuStrip，也叫右键菜单、快捷菜单）分配给几个控件使用，方法是将这几个控件的ContextMenuStrip属性设置为需要显示的菜单。&lt;/p&gt;&lt;p&gt;在菜单事件中，如何判断是在哪个控件点击的呢？答案是此上下文菜单的SourceControl属性，以下是复制、粘贴的代码：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; 复制ToolStripMenuItem_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; selectText = ((RichTextBox)menuSend.SourceControl).SelectedText;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (selectText != &lt;span style="color: #800000;"&gt;""&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                Clipboard.SetText(selectText);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; 粘贴ToolStripMenuItem_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Clipboard.ContainsText())&lt;br /&gt;            {              &lt;br /&gt;                RichTextBox txtBox = (RichTextBox)menuSend.SourceControl;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; index = txtBox.SelectionStart;  &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;记录下粘贴前的光标位置&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; text = txtBox.Text;&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;删除选中的文本&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                text = text.Remove(txtBox.SelectionStart, txtBox.SelectionLength);&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;在当前光标输入点插入剪切板内容&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                text = text.Insert(txtBox.SelectionStart, Clipboard.GetText());&lt;br /&gt;                txtBox.Text = text;&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;重设光标位置&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                txtBox.SelectionStart = index;&lt;br /&gt;            }&lt;br /&gt;        }&lt;/div&gt;&lt;p&gt;&amp;nbsp;为了使右键菜单更显智能，没有选中文本时&amp;ldquo;复制&amp;rdquo;先效；剪切板无内容时，&amp;ldquo;粘贴&amp;rdquo;无效，特在其Opened事件中增加以下代码。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt; &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; menuSend_Opened(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;没有选择文本时，复制菜单禁用&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; selectText = ((RichTextBox)menuSend.SourceControl).SelectedText;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (selectText != &lt;span style="color: #800000;"&gt;""&lt;/span&gt;)&lt;br /&gt;                复制ToolStripMenuItem.Enabled = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;                复制ToolStripMenuItem.Enabled = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;剪切板没有文本内容时，粘贴菜单禁用&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Clipboard.ContainsText())&lt;br /&gt;            {&lt;br /&gt;                粘贴ToolStripMenuItem.Enabled = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;                粘贴ToolStripMenuItem.Enabled = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        }&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/2353025.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2012/02/16/2353025.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2011/10/06/2200183.html</id><title type="text">自制《要塞：十字军东征》无限金钱修改器</title><summary type="text">十字军东征，这游戏挺有意思的，建城堡，造投石车，攻城……。懒得发展工商业了，做这个修改器锁定金钱吧，只管攻城就行，体验另一种乐趣。哈哈到这里下载</summary><published>2011-10-06T13:50:00Z</published><updated>2011-10-06T13:50:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2011/10/06/2200183.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2011/10/06/2200183.html"/><content type="html">&lt;p&gt;十字军东征，这游戏挺有意思的，建城堡，造投石车，攻城&amp;hellip;&amp;hellip;。&lt;/p&gt;&lt;p&gt;懒得发展工商业了，做这个修改器锁定金钱吧，只管攻城就行，体验另一种乐趣。哈哈&lt;/p&gt;&lt;p&gt;&lt;img alt="：《要塞：十字军东征》无限金钱修改器" src="http://www.binfensoft.cn/UploadFiles/2011-10/admin/2011100621330690471.jpg" width="362" height="129" /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.binfensoft.cn/xgq/7.html" target="_blank"&gt;到这里下载&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/2200183.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2011/10/06/2200183.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2011/08/31/2160925.html</id><title type="text">ms Sql 数据库出现 “提供的统计信息流已损坏”的解决办法。</title><summary type="text">前几天一数据库有损坏，使用DBCC CHECKDB 命令检测和修复后，再怎么检测都是正常的。程序实现运行时就出现错误“提供的统计信息流已损坏”，用sql管理器运行命令select * from t_tabel却毫无问题，但在附加where 条件时就有问题了。最后经过检测，是其中的一个字段有问题，刚好这个字段建有索引，于是重建索引，问题解决。如下图：这个问题可能很少见，我找遍了百度，谷歌都没有解决办法，现将本解决办法放到网络，供人查询。</summary><published>2011-08-31T08:42:00Z</published><updated>2011-08-31T08:42:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2011/08/31/2160925.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2011/08/31/2160925.html"/><content type="html">&lt;p&gt;前几天一数据库有损坏，使用DBCC CHECKDB 命令检测和修复后，再怎么检测都是正常的。&lt;/p&gt;&lt;p&gt;程序实现运行时就出现错误&amp;ldquo;提供的统计信息流已损坏&amp;rdquo;，用sql管理器运行命令select * from t_tabel却毫无问题，但在附加where 条件时就有问题了。&lt;/p&gt;&lt;p&gt;最后经过检测，是其中的一个字段有问题，刚好这个字段建有索引，于是重建索引，问题解决。&lt;/p&gt;&lt;p&gt;如下图：&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/24092/2011083116404566.png" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这个问题可能很少见，我找遍了百度，谷歌都没有解决办法，现将本解决办法放到网络，供人查询。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/2160925.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2011/08/31/2160925.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2011/07/02/2096497.html</id><title type="text">C#+Midi 模拟各种乐器演奏</title><summary type="text">前段时间一时兴起，参考各种资料文档，各种程序代码。连基本乐理知识都去了解了一些，弄清楚了什么是十二平均律，什么是半音、全音等等，终于弄出了这么个东东，如下图：其功能就是输入“简谱”就能演奏出优美的旋律。“连音”奏法一直没办法实现，是较为遗憾的一个事。程序中的简谱也是有规则的：以01234567为基本四分音符，每个音符用英文逗号分开，如：1,2,3,4等，0代表休止符。在音符前输入：“+-#!” 加号表示此音升高八度，减号则降八度，井号升半音，叹号降半音。 在基本音符后加斜杠“/”表示此音时值减一半，半成8分音符，双斜杠则变成16分音符。 可在以上基础上再加入延音线“-”（减号），一个减号表示延</summary><published>2011-07-02T14:11:00Z</published><updated>2011-07-02T14:11:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2011/07/02/2096497.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2011/07/02/2096497.html"/><content type="html">&lt;p&gt;前段时间一时兴起，参考各种资料文档，各种程序代码。&lt;/p&gt;&lt;p&gt;连基本乐理知识都去了解了一些，弄清楚了什么是十二平均律，什么是半音、全音等等，终于弄出了这么个东东，如下图：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/24092/2011070221034480.png" /&gt;&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/24092/2011070221040697.png" /&gt;&lt;/p&gt;&lt;p&gt;其功能就是输入&amp;ldquo;简谱&amp;rdquo;就能演奏出优美的旋律。&lt;/p&gt;&lt;p&gt;&amp;ldquo;连音&amp;rdquo;奏法一直没办法实现，是较为遗憾的一个事。&lt;/p&gt;&lt;p&gt;程序中的简谱也是有规则的：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;以01234567为基本四分音符，每个音符用英文逗号分开，如：1,2,3,4等，0代表休止符。&lt;/li&gt;&lt;li&gt;在音符前输入：&amp;ldquo;+-#!&amp;rdquo; 加号表示此音升高八度，减号则降八度，井号升半音，叹号降半音。 &lt;/li&gt;&lt;li&gt;在基本音符后加斜杠&amp;ldquo;/&amp;rdquo;表示此音时值减一半，半成8分音符，双斜杠则变成16分音符。 &lt;/li&gt;&lt;li&gt;可在以上基础上再加入延音线&amp;ldquo;-&amp;rdquo;（减号），一个减号表示延长一倍时值，和简谱里用法一样。 &lt;/li&gt;&lt;li&gt;还可在以上基础上再加入附点音符&amp;ldquo;.&amp;rdquo;（英文的句号），作用与简谱一样（允许双附点）。 &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;================================&lt;/p&gt;&lt;p&gt;程序中主要使用的Windows API函数&lt;/p&gt;&lt;div onclick="cnblogs_code_show('0a04a73b-b5bb-49d6-84b5-72407943b026')" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" class="code_img_closed" id="code_img_closed_0a04a73b-b5bb-49d6-84b5-72407943b026" /&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('0a04a73b-b5bb-49d6-84b5-72407943b026',event)" class="code_img_opened" id="code_img_opened_0a04a73b-b5bb-49d6-84b5-72407943b026" style="display: none;" /&gt;&lt;div class="cnblogs_code_hide" id="cnblogs_code_open_0a04a73b-b5bb-49d6-84b5-72407943b026"&gt;&lt;div&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 复置midi输出&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="handle"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        [DllImport(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;winmm.dll&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; midiOutReset(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; handle);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 向输出端口发送信息&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="handle"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="message"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        [DllImport(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;winmm.dll&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; midiOutShortMsg(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; handle, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; message);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 打开midi输出设备&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="handle"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="deviceID"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="proc"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="instance"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="flags"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        [DllImport(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;winmm.dll&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; midiOutOpen(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; handle, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; deviceID,&lt;br /&gt;            MidiOutProc proc, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; instance, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; flags);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 关闭&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="handle"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        [DllImport(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;winmm.dll&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; midiOutClose(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; handle);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;最核心的是向midi发送信息的部份，要了解发送指令的格式，请参考&lt;a target="_blank" href="http://baike.baidu.com/view/7969.htm#5"&gt;百度百科&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;当打开设备后就可以发送信息了，用的是上面的midiOutShortMsg函数，以下是经过封装的模拟键盘按下或抬起的函数&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Send(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iStatus, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iChannel, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData1, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData2)&lt;br /&gt;        {&lt;br /&gt;            midiOutShortMsg(hndle, iStatus &lt;/span&gt;&lt;span style="color: #000000;"&gt;|&lt;/span&gt;&lt;span style="color: #000000;"&gt; iChannel &lt;/span&gt;&lt;span style="color: #000000;"&gt;|&lt;/span&gt;&lt;span style="color: #000000;"&gt; (iData1 &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;8&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #000000;"&gt;|&lt;/span&gt;&lt;span style="color: #000000;"&gt; (iData2 &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;16&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 键盘按下，默认为第一通道&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="iData1"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="iData2"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Note_On(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData1, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData2)&lt;br /&gt;        {&lt;br /&gt;            Note_On(&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, iData1, iData2);&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Note_On(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iChannel, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData1, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData2)&lt;br /&gt;        {&lt;br /&gt;            Send(&lt;/span&gt;&lt;span style="color: #800080;"&gt;0x90&lt;/span&gt;&lt;span style="color: #000000;"&gt;, iChannel, iData1, iData2);&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Note_Off(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData1, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData2)&lt;br /&gt;        {&lt;br /&gt;            Note_Off(&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, iData1, iData2);&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Note_Off(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iChannel, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData1, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData2)&lt;br /&gt;        {&lt;br /&gt;            Send(&lt;/span&gt;&lt;span style="color: #800080;"&gt;0x80&lt;/span&gt;&lt;span style="color: #000000;"&gt;, iChannel, iData1, iData2);&lt;br /&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;注音看，0x90代表中的9代表键盘按下（开始发声），0代表第一通道，共16个通道，就是说可以有16个乐器同时演奏,iCannel是通道号，iData1是音符代号，0为最低音，127是最高音，钢琴的键盘中央C是60，iData2是音量或力度（我也不是很明白，一盘用100就行了）。这些信息在Send函数中进行&lt;span style="color: #888888;"&gt;与&lt;/span&gt;运算、移位运算后，得到诸如0x92 48 96 的信息，表示通道3 开始弹奏C2&lt;/p&gt;&lt;p&gt;0x80就表示键盘抬起，作用就是停止发声，一般我们都是用0x90 + 音量为0来实现静音的（具体为什么，忘了，好像是这样的命令能有效减小mid文件的存储长度）&lt;/p&gt;&lt;p&gt;更多命令请百度或谷哥吧，现提供程序及源码下载。&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/gxlxzys/midiplayer.rar"&gt;简谱播放器下载&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/gxlxzys/SimpleMidiPlayer_SourceCode.rar"&gt;源代码下载&lt;/a&gt;（vs2010)&lt;/p&gt;&lt;p&gt;另外本程序引用一CodeProject中一个项目&lt;a target="_blank" href="http://www.codeproject.com/KB/audio-video/MIDIToolkit.aspx"&gt;C# MIDI Toolkit&lt;/a&gt;部份Api声明的代码，此项目是一个键盘钢琴程序，运行界面如下：&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/24092/2011070221593524.png" /&gt;&lt;/p&gt;&lt;p&gt;还有还在一个&lt;a target="_blank" href="http://www.newxing.com/Code/VB/Multimedia/580.html"&gt;网站&lt;/a&gt;找到了一些VB写的钢琴键盘，也很有参考价值。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/2096497.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2011/07/02/2096497.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2011/06/09/1852988.html</id><title type="text">如何让DataGridView根据数据“0”或“1”等值显示为“是”或“否”（复选框的使用）</title><summary type="text">DataGridView 中关于DataGridViewComboBoxColumn（复选框控件）的使用方法</summary><published>2011-06-09T01:57:00Z</published><updated>2011-06-09T01:57:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2011/06/09/1852988.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2011/06/09/1852988.html"/><content type="html">&lt;p&gt;在数据库中，我们经常用一些简单的数值（如0、1、2等）代表一定含义，如：是/否，男/女，正确/错误，已婚/未婚/离异等。&lt;/p&gt;&lt;p&gt;但在DataGridView控件中如何显示呢？&lt;/p&gt;&lt;p&gt;一种办法是使用 select Case 语句。&lt;/p&gt;&lt;p&gt;二种方法就是使用DataGridView 列定制。&lt;/p&gt;&lt;p&gt;这里主要讲的是第二种方法。&lt;/p&gt;&lt;p&gt;在设置DataGridView列属性时，将ColumnType设置为DataGridViewComboBoxColumn，DisplayStyle设置为Nothing，然后是代码：&lt;/p&gt;&lt;p&gt;在窗体加载过程中录入下列代码：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;((DataGridViewComboBoxColumn)gvSaleOrder.Columns["payMode"]).DisplayMember = "text";&lt;br/&gt;            ((DataGridViewComboBoxColumn)gvSaleOrder.Columns["payMode"]).ValueMember = "value";&lt;br/&gt;            DataTable dtPayMode = new DataTable();&lt;br/&gt;            dtPayMode.Columns.Add("text");&lt;br/&gt;            dtPayMode.Columns.Add("value", typeof(byte));&lt;br/&gt;            dtPayMode.Rows.Add(new object[] { "现金", 0 });&lt;br/&gt;            dtPayMode.Rows.Add(new object[] { "刷卡", 1 });&lt;br/&gt;            ((DataGridViewComboBoxColumn)gvSaleOrder.Columns["payMode"]).DataSource = dtPayMode;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;这样就可以在对DataGridView绑定数据时，自动根据0或1等状态显示相应的中文了。如下图：&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/24092/2011060909514335.png" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/1852988.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2011/06/09/1852988.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2011/06/09/2074472.html</id><title type="text">DataGridView 显示和隐藏DataGridViewButtonCell按钮的办法</title><summary type="text">有时，我们需要在DataGridView中，针对某行数据进行简单的变换操作，且变换后显示的内容要与变换关不一致，不能再变回来，如下图：网上搜索到一个贴子，里面提供了两种办法，我选用了其中一种。http://social.msdn.microsoft.com/Forums/en/winformsapplications/thread/f82ec651-6b22-44b0-8ead-15796387424f就是将这个DataGridViewButtonCell换成 DataGridViewTextBoxCell，非常简单上图的实现代码：private void gvSaleOrder_RowPre</summary><published>2011-06-09T01:04:00Z</published><updated>2011-06-09T01:04:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2011/06/09/2074472.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2011/06/09/2074472.html"/><content type="html">&lt;p&gt;有时，我们需要在DataGridView中，针对某行数据进行简单的变换操作，且变换后显示的内容要与变换关不一致，不能再变回来，如下图：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/24092/2011060717023896.png" /&gt;&lt;/p&gt;&lt;p&gt;网上搜索到一个贴子，里面提供了两种办法，我选用了其中一种。&lt;/p&gt;&lt;p&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en/winformsapplications/thread/f82ec651-6b22-44b0-8ead-15796387424f"&gt;http://social.msdn.microsoft.com/Forums/en/winformsapplications/thread/f82ec651-6b22-44b0-8ead-15796387424f&lt;/a&gt;&lt;/p&gt;&lt;p&gt;就是将这个DataGridViewButtonCell换成 DataGridViewTextBoxCell，非常简单&lt;/p&gt;&lt;p&gt;上图的实现代码：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;private void gvSaleOrder_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            if (gvSaleOrder["writeOff", e.RowIndex].Value.ToString() == "1" &amp;amp;&amp;amp; gvSaleOrder["btnConfirm", e.RowIndex].Value.ToString() != "已销账")&lt;br/&gt;            {&lt;br/&gt;                gvSaleOrder["btnConfirm", e.RowIndex] = new DataGridViewTextBoxCell();&lt;br/&gt;                gvSaleOrder["btnConfirm", e.RowIndex].Value = "已销账";&lt;br/&gt;                &lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/2074472.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2011/06/09/2074472.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2010/12/19/1910499.html</id><title type="text">文件隐藏助手，将一个压缩文件隐藏到图片中</title><summary type="text">将一个压缩文件隐藏到图片中，把此图片扩展名改为.rar就能变回压缩文件 ，再改为.gif又变回图片，是不是很神奇？</summary><published>2010-12-19T05:46:00Z</published><updated>2010-12-19T05:46:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2010/12/19/1910499.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2010/12/19/1910499.html"/><content type="html">&lt;p&gt;&amp;nbsp;有一次在百度贴吧中看到一张签名图片，图的内容是让你把这张图片下载下来，然后把扩展名改为.rar，打开后会有意外惊喜，我认为这肯定是骗人的把戏，文件格式可不是改个扩展名就能改的，把.gif改成.rar就能变成压缩文件，这怎么可能，但看到下面的很多跟贴内容，都说有意外惊喜，于是我也决定试试看。&lt;/p&gt;&lt;p&gt;&amp;nbsp;不试不知道，一试吓一跳，竟然真的能打开，图片变成了压缩包，解压出来是好几个bt种子文件，全是日本爱情动作片的种子。&lt;/p&gt;&lt;p&gt;网上找了一下资料，有的是用16进制编辑器把两个文件合在一起，但更简单的方法是用copy命令，如下命令：&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;copy /b&amp;nbsp;图片1.gif+文件2.rar 隐藏图片3.gif&lt;/span&gt;&lt;br /&gt;这样就能把两个文件合成一个文件，你自己也可以试试，生成的文件&lt;span style="color: #339966;"&gt;&lt;span style="color: #0000ff;"&gt;隐藏图片3.gif&lt;/span&gt;&lt;span style="color: #000000;"&gt;改变扩展名为.gif和.rar都能打开。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;顺便做了个Winfrom小程序，送给有需要的网友。&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/24092/2010121913400852.png" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;a href="http://files.cnblogs.com/gxlxzys/%e6%96%87%e4%bb%b6%e9%9a%90%e8%97%8f%e5%8a%a9%e6%89%8b.rar"&gt;点这里下载&lt;/a&gt;&lt;br /&gt;下图是我用此工具生成的图片，你可以下载到你的计算机上改个扩展名看看。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/24092/2010121913440963.gif" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/1910499.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2010/12/19/1910499.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852976.html</id><title type="text">如何让DataGridview控件自动滚动到指定的行或列</title><summary type="text">Datagridview中的数据量一多，就有可能用到滚动条。有些时候新增加一条记录时，DataGridView不会自动滚动到新加记录，这时我们要手工滚动。刚开始时我使用的是FirstDisplayedScrollingRowIndex和FirstDisplayedScrollingColumnIndex等属性，也能实现需求，但滚动太大，效果不理想。后来才发现，通过设置CurrentCell属性效果...</summary><published>2010-10-16T03:57:00Z</published><updated>2010-10-16T03:57:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852976.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852976.html"/><content type="html">&lt;p&gt;Datagridview中的数据量一多，就有可能用到滚动条。&lt;/p&gt;&lt;p&gt;有些时候新增加一条记录时，DataGridView不会自动滚动到新加记录，这时我们要手工滚动。&lt;/p&gt;&lt;p&gt;刚开始时我使用的是FirstDisplayedScrollingRowIndex和FirstDisplayedScrollingColumnIndex等属性，也能实现需求，但滚动太大，效果不理想。&lt;/p&gt;&lt;p&gt;后来才发现，通过设置CurrentCell属性效果最好。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/1852976.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852976.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852974.html</id><title type="text">为Winform程序中DataGridView控件增加自动显示行号功能</title><summary type="text">网上找了几种显示行号的方法，采用了其中一种，在行头显示行号，很实用，如图：代码如下：</summary><published>2010-10-16T03:47:00Z</published><updated>2010-10-16T03:47:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852974.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852974.html"/><content type="html">&lt;p&gt;网上找了几种显示行号的方法，采用了其中一种，在行头显示行号，很实用，如图：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/24092/2010101611444620.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;private void gvTransferList_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, gvTransferList.RowHeadersWidth, e.RowBounds.Height);&lt;br/&gt;            TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(),&lt;br/&gt;                gvTransferList.RowHeadersDefaultCellStyle.Font, rectangle, gvTransferList.RowHeadersDefaultCellStyle.ForeColor,&lt;br/&gt;                TextFormatFlags.VerticalCenter | TextFormatFlags.Right);&lt;br/&gt;        }&lt;br/&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/1852974.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852974.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852967.html</id><title type="text">在Excel Vba程序中自制进度条，显示实时进度信息</title><summary type="text">工作中常常使用Excel + Vba进行一些数据的操作，在读取成千上万行数据时就非常需要一个进度显示。虽然vba自带有Active控件的进度条，但使用后发现效果并不理想。于是自制了一个，在状态栏显示，效果如图：代码：调用方式示例：非常地实用吧，呵呵。</summary><published>2010-10-16T03:35:00Z</published><updated>2010-10-16T03:35:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852967.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852967.html"/><content type="html">&lt;p&gt;工作中常常使用Excel + Vba进行一些数据的操作，在读取成千上万行数据时就非常需要一个进度显示。虽然vba自带有Active控件的进度条，但使用后发现效果并不理想。&lt;/p&gt;&lt;p&gt;于是自制了一个，在状态栏显示，效果如图：&lt;/p&gt;&lt;p&gt;&lt;img style="border: black 1px solid;" src="http://pic002.cnblogs.com/images/2010/24092/2010101611314328.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;代码：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;'自定义的进度条，在状态栏显示&lt;br/&gt;Function GetProgress(curValue, maxValue)&lt;br/&gt;Dim i As Single, j As Integer, s As String&lt;br/&gt;i = maxValue / 20&lt;br/&gt;j = curValue / i&lt;br/&gt;&lt;br/&gt;For m = 1 To j&lt;br/&gt;    s = s &amp;amp; "■"&lt;br/&gt;Next m&lt;br/&gt;For n = 1 To 20 - j&lt;br/&gt;    s = s &amp;amp; "□"&lt;br/&gt;Next n&lt;br/&gt;GetProgress = s &amp;amp; FormatNumber(curValue / maxValue * 100, 2) &amp;amp; "%"&lt;br/&gt;End Function&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;调用方式示例：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;rs.Open sql,  connXls, 1&lt;br/&gt;    Dim p As Integer: p = 0&lt;br/&gt;    Do While Not rs.EOF&lt;br/&gt;        p = p + 1&lt;br/&gt;        '在状态栏显示&lt;br/&gt;        Application.StatusBar = GetProgress(p, rs.RecordCount)&lt;br/&gt;    &amp;hellip;&amp;hellip;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;非常地实用吧，呵呵。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/1852967.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852967.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
