ASP.NET C# Как я могу вызвать объект в коллекции для изменения свойства’?

#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 = ...
 

Выпадающий список не имеет свойства только для чтения; возможно, вам придется использовать Включено?