




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
条款1 如何生成可执行文件.EXE 您可以采用下列两种方式来生成可执行文件.EXE:方法一:在Visual Studio 2005的集成开发环境中,从“生成”菜单中选择“生成解决方案”,即会在项目的bin文件夹中产生.EXE文件。 方式二:在SDK命令提示符窗口下,执行csc命令来编译.EXE文件。 条款2 如何指定.EXE的输出位置虽然可执行文件.EXE默认会保存在项目的bin文件夹中,但是您可以依下列步骤来指定其输出位置:将您的Visual C# 2005项目在Visual Studio 2005的集成开发环境中启动。 在“解决方案资源管理器”中执行下列操作之一: 用鼠标左键双击Properties选项。 在资源管理器窗口中单击鼠标右键,在快捷菜单中选中“属性”选项。 鼠标单击左侧的“生成”索引标签。在“输出路径”文字框中键入您所希望的输出位置,或是单击“浏览”按钮来选择其他输出位置。值得一提的是,如果您希望将.EXE输出至项目的根目录下,可以将此文字框中的内容置空。 单击右上角的“关闭”按钮。 条款3 如何设定启动对象启动对象就是当加载应用程序时所要调用的进入点(Entry Point)。一般来说,我们会将启动对象设定成应用程序的主窗体,或是当应用程序激活时所会执行的Main程序。值得注意的是,类库项目与 ASP.NET Web应用程序项目都没有进入点,因此没有启动对象。第1章应用程序的基础设置技巧要给一个Visual C# 2005的Windows应用程序项目设定启动对象,您必须修改Programcs文件,基本的程序代码如下所示:using System; using SystemCollectionsGeneric;using SystemWindowsForms;namespace CH1staticclass Program/ 应用程序的主要进入点。/STAThreadstaticvoid Main()ApplicationEnableVisualStyles();ApplicationSetCompatibleTextRenderingDefault(false);ApplicationRun(new StartUpForm();条款4关闭窗体与结束应用程序如果您只是要关闭窗体,请调用该窗体的Close方法。因此我们经常在窗体中的“关闭”按钮的Click事件处理函数中编写下列程序代码:this.Close();如果您将应用程序项目的启动窗体设定成某一个窗体,则调用该启动窗体的Close方法时,就会结束应用程序。一般来说,无论在何时结束应用程序,仅调用ApplicationExit方法即可。ApplicationExit方法会结束所有处在运行状态的进 程,并关闭应用程序的所有窗口。ApplicationExit方法并不一定会强制结束应用程序。ApplicationExit方法一般是在消息队 列中调用,并强制ApplicationRun返回。若只是要结束当前线程,则调用ApplicationExitThread方法即可。ApplicationExit方法会引发下列事件,并执行与之相关联的条件动作: 每一个以OpenForms属性表示的窗体都会引发FormClosing事件。您可以通过将事件的FormClosingEventArgs参数的Cancel属性设定为True,取消这个事件。 如果是一个或多个处理例程取消事件,就会传回ApplicationExit而不再执行进一步动作。否则,每一个处于活动状态的窗体都会引发FormClosed事件,然后关闭所有正在运行的消息循环和窗体。 条款117如何在窗体加载时让某一个控件取得焦点在此我们将说明如何在窗体加载时,让某一个控件取得焦点(Focus)即使该控件成为作用控件。我们将示范如何使用下列3种方式来完成此项操作。窗体的ActiveControl属性能够用来取得或设定窗体上的作用控件。因此,您只需将窗体的ActiveControl属性设定成 窗体上的某一个控件,该控件就会成为活动控件。如图8.1所示是程图8.1使Text属性为空字符串的TextBox控件成为作用控件序范例 CH8_DemoForm001.cs的运行画面,它会在窗体加载后,将Text属性为空字符串的TextBox控件设定成活动控件(也就是取得焦点)。 程序代码列示如下: 图8.1使Text属性为空字符串的TextBox控件privatevoid CH4_DemoForm054_Load(object sender, EventArgs e)int nCount =this.Controls.Count;for (int i =0; i = nCount -1; i+)if (this.Controlsi is System.Windows.Forms.TextBox)/ 找出 Text 属性为空字符串的 TextBox 控件。if (this.Controlsi.Text =)/ 使没有任何文字的 TextBox / 控件成为作用控件。this.ActiveControl =this.Controlsi;/ 跳离 For 循环。break;调用控件的Select方法即可启动该控件并使其取得焦点。程序范例CH8_DemoForm002.cs的功能与上一个程序范例CH8_DemoForm001cs完全相同,只不过它如下所示,改用Select方法来使控件取得焦点: this.Controlsi.Select();调用控件的Focus方法即可使该控件取得焦点。不过由于我们是在窗体加载时要使控件取得焦点,因此您必须先将窗体的Visible属性设定成True。 程序范例CH7_DemoForm003.cs的功能与前面两个程序范例完全相同,只不过它如下所示,改用Focus方法来使控件取得焦点: this.Visible =true;.this.Controlsi.Focus();.条款118如何在控件中捕捉按键如何于Windows Form控件中捕捉按键向来是许多程序设计师所关心的课题,基本上,标准的KeyUp、KeyDown与KeyPress事件就足以去捕捉并处理按键。然而问题在于,并非所有的控件会在所有的情况下为所有的按键操作产生这些事件。图8.2CH8_DemoForm004.cs运行画面第8 章探讨重要的人机界面设计技巧如果您希望不管控件的状况如何,都能够顺利地捕捉WindowsForm控件中的按键,必须根据该控件的类派生出一个新的类 并重写ProcessCmdKey方法,并在此重写方法中编写程序代码来捕捉并处理您所需的按键。系统会传递两个参数给ProcessCmdKey方法: msg与keyData。msg参数含有所要处理的窗口信息(例如:WM_KEYDOWN),此窗口信息是以传址方式传递的。keyData参数则会含有 被按下的按键的按键码,也就是其中一个Keys值(注意,keyData参数的类型是Keys枚举类型)。如果CTRL或ALT键也被按下, keyData参数还会含有辅助按键(Modifier Key)信息。您并非一定要使用msg参数,也就是说,您可以忽略它。不过利用msg参数来检测窗口信息倒是一项不错的选择。在稍后的程序范例中,我们会去检测窗口信息 是否为WM_KEYDOWN,以便确认这是一个按键事件。此外,我们也会去检测窗口信息是否为WM_SYSKEYDOWN,以便确认按键组合是否包含辅助 按键。由于DataGridView控件的状况最为复杂,因而在此我们就要示范如何在DataGridView控件中捕捉按键,请切记,您可以将同样的方法应用 在其他的控件中。图82所示是程序范例CH8_DemoForm004.cs的运行画面,从窗体的标题栏变化可以看出,只要DataGridView控 件取得焦点,不论它是否显示数据,都能够捕捉用户在DataGridView控件中的按键。显而易见地,本程序范例的关键在于必须根据 DataGridView控件派生出一个新的类并重写其ProcessCmdKey方法。这里将派生类MyDataGridView的程序代码列示如下 (编写在MyDataGridView.cs中):publicpartialclass MyDataGridView : System.Windows.Forms.DataGridVtectedoverridebool ProcessCmdKey(ref Message msg, Keys keyData)constint WM_KEYDOWN =0x100;constint WM_SYSKEYDOWN =0x104;if (msg.Msg = WM_KEYDOWN) | (msg.Msg = WM_SYSKEYDOWN)switch (keyData)case Keys.Down:this.Parent.Text =向下键已经被捕捉;break;case Keys.Up:this.Parent.Text =向上键已经被捕捉;break;case Keys.Left:this.Parent.Text =向左键已经被捕捉;break;case Keys.Right:this.Parent.Text =向右键已经被捕捉;break;case Keys.Home:this.Parent.Text =Home 键已经被捕捉;break;case Keys.End:this.Parent.Text =End 键已经被捕捉;break;returnbase.ProcessCmdKey(ref msg, keyData);条款 119剪贴板的数据撷取与存入有许多应用程序都会使用剪贴板(Clipboard)作为数据的暂存处,而此项需求通常与用户的操作相关联。举例来说,当我们在文字处理软件中进行剪切、 复制与粘贴等操作时就会使用到剪贴板。由此可知,学会如何将数据存入剪贴板以及如何从剪贴板撷取数据便成为一项非常重要的课题。将数据存入剪贴板要在Windows应用程序中将数据存入剪贴板必须分两方面来讨论:用户操作与程序控制方式。所谓的用户操作就是当用户进行复制或剪切操 作时,会将数据存入剪贴板中。所谓程序控制方式就是如何通过程序代码将数据存入剪贴板中,显然此作法才是值得我们讨论的。要以程控方式将数据存入剪贴板中,应该通过Clipboard类的SetDataObject方法来完成。SetDataObject方法会使用 IDataObject接口将数据以“多重格式”保存在剪贴板中,而此举最大的好处是,以后可以采用各种不同的格式从剪贴板中撷取数据。毕竟当我们将数据 存入剪贴板时,可能无法确定未来会采用哪一种格式从剪贴板中撷取数据,为了提高从剪贴板撷取数据的机会,以多重格式将数据保存在剪贴板中是非常恰当的做 法。SetDataObject方法共提供如图8.3所示的3个重载版本。语法中的data参数即是您要存入剪贴板中的数据,第二个参数copy用来决定在结 束应用程序之后是否要保留剪贴板中的数据。如果您没有指定第二个参数或是将第二个参数设定成False,则当应用程序结束时,数据会从剪贴板中删除;如果 您将第二个参数设定成True,则当应用程序结束时,数据仍然会保留在剪贴板中。值得注意的是,如果剪贴板忙于运行其他进程或应用程序,则尝试将数据加入到剪贴板时有可能会失败。如果要在经常使用剪贴板的环境中解决这个问题,第三个重 载版本的SetDataObject方法就显得非常有用。您可以使用第3个参数retryTimes来设定尝试将数据放置于剪贴板上的次数,并使用第4个 参数retryDelay来设定在每一次尝试之间暂停的毫秒数。以下面的简例而言,表示将名称为TextBox1的TextBox控件中的数据存入剪贴板中:Clipboard.SetDataObject(TextBox1.Text);事情就这样结束了吗?当然还没有。上面这一个简例其实是一种非常简单的情况,因为位于TextBox控件中的数据是由用户所输入的。然而,您可曾想过一个 问题,假设我希望将某一个图片文件(.bmp、.jpg或.gif)的图像数据存入剪贴板,或是希望将某一个文字文件中的文字数据存入剪贴板的话,该怎么 做呢?诸如此类情况,还必须借助于DataObject类才能顺利取得要存入剪贴板中的数据,并将其作为SetDataObject方法的data参数。DataObject类实现IDataObject接口,它的各种方法提供了不受格式影响的数据传输机制。DataObject主要是使用于剪贴板和拖放 操作的相关处理中。DataObject类提供IDataObject接口的建议实现,也就是说,您应该使用DataObject而不要自己去实现 IDataObject。您可以将不同格式的多项数据存储在DataObject对象中。这样做的最大好处是,以后可以采用各种不同的格式从DataObject中撷取数据。毕竟 当我们将数据存入DataObject对象时,可能无法确定未来会采用哪一种格式从DataObject对象中撷取数据,为了提高从DataObject 对象撷取数据的机会,以多重格式将数据存储在DataObject对象中是最恰当的做法。如果您要将数据存储在DataObject对象中,请将数据传递给DataObject的构造函数(Constructor)或是在创建 DataObject对象之后再调用其SetData方法。要想从DataObject对象中以特定格式撷取数据,请调用DataObject对象的 GetData方法。稍后的程序范例将会示范如何使用DataObject对象,请稍安勿躁。从剪贴板撷取数据如果您要从剪贴板中撷取数据,请依下列步骤进行:1.首先,请调用Clipboard类的GetDataObject方法。GetDataObject方法会将剪贴板中的数据以一个实现IDataObject接口的对象返回。例如:IDataObject data = Clipboard.GetDataObject();2.接下来,请调用被GetDataObject方法返回的对象(也就是实现IDataObject接口的对象)的GetDataPresent方法,以便检测数据是否含有您所需的格式。3.如果GetDataPresent方法返回True表示存在您所需的格式,最后的工作就是调用被返回对象的GetData方法,以便以指定的格式取得数据。例如:if (data.GetDataPresent(DataFormats.Text)TextBox1.Text = data.GetData(DataFormats.Text).ToString();图8.4CH8_DemoForm005.cs运行画面程序范例1图8.4所示是程序范例CH8_DemoForm005.cs的运行画面,它示范如何使用DataObject与 Clipboard类将图形文件中的图像数据复制到剪贴板,然后再将剪贴板中的图像数据复制到文件中。完成本程序的执行操作后,剪贴板中的图像数据会分别 被复制到C磁盘的Test.bmp、Test.gif与Test.jpeg等3个图形文件中。相关程序代码如下所示:privatevoid btnCopyImageToClipboard_Click(object sender, EventArgs e)try/ 创建一个 DataObject 对象。DataObject myDataObject =new DataObject();/ 将项目的图像资源存入 DataObject 对象中,/ 并设定图像数据可以被转换成其他格式。myDataObject.SetData(DataFormats.Bitmap, true, Resources.章立民的大头照);/ 将持有图形文件的图像数据的 DataObject 对象/ 存入剪贴板中。Clipboard.SetDataObject(myDataObject, true);btnSaveClipboardToFile.Enabled =true;./ 将剪贴板中的图像数据复制到文件中。privatevoid btnSaveClipboardToFile_Click(object sender, EventArgs e)try/ 将剪贴板中的数据以一个实现 IDataObject接口的对象返回。IDataObject oDataObj = Clipboard.GetDataObject();if (oDataObj !=null)/ 检测从剪贴板所返回的数据是否存在Windows位图的格式。if (oDataObj.GetDataPresent(DataFormats.Bitmap)/ 以Windows位图格式取得影像数据。System.Drawing.Image oImgObj =(Image)(oDataObj.GetData(DataFormats.Bitmap, true);/ 存储成Bitmap。oImgObj.Save(C:Test.bmp,System.Drawing.Imaging.ImageFormat.Bmp);/ 存储成JPEG。oImgObj.Save(C:Test.jpeg,System.Drawing.Imaging.ImageFormat.Jpeg);/ 存储成GIF。oImgObj.Save(C:Test.gif,System.Drawing.Imaging.ImageFormat.Gif);Process.Start(explorer.exe, C:);.程序范例2程序范例CH8_DemoForm006.cs详细示范如何以各种格式将数据存入剪贴板并且从剪贴板中以特定格式撷取数据。首先,我们来查看其功能特性:您可以将文本字符串“From Microsoft Community!”以特定的格式或所有的格式(即多重格式)复制到剪贴板中,然后再以特定格式从剪贴板中撷取出来并贴入RichTextBox或TextBox控件中。 以 图8.5所示的操作而言,我们将文本字符串“From Microsoft Community!”以所有的格式(即多重格式)复制到剪贴板中,然后以Rich TextFormat从剪贴板中撷取出来。请注意,由于我们以多重格式将数据存入剪贴板,因此在“粘贴为”的子菜单项目中会列出剪贴板中所有可用的格式。以图8.6所示的操作而言,我们将文本字符串“From Microsoft Community!”以HTM格式复制到剪贴板中,然后以HTML格式从剪贴板中撷取出来。请注意,由于我们以单一格式将数据存入剪贴板,因此在“粘贴为”的子菜单项目中只会列出一种格式。图8.5将文本字符串以所有格式进行复制,以Rich Text格式撷取图8.6将文本字符串以HTM格式进行 复制与撷取操作本程序范例还可以将项目的图像资源“章立民_01”复制到剪贴板,然后再从剪贴板中取出并粘贴到RichTextBox或PictureBox控件中(如图8.7所示)。 当然,您也可以在其他应用程序中将数据复制到剪贴板,然后再于本程序范例中进行粘贴操作;反之亦然。例如,假设您已经在Microsoft Word中复制文字,则“粘贴为”菜单将会如图8.8所示,列出剪贴板中所有可用的格式。 充分了解了本程序范例的功能特性之后,我们要研究本程序范例的编写技巧,说明如下:首先,您必须创建各个变量来持有文本字符串“From Microsoft Taiwan Community!”以及项目的图像资源“章立民_01.JPG”:/ 下列文本字符串会以各种不同格式来存储文字 / From Microsoft Taiwan Community!。privatestring strText =From Microsoft Community!;privatestring strHTML =From Microsoft +Community!;图8.7将项目的图像资源进行复制与粘贴操作图8.8显示剪贴板中所有可用格式/ 将文本字符串 From Microsoft Taiwan! 以标准的 ANSI 文字格式复制到剪贴板。privatevoid tsmiCopyTextAsText_Click(object sender, EventArgs e)Clipboard.SetDataObject(strText, true);当您从“编辑”菜单中选取“将文字复制为Text”命令时,将会执行以下的程序代码: / 将文本字符串 From Microsoft Taiwan! 以标准的 ANSI 文字格式复制到剪贴板。privatevoid tsmiCopyTextAsText_Click(object sender, EventArgs e)Clipboard.SetDataObject(strText, true);当您从“编辑”菜单中选取“将文字复制为HTML”命令时,将会运行以下的程序代码: / 将文本字符串 From Microsoft Taiwan! 以HTML 格式复制到剪贴板。privatevoid tsmiCopyTextAsHTML_Click(object sender, EventArgs e)DataObject myDataObject =new DataObject();myDataObject.SetData(DataFormats.Html, strHTML);Clipboard.SetDataObject(myDataObject, true);当您从“编辑”菜单中选取“将文字复制为RTF”命令时,将会执行以下的程序代码: / 将文本字符串 From Microsoft Taiwan! 以 XML 格式复制到剪贴板。/ 请注意,由于 XML 并不是剪贴板所自带的格式,因而这代表/ 一种独有的格式。因为此格式在本应用程序之外可能不具有意/ 义,所以我们将 SetDataObject 方法的第二个参数设定成 False,/ 来要求在结束本程序之后不保留剪贴板上的数据,以便不让其他应/ 用程序使用。privatevoid tsmiCopyTextAsXML_Click(object sender, EventArgs e)DataObject myDataObject =new DataObject();myDataObject.SetData(MyInternalXmlFormat, strXML);Clipboard.SetDataObject(myDataObject, false);当您从“编辑”菜单中选取“将文字复制为XML”命令时,将会执行以下的程序代码: / 将文本字符串 From Microsoft Taiwan! 以 XML 格式复制到剪贴板。/ 请注意,由于 XML 并不是剪贴板所自带的格式,因而这代表/ 一种独有的格式。因为此格式在本应用程序之外可能不具有意/ 义,所以我们将 SetDataObject 方法的第二个参数设定成 False,/ 来要求在结束本程序之后不保留剪贴板上的数据,以便不让其他应/ 用程序使用。privatevoid tsmiCopyTextAsXML_Click(object sender, EventArgs e)DataObject myDataObject =new DataObject();myDataObject.SetData(MyInternalXmlFormat, strXML);Clipboard.SetDataObject(myDataObject, false);当您从“编辑”菜单中选取“将文字复制为所有的格式”命令时,将会执行以下的程序代码: / 将文本字符串 From Microsoft Taiwan! 以所有可用的格式复制到剪贴/ 板。您只能使用 DataObject 对象来完成此项操作。我们会为每一种/ 格式调用 DataObject 对象的 SetData 方法以便将文本字符串以该格式/ 存入 DataObject 对象中。privatevoid tsmiCopyTextAsAllFormats_Click(object sender, EventArgs e)/ 创建一个 DataObject 对象。DataObject myDataObject =new DataObject();/ 将文本字符串以标准的ANSI 文字格式存入 DataObject 对象中。myDataObject.SetData(DataFormats.Text, strText);/ 将文本字符串以标准的 Windows Unicode 文字格式存入 DataObject 对象中。myDataObject.SetData(DataFormats.UnicodeText, strText);/ 将文本字符串以 HTML 格式存入 DataObject 对象中。myDataObject.SetData(DataFormats.Html, strHTML);/ 将文本字符串以 RTF 格式存入 DataObject 对象中。myDataObject.SetData(DataFormats.Rtf, strRTF);/ 将文本字符串以 XML 格式存入 DataObject 对象中。myDataObject.SetData(MyInternalXmlFormat, strXML);/ 将DataObject对象与其包含的所有格式数据存入剪贴板中。Clipboard.SetDataObject(myDataObject, true);当您从“编辑”菜单中选取“将图像复制为Bitmap”命令时,将会执行以下的程序代码: 将图形文件中的图像数据复制到剪贴板。privatevoid tsmiCopyImageAsBitmap_Click(object sender, EventArgs e)try/ 创建一个 DataObject 对象。DataObject myDataObject =new DataObject();/ 将 myImage 中的图像数据存入 DataObject 对象中,/ 并设定图像数据可以被转换成其他格式。myDataObject.SetData(DataFormats.Bitmap, true, myImage);/ 将持有图形文件的图像数据的 DataObject对象存入剪贴板中。Clipboard.SetDataObject(myDataObject, true);.请大家注意,“粘贴为”菜单是动态产生的。我们将产生“粘贴为”菜单及其子菜单项目标程序代码编写在“编辑”菜单项目的 DropDownOpening事件处理函数中。之所以如此做,是为了能够动态地根据剪贴板中数据的可用格式来创建“粘贴为”菜单的各个子菜单。相关程序 代码如下所示: privatevoid PasteAsMenuEventHandler(object sender, System.EventArgs e)string strType; / 持有格式的值。object obj; / 被用来持有要粘贴的数据。/ 清除 RichTextBox。this.rtbPaste.Clear();/ 清除 TextBox。this.txtPaste.Clear();/ 清除 PictureBox。this.picturePaste.Image =null;/ 取得用户所选取之格式的文字。strType = (ToolStripMenuItem)(sender).Text;/ 确保剪贴板支持所选取的格式。if (Clipboard.GetDataObject().GetDataPresent(strType)/ 依所要求的格式从剪贴板中取得数据并赋给obj。obj = Clipboard.GetDataObject().GetData(strType);if (obj !=null)/ 使用 RichTextBox 控件的 Paste方法以便以指定的剪贴板格式/ 将剪贴板的内容粘贴到 RichTextBox控件中。this.rtbPaste.Paste(DataFormats.GetFormat(strType);/ 将纯文字表示粘贴到 TextBox 控件中。if (obj.GetType().ToString() =System.String)this.txtPaste.AppendText(string)(obj);elsethis.txtPaste.AppendText(obj.GetType().ToString();/ 尝试粘贴到PictureBox控件中。/ 如果失败的话,表示PictureBox不支持此格式,/ 因此会将 Image 设定成 Null 以便清除图像。trypicturePaste.Image = (Image)(obj);.以下所示则是事件处理函数PasteAsMenuEventHandler的程序代码,它会负责处理所有的粘贴菜单项目的Click事件,而不管哪一种格式被选取: privatevoid PasteAsMenuEventHandler(object sender, System.EventArgs e)string strType; / 持有格式的值。object obj; / 被用来持有要粘贴的数据。/ 清除 RichTextBox。this.rtbPaste.Clear();/ 清除 TextBox。this.txtPaste.Clear();/ 清除 PictureBox。this.picturePaste.Image =null;/ 取得用户所选取之格式的文字。strType = (ToolStripMenuItem)(sender).Text;/ 确保剪贴板支持所选取的格式。if (Clipboard.GetDataObject().GetDataPresent(strType)/ 依所要求的格式从剪贴板中取得数据并赋给obj。obj = Clipboard.GetDataObject().GetData(strType);if (obj !=null)/ 使用 RichTextBox 控件的 Paste方法以便以指定的剪贴板格式/ 将剪贴板的内容粘贴到 RichTextBox控件中。this.rtbPaste.Paste(DataFormats.GetFormat(strType);/ 将纯文字表示粘贴到 TextBox 控件中。if (obj.GetType().ToString() =System.String)this.txtPaste.AppendText(string)(obj);elsethis.txtPaste.AppendText(obj.GetType().ToString();/ 尝试粘贴到PictureBox控件中。/ 如果失败的话,表示PictureBox不支持此格式,/ 因此会将 Image 设定成 Null 以便清除图像。trypicturePaste.Image = (Image)(obj);.程序范例3图8.9所示是程序范例CH8_DemoForm007.cs的运行画面,它示范如何使用DataObject与Clipboard类将项目的音频数据复制到剪贴板,然后再播放剪贴板中的音频数据。相关程序代码如下所示: 图8.9复制与播放音频数据privatevoid btnCopyWavAudioToClipboard_Click(object sender, EventArgs e)try/ 创建一个 DataObject 对象。DataObject myDataObject =new DataObject();/ 将项目的音频数据GoTop存入DataObject对象中,/ 并设定音频数据可以被转换成其他格式。myDataObject.SetData(DataFormats.WaveAudio, true, Resources.GoTop);/ 将持有音频数据的 DataObject 对象存入剪贴板中。Clipboard.SetDataObject(myDataObject, true);btnPlayClipboardWavAudio.Enabled =true;.privatevoid btnPlayClipboardWavAudio_Click(object sender, EventArgs e)try/ 将剪贴板中的数据以一个/ 实现 IDataObject 接口的对象返回。IDataObject oDataObj = Clipboard.GetDataObject();if (oDataObj !=null)/ 检测从剪贴板所返回的数据是否存在 Wav Audio 的格式。if (oDataObj.GetDataPresent(DataFormats.WaveAudio)/ 以 Wave Audio 格式取得音频数据并进行播放。SoundPlayer player =new SoundPlayer(System.IO.Stream)(oDataObj.GetData(DataFormats.WaveAudio, true);player.Play();.条款120.NET Framework 2.0对剪贴板存取操作做了哪些强化为了让剪贴板的数据存取操作更加便利且单纯化,.NET Framework 2.0替Clipboard类新增了下列方法:您现在可以调用Clipboard.Clear方法来清除剪贴板中的所有数据。不过由于剪贴板并非是单一程序所使用的,而是多个进程所共享的,因此在调用Clear方法之前,请先确认此举不会对其他的进程造成不良影响。 我 们在前一节中一再强调,Clipboard类的SetDataObject方法会使用IDataObject接口将数据以“多重格式”存储在剪贴板中,而 此举最大的好处是,以后可以采用各种不同的格式从剪贴板中撷取数据。但是或许您就是想以特定的单一数据格式来将数据存储在剪贴板中,而不需要使用多重格 式,为了让您以更直接的方式来完成此类操作,Clipboard类现在新增了下列数个前缀为Set的方法来让您将数据以特定格式存入剪贴板中,而不再需要 通过DataObject对象来完成: Clipboard.SetText方法能够将文字数据存入剪贴板中。 Clipboard.SetImage方法能够将一个Image以Bitmap格式存入剪贴板中。 Clipboard.SetAudio方法能够将数据以WaveAudio格式存入剪贴板中。 Clipboard.SetFileDropList方法能够将一个文件名称集合以FileDrop 格式存入剪贴板中。 Clipboard.SetData方法能够将数据以特定的格式存入剪贴板中。 在我们从剪贴板提取数据之前,通常会先确认是否存在所需格式的数据。为了帮助您以更直接且便利的方式完成此类操作,Clipboard类现在新增了下列数个前缀为Contains的方法,而不再需要通过IDataObject接口来完成: Clipboard.ContainsText方法能够判断剪贴板中是否存在文字数据。 Clipboard.ContainsImage方法能够判断剪贴板中是否存在Bitmap格式的数据或是数据能否转换成Bitmap格式。 Clipboard.ContainsFileDropList方法能够判断剪贴板中是否存在FileDrop格式的数据或是数据能否转换成FileDrop格式。 Clipboard.ContainsAudio方法能够判断剪贴板中是否存在WaveAudio格式的数据。 Clipboard.ContainsData方法能够判断剪贴板中是否存在指定格式的数据或是数据能够转换成所指定的格式。 确认剪贴板中存在所指定格式的数据后,接下来就是要将该数据提取出来。Clipboard类现在新增了下列数个前缀为Get的方法,来让您直接提取剪贴板中特定格式的数据,而不再需要通过IDataObject接口来完成: Clipboard.GetText方法能够从剪贴板中提取文字数据。 Clipboard.GetImage方法能够从剪贴板中提取图像数据。 Clipboard.GetFileDropList方法能够从剪贴板中提取文件名称的集合。 Clipboard.GetAudioStream方法能够从剪贴板中提取音频数据流。 Clipboard.GetData方法能够从剪贴板中提取特定格式的数据。 显而易见地,借助于Clipboard类新增的这些方法,将使得剪贴板的数据存取操作变得更加容易与直观。现在,我们就要用这些方法,来改写前一节的程序范例。程序范例1程序范例CH8_DemoForm008.cs的功能用途与前一节的第一个程序范例CH8_DemoForm005.cs完全相同,只不过本程序范例 CH8_DemoForm008.cs改用Clipboard类所新提供的SetImage、ContainsImage与GetImage方法来进行剪 贴板的图像数据的存取操作。从以下的程序代码可以看出,新的方法可以让程序代码更为精简且容易了解:privatevoid btnCopyImageToClipboard_Click(object sender, EventArgs e)try/ 将项目的图
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿色建筑施工环保措施大全
- 小学数学单元综合测试题集
- 企业分立后财务处理及案例分享
- 六年级数学下册第一单元测试题
- 客户投诉处理与跟踪记录管理表模板
- 线上个别辅导教学活动方案
- 制造业生产成本管控措施
- 数字化转型项目计划书范本
- 快递物流配送效率提升实操方案
- 变电站电气设备维护保养指导手册
- 中医治未病健康宣教
- Ice-O-Matic CIM登峰系列制冰机培训手册
- 《穴位埋线疗法》课件
- 【大型集装箱船舶港口断缆事故预防应急处理及案例探析7500字(论文)】
- 发展汉语-初级读写-第一课-你好
- 律师事务所人事管理制度
- 高中英语完形填空高频词汇300个
- 2023-2025年世纪公园综合养护项目招标文件
- 脑梗塞并出血护理查房
- 男朋友男德守则100条
- 医院感染科室院感管理委员会会议记录
评论
0/150
提交评论