技术开发 频道

剪贴板的数据撷取与存入


【IT168技术文档】

  有许多应用程序都会使用剪贴板(Clipboard)作为数据的暂存处,而此项需求通常与用户的操作相关联。举例来说,当我们在文字处理软件中进行剪切、复制与粘贴等操作时就会使用到剪贴板。由此可知,学会如何将数据存入剪贴板以及如何从剪贴板撷取数据便成为一项非常重要的课题。
将数据存入剪贴板

  要在Windows应用程序中将数据存入剪贴板必须分两方面来讨论:用户操作与程序控制方式。所谓的用户操作就是当用户进行复制或剪切操作时,会将数据存入剪贴板中。所谓程序控制方式就是如何通过程序代码将数据存入剪贴板中,显然此作法才是值得我们讨论的。

  要以程控方式将数据存入剪贴板中,应该通过Clipboard类的SetDataObject方法来完成。SetDataObject方法会使用 IDataObject接口将数据以“多重格式”保存在剪贴板中,而此举最大的好处是,以后可以采用各种不同的格式从剪贴板中撷取数据。毕竟当我们将数据存入剪贴板时,可能无法确定未来会采用哪一种格式从剪贴板中撷取数据,为了提高从剪贴板撷取数据的机会,以多重格式将数据保存在剪贴板中是非常恰当的做法。

  SetDataObject方法共提供如图8.3所示的3个重载版本。语法中的data参数即是您要存入剪贴板中的数据,第二个参数copy用来决定在结束应用程序之后是否要保留剪贴板中的数据。如果您没有指定第二个参数或是将第二个参数设定成False,则当应用程序结束时,数据会从剪贴板中删除;如果您将第二个参数设定成True,则当应用程序结束时,数据仍然会保留在剪贴板中。

  值得注意的是,如果剪贴板忙于运行其他进程或应用程序,则尝试将数据加入到剪贴板时有可能会失败。如果要在经常使用剪贴板的环境中解决这个问题,第三个重载版本的SetDataObject方法就显得非常有用。您可以使用第3个参数retryTimes来设定尝试将数据放置于剪贴板上的次数,并使用第4个参数retryDelay来设定在每一次尝试之间暂停的毫秒数。

  <P align="center"><IMG src="/BookFiles/133/00/image003.jpg" border=0 /></P>
 
  以下面的简例而言,表示将名称为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(); }
0
相关文章