Member 14102257 Ответов: 2

Элемент управления, добавляемый динамически при нажатии кнопки (например, кнопка "сведения"), недоступен при нажатии другой кнопки (кнопка "отправить") в VB.NET


Элемент управления, добавляемый динамически при нажатии кнопки (например, кнопка Details), недоступен при нажатии другой кнопки (кнопка Submit) в VB.net

Я добавил элемент управления текстовым полем в один клик кнопки (скажем, btnDetails)

Он работает отлично.

Когда я получаю доступ к тому же текстовому полю в другом щелчке кнопки (скажем, btnSubmit)

Это показывает, что ссылка на объект не задана.

Как получить доступ к созданному текстовому полю?
Пожалуйста, помогите решить эту проблему.

Что я уже пробовал:

Я добавил элемент управления textbox одним щелчком кнопки (скажем, btnDetails).

Затемните mytextbox как новое текстовое поле
mytextbox.ID = "textbox1"
mytextbox.Текст = "Привет"
Моя панель.Управления.Добавить(mytextbox)

Он работает отлично.

Когда я получаю доступ к тому же текстовому полю в другом щелчке кнопки (скажем, btnSubmit)

TryCast(MyPanel.FindControl("textbox1"), TextBox).Текст = "Добро Пожаловать"

Это показывает, что ссылка на объект не задана.

Как получить доступ к созданному текстовому полю?
Пожалуйста, помогите решить эту проблему.

F-ES Sitecore

Элементы управления, которые вы создаете сами, не сохраняются в обратных сообщениях, поэтому при нажатии кнопки btnSubmit происходит обратная передача, и ваши динамические элементы управления больше не существуют. Вам нужно повторно добавить свои динамические элементы управления на каждый обратный отсчет.

Member 14102257

- Да, Сэр. Вот в чем проблема. Спасибо. Есть ли какое-либо другое решение для доступа к элементам управления без их повторного добавления?

Чтобы исправить это, я изменил часть создания динамических элементов управления с события нажатия кнопки на событие загрузки страницы(добавил новую страницу) и удалил (если не ispostback, то) условие.

Но я просто хочу знать, есть ли какие-либо другие возможности решить эту проблему в самом щелчке кнопки без повторного добавления элементов управления на каждом постбэке.

F-ES Sitecore

На самом деле нет, просто так работают веб-формы. Когда вы помещаете элемент управления на страницу aspx, Visual Studio добавляет код в файл конструктора для создания этого элемента управления, поэтому эти элементы управления доступны в первую очередь. Если вы добавляете свои собственные элементы управления, о которых .net не знает, то вам нужно повторить то, что .net делает для элементов управления на странице aspx, а именно создать их все с каждой обратной передачей.

Member 14102257

Хорошо. Благодарю вас сэр

2 Ответов

Рейтинг:
1

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, который вы используете, чтобы держать ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда вы извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, в которой она обнаружила проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы узнать, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы можете узнать!


Рейтинг:
1

Patrice T

Цитата:
Элемент управления, добавляемый динамически при нажатии кнопки (например, кнопка "сведения"), недоступен при нажатии другой кнопки (кнопка "отправить") в VB.NET

Не видя последовательного фрагмента кода, невозможно даже догадаться, что вы на самом деле делаете.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

Visual Basic / Visual Studio Video Tutorial - Базовая Отладка - YouTube[^]
Visual Basic .NET programming for Beginners - точки останова и средства отладки[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.