关于winforms:如何以通用方式启用/禁用“剪切/复制/粘贴”菜单和工具栏项?

关于winforms:如何以通用方式启用/禁用“剪切/复制/粘贴”菜单和工具栏项?

How do I enable/disable Cut/Copy/Paste menu and toolbar items in a generic way?

我有一个Windows窗体应用程序,带有文本框,组合框,datagridview等控件。
这些控件允许用户使用剪贴板,即剪切/复制和粘贴文本。 也可以删除文本(与剪贴板无关)。

我的应用程序有一个菜单栏,其中包含一个包含剪切/复制/粘贴/删除项的"编辑"项,还有一个带有这些项的工具栏。 如何根据具有焦点的控件的状态正确启用/禁用这些项目?

我正在寻找一种通用的方式,即我寻求一次实现的实现,并且可以在将来独立于我的应用程序将使用的控件而重复使用。


没有用于从Windows窗体控件获取剪切/复制/粘贴信息的通用接口或方法集。

我建议您最好的方法是为每种控件类型创建一个包装器类。然后,当您想要更新菜单状态时,您将获得具有焦点的当前控件并为其创建适当的包装。然后,您要求包装器提供所需的状态信息。这样,您只需要为所使用的每种控件类型创建包装器实现即可。开始时有些麻烦,但其他时候您只需要添加遇到的新控件即可。

剪贴板信息容易得多,因为您可以询问剪贴板单例内部是否有数据以及数据的类型。然后,您仍然需要询问目标控件是否可以接受该类型的信息,因此仍然需要做更多的工作。


为每个启用/禁用组创建一个阵列。将控件添加到数组中(当然,控件的类型必须正确,例如Object或Any等,取决于您使用的编程语言)。
然后要启用,请禁用遍历数组并为每个控件调用enable / disable方法或函数。同样,根据语言,您可能需要回退。


推荐阅读