#c# #asp.net #forms #collections #objectname
Вопрос:
Я нашел эти инструкции где-то здесь, в переполнении стека … Я добавил только последний цикл, чтобы найти единственные объекты, которые меня интересуют, т. е. текстовое поле и раскрывающийся список … Для найденных объектов мне нужно изменить свойство только для чтения с true на false или наоборот … Я не могу определить, как я могу определить имя объекта для затронутых объектов …
Заранее спасибо за вашу помощь.
foreach (Control ctlMaster in Page.Controls)
{
if (ctlMaster is MasterPage)
{
foreach (Control ctlForm in ctlMaster.Controls)
{
if (ctlForm is HtmlForm)
{
foreach (Control ctlContent in ctlForm.Controls)
{
if (ctlContent is ContentPlaceHolder)
{
foreach (Control ctlChild in ctlContent.Controls)
{
if (ctlChild is Panel)
{
foreach (Control ctlform in ctlChild.Controls)
{
if (!string.IsNullOrEmpty(ctlform.ID))
{
Debug.WriteLine("ID = [" ctlform.ID "]");
Debug.WriteLine("UniqueID = [" ctlform.UniqueID "]");
Debug.WriteLine("type = [" ctlform.GetType() "]");
if(ctlform.GetType().ToString().IndexOf("TextBox") != 0
|| ctlform.GetType().ToString().IndexOf("DropDownList") != 0)
{
// **??? objectName.ReadOnly = true; ???**
}
}
}
}
}
}
}
}
}
}
}
Ответ №1:
is
может принимать дополнительный аргумент после имени типа, который создает переменную проверенного типа:
if(ctlform is TextBox t)
t.ReadOnly = ...
Если вы используете старую версию c#, в которой ее нет, вы можете использовать as
или выполнить приведение:
if(ctlform is TextBox)
(ctlform as TextBox).ReadOnly = ...
if(ctlform is TextBox)
((TextBox)ctlform).ReadOnly = ...
Выпадающий список не имеет свойства только для чтения; возможно, вам придется использовать Включено?