2010-12-17 26 views
0

我工作的公司有古怪的舊數據庫系統和許多遺留應用程序,當他們遇到非ascii字符時會拋出硬錯誤。如何在整個.Net winforms應用程序中限制對有限字符集的輸入。 (vb.net/c#)

因爲他們意識到這些應用程序需要去,所以他們開始在vb.net WinForms應用程序中封裝後端,並且在對這些舊系統進行了1.5年的封裝之後,他們發現了這個錯誤。

他們聘請我來解決這個問題。 :(

在許多情況下,UI是使用數據綁定和來自DevExpress等第三方的FormView-esque解決方案構建的,因此,需要大量工作來分解UI並使用類似的中間效用函數重新構建它們以下幾點:

TextBox.Text = Sanitize(dataObject.Value); 
and 
dataObject.Value = Sanitize(TextBox.Text); 

我找的,我可以破解應用程序的CultureInfo(或其他財產)的方式,使所有的文本框本身只能處理ASCII,類似行爲的許多Web瀏覽器似乎展覽

另外作爲一個說明:許多文字輸入來自開發快,所以即使是正在使用的文本框被包裝起來。

有沒有辦法附加到窗體的ControlAdded事件並將控件設置爲僅處理ASCII或utf-8/utf-7?

有人在那裏遇到過這種情況。如果沒有一些可怕的黑客入侵,我需要2年才能修復所有這些應用。

回答

1

您可以遞歸處理ControlAdded爲每個窗體修改每個文本框。

然後,處理KeyPress事件並設置e.Handled = true如果您不喜歡該字符。

對於DevExpress編輯器,您需要處理TextEditTextBoxMaskBox,但不能同時處理兩者。