2012-03-02 134 views
4

我希望能夠在區域和語言操作系統的設置(Windows 7)從C#程序改變。我不反對執行命令行命令,但我只是儘量得到的發現如何啓動區域和語言對話框:control /name Microsoft.RegionAndLanguage更改「區域和語言」設置操作系統編程

這是一種語言的本地化問題,在Control就像DateTimePicker只能使用Windows 區域和語言設置(請參閱details);但是更新操作系統以符合應用程序的語言設置超出了此範圍,並最終成爲預期的目標。

建議和/或解決方法,將不勝感激。

+0

我認爲你不應該改變系統的語言設置。您可以做的最好的方法是創建一個新的可本地化的DateTimePicker控件,或者搜索現成的控件。 – vulkanino 2012-03-02 09:02:56

+0

只是猜測,不會爲Date選取器控件設置自定義格式來解決您的目的嗎? – V4Vendetta 2012-03-02 09:10:44

+0

@ V4Vendetta不,自定義格式不夠,他可能想更改其他設置,比如一週的第一天等。 – vulkanino 2012-03-02 09:15:36

回答

4

我設法實現的唯一解決方案是修改註冊表。在Windows 7中,更改語言時,會在註冊表的子項中添加一個新條目:HKEY_CURRENT_USER\Control Panel\Desktop。該密鑰將包含REG_MULTI_SZ類型的條目PreferredUILanguagesPending,其值將決定UI語言。要應用更改,當前用戶需要註銷並重新登錄。這可以使用以下代碼完成:

RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true); 
string[] lang = {"en-ZA"}; 
key.SetValue("PreferredUILanguagesPending", lang, RegistryValueKind.MultiString); 

語言包需要先安裝才能設置。有關語言包的列表,請查看herehere。當安裝了超過1個語言包時,更改UI語言的選項將出現在Control Panel > Region and Language > Keyboards and Languages > Display language中。

3

聽起來我好像改變應用程序的文化/的UICulture應足以

例如

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE"); 
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE"); 
+1

不這麼認爲,在Microsoft提供的鏈接中提到:_This行爲是因爲DateTimePicker控件和MonthCalendar控件是Microsoft Windows通用控件。因此,操作系統的用戶區域設置確定了這些控件的用戶界面._ – vulkanino 2012-03-02 09:04:20

+0

我正在糾正並同意您對OPS問題的評論,建立一個新控件 – Dominik 2012-03-02 09:08:26

1

我發現了DateTimePicker一個很好的替代: http://www.visualhint.com/fieldpackeditor

你將不得不與所有的系統控制和系統對話框相同的問題,如OpenFileDialogPrintDialog,等等,它們不是本地化在.NET中。

但是考慮一下,爲什麼要改變應用程序的文化?用戶可以使用控制面板自己更改自己的地區和語言設置,爲什麼應用程序會覆蓋這些設置?

+0

我們只在一個表單中使用'DateTimePicker';我不認爲我們公司會批准購買新軟件來實現這一目標。但是,我意識到我的目標超越了'DateTimePicker'。謝謝您的回覆。 – Pooven 2012-03-02 09:39:40

0

我認爲,你正在思考與你所需要的相反。通常應用程序可能需要幫助/榮譽/滿足用戶操作系統設置,而不是爲了應用程序的方便而更改它們。看一看後用類似於您的問題:How can I change a Windows user's regional settings/date format?

+0

謝謝你的回覆。我還發現了一個類似的帖子[這裏](http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/93ba702d-b92c-43f2-adf9-1c8c3d4c2e4e/)。似乎修改註冊表是唯一的可能性。 – Pooven 2012-03-02 09:37:55

-1

這是一種語言的本地化問題,在那裏同樣的DateTimePicker控件只能使用 窗口>區域和語言設置

堅果。認真。想想你在這裏做什麼;我開始你的程序,你重新配置我的整個計算機,使一個小的UI元素工作?最好不要詢問或告訴我?

有些法律反對 - 這可以被視爲未經授權的操縱計算機。

使用適當的控制並正確編程;但不要在這個層面上進行破壞。

+0

對不起,你對此感到如此強烈。我已更新我的帖子以提供更好的上下文:最終,此行爲將是最終用戶的預期結果。 – Pooven 2012-03-02 09:40:55

+0

同意。這就是說你是一個非常不尋常的軟件,所以...承認我說這不明顯。 – TomTom 2012-03-02 10:32:33

+0

我明白了;我沒有把自己的情況定義得很好,以徵求建議。我們生活,我們學習:) – Pooven 2012-03-02 15:43:22

相關問題