同じフォームを使用して、サプライヤー、在庫品目、顧客などの新しいデータと既存のレコードを入力します。編集モードでは、すべてのテキスト ボックスを読み取り専用に設定し、ユーザーが編集するレコードを選択したら、読み取り専用ステータスを 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 変数を使用できなくなりました。