我使用相同的表單輸入新數據並輸入現有記錄,例如,對於供應商,庫存項目,客戶等。在編輯模式中,我將所有文本框設置爲只讀,並且一旦用戶選擇了要編輯的記錄,我將只讀狀態重置爲false。表單可能包含多個選項卡(或Telerik中的PageViewPages),每個選項卡都包含許多可編輯控件,必須將其設置爲只讀true/false。將不同控件作爲參數發送到方法
我使用此代碼將容器的數組發送到名爲FormControl的類。
RadGroupBox [] containerList = { this.pageGeneral, this.pageBankDetail, this.pageContact };
FormControl.ControlsReadOnly(containerList, false); // /truefalse to set Read-only status
在FormControl類中,我有以下代碼來設置只讀狀態。
public static void ControlsReadOnly(RadGroupBox [] containerList, bool readOnlyStatus)
{
var container = (containerList[0] as RadGroupBox);
for (int i = 0; i < containerList.Length; i++)
{
foreach (var control in container.Controls)
{
RadTextBox textEdit = control as RadTextBox;
if (textEdit != null)
{
textEdit.ReadOnly = readOnlyStatus;
continue;
}
RadMaskedEditBox textMasked = control as RadMaskedEditBox;
if (textMasked != null)
{
textMasked.ReadOnly = readOnlyStatus;
continue;
}
// rest of the code
該代碼運行良好,但顯而易見的缺點是它只有在容器是RadGroupBox時纔有效。我想通過改變調用表單中的控件類型來使用相同的代碼來處理表單,組框和PageViews。
我懷疑答案會涉及反思,但我無法解決它。我試圖用FormControl方法中的參數列表替換Control [] containerList,但是我不能再使用var變量。
在我看來,你會有一個艱難的時間,使這種通用。你不需要將var container =(containerList [0]替換爲RadGroupBox);'也可以用其他類型?這可能太需要成爲一種方法。考慮過載,然後從每個過載(接收器)中調用一個常用方法。 – DonBoitnott
這是我的第一個想法,實際上我目前如何實現它:每種可能性的一種方法。但是,重載可能會起作用,我會檢查。 – PeterJ