所有表单上的KeyDown事件都会更改语言

时间:2014-02-08 15:49:43

标签: c#

我开发了一个可以改变英语和匈牙利语之间语言的应用程序。该软件使用.resx个文件,当用户按下 F2 标签,按钮和其他控件时,它们的Text属性将从.resx文件中更改。

没关系,但是当我打开多个表单时,KeyDown事件自然会更改焦点表单中的控件。所以我的问题是:如何在所有打开的表单中捕获 F2 击键?

2 个答案:

答案 0 :(得分:1)

您可以使用事件来实现此目的。我不知道您使用的是哪种技术。 WinForms或WPF。

如果您使用MVVM在WPF技术中开发此功能,那么您可以在类中声明'SelectedLanguage'属性,让'Langugage'实现INotifyPropertyChanged接口。使用此类派生您的其他视图模型,然后在“SelectedLanguage”propertyChanged事件上,您可以通知每个视图模型有关语言更改的信息,您可以使用该方法读取资源文件和更改UI的值。

可能是我在技术方面脱离了背景。但事件机制或观察者模式将解决您的问题。

答案 1 :(得分:0)

注意:基于你问题中的线索,我假设是Winforms而不是WPF:

how can I capture the F2 keystroke in all opened Forms?你不能,不能没有一些荒谬复杂的代码。您最接近的方法是将一个表格中的事件重新分配给其他表格。在任何情况下,您都需要一种方法来跟踪打开的窗口,当其中任何一个点击F2键时,您需要告诉所有打开的表单以更改语言。

在您创建新表单的应用程序中的某个位置,您需要一个类似List<Form>的集合,例如,它将保存您现有表单的列表。 (您也可以尝试在Control对象中使用内置集合)每当您创建一个新表单时,添加到此集合,当一个表单关闭时,您应该删除它。当这些表单中的任何一个捕获 F2 键时,您就会遍历该集合,告诉每个表单切换其语言。

这将是您从Form类继承并添加自己的属性和方法以使所有表单中的行为统一的好地方。

这是用于表格间通信的example article that uses delegates