我使用相同的表格输入新数据并输入现有记录,例如供应商、库存项目、客户等。在编辑模式下,我将所有文本框设置为只读,一旦用户选择了要编辑的记录,我将只读状态重置为 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 变量。