簡體   English   中英

在所有窗體上使用KeyDown事件更改語言

[英]Language change with KeyDown event on all Form

我開發了可以在英語和匈牙利語之間切換語言的應用程序。 該軟件適用於.resx文件,當用戶按F2鍵時,標簽,按鈕和其他控件的Text屬性將從.resx文件中更改。

沒關系,但是當我打開多個Form時, KeyDown事件自然會更改聚焦Form中的那些控件。 所以我的問題是:如何在所有打開的窗體中捕獲F2擊鍵?

您可能可以使用事件來實現此目的。 我不知道您正在使用哪種技術。 WinForms或WPF。

如果您正在使用MVVM在WPF技術中開發此功能,那么您可以在實現INotifyPropertyChanged接口的類“ Langugage”中聲明“ SelectedLanguage”屬性。 使用此類派生其他視圖模型,然后在“ SelectedLanguage” propertyChanged事件中,可以通知每個視圖模型有關語言的更改,您可以使用該方法來讀取資源文件和更改UI值。

可能是我在技術方面沒有背景。 但是事件機制或觀察者模式將解決您的問題。

注意:根據您問題的線索,我假設使用Winforms而不是WPF:

how can I capture the F2 keystroke in all opened Forms? 您不能沒有一些可笑的復雜代碼。 您可以通過將事件以一種形式重新分發給其他形式來得到。 無論如何,您都需要一種跟蹤打開的窗口的方法,當在其中任何一個窗口中按下F2鍵時,您都需要告訴所有打開的窗體以更改語言。

在您的應用程序中創建新表單的某個地方,您需要一個類似List<Form>的集合,該集合將保存現有表單的列表。 (您也可以嘗試在Control對象中使用內置集合)。無論何時創建新表單,都將添加到該集合中,關閉該表單時應將其刪除。 而且,當這些形式中的任何一個捕獲到F2鍵時,您便會遍歷該集合,並告訴每個窗口切換其語言。

這是從Form類繼承並添加自己的屬性和方法以使行為在所有表單中統一的好地方。

這是示例示例,示例使用委托進行表單間的通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM