如何以通用方式启用/禁用"剪切/复制/粘贴"菜单和工具栏项?
时间:2020-03-06 14:21:08 来源:igfitidea点击:
我有一个Windows窗体应用程序,该控件带有文本框,组合框,datagridview等控件。
这些控件允许用户使用剪贴板,即剪切/复制和粘贴文本。也可以删除文本(与剪贴板无关)。
我的应用程序有一个菜单栏,其中包含一个包含剪切/复制/粘贴/删除项的"编辑"项,还有一个带有这些项的工具栏。如何根据具有焦点的控件的状态正确启用/禁用这些项目?
我正在寻找一种通用的方式,即我寻求一次实现的实现,并且可以在将来独立于我的应用程序将使用的控件而重复使用。
解决方案
为每个启用/禁用组创建一个数组。将控件添加到数组中(当然,控件的类型必须正确,例如Object或者Any等,取决于我们使用的编程语言)。
然后要启用,请禁用遍历数组并为每个控件调用enable / disable方法或者函数。同样,根据语言,我们可能需要回退。
没有用于从Windows窗体控件获取剪切/复制/粘贴信息的通用接口或者方法集。
我建议我们最好的方法是为每种控件类型创建一个包装器类。然后,当我们要更新菜单状态时,我们将获得具有焦点的当前控件并为其创建适当的包装器。然后,我们要求包装器提供所需的状态信息。这样,我们只需要为所使用的每种控件类型创建包装器实现即可。开始时有些麻烦,但其他时候我们只需要添加遇到的新控件即可。
剪贴板信息容易得多,因为我们可以询问剪贴板单例内部是否有数据以及数据的类型。然后,我们仍然需要询问目标控件是否可以接受这种类型的信息,因此仍然需要做更多的工作。