2009-06-04 4 views
0

У меня есть Web Forms текстового поля в GridView, и я хочу higlight текста на кнопках. textbox.select(start,end) не работает. Вот код:Выделите текст в .NET, .select() не доступен

Dim row As GridViewRow = TryCast(DirectCast(sender, ImageButton).Parent.Parent, GridViewRow) 
    Dim txtdays As TextBox = row.Cells(2).FindControl("txtDays") 
    Dim lbldays As Label = row.Cells(2).FindControl("lblDays") 
    Dim btndel As ImageButton = row.Cells(2).FindControl("btndel") 
    Dim imgbttnadd As ImageButton = row.Cells(2).FindControl("imgbttnadd") 

    //Show textbox and set its text. 
    txtdays.Visible = True 
    txtdays.Text = lbldays.Text 
    txtdays.Focus() 

    //Here is where I want to select the text. 
    txtdays.Select() //???????? Doesn't work. 

Как вы это делаете?

.Select работает с текстовыми полями Windows Forms, но не с текстовыми полями Web Forms.

ответ

0

На основании ваших комментариев вы можете указать в своем вопросе, что имеете дело с элементом управления ASP.NET. Ответ, который дал Крис, действительно работает в текстовом поле WinForms.

Я не уверен, как вы это сделаете в ASP.NET, но я могу поспорить, что вы не можете сделать это в серверном коде. Вероятно, вам придется использовать JavaScript для его снятия.

3

Вам необходимо понять, что для выполнения желаемого эффекта потребуется сценарий на стороне клиента. Однако для точной идентификации элемента потребуется серверный код. Вот почему вам нужно «вынесенный ID» в txtDays TextBox (так как он лежит в GridView, тонированный ID будет отличаться)

Используя JavaScript, Вы можете сделать это следующим образом:

Следующего кода будет, например, на вашей странице ASPX (вы можете обернуть ее в функцию). Я предполагаю, что вы знакомы с JavaScript.

var txtDays = document.getElementById(<%= txtDays.ClientID %>); 
if (txtDays != null) 
{ 
    txtDays.focus(); 
    txtDays.select(); 
} 

Select функция, которую вы ищете в VB не существует. Функция Focus() существует (.NET 2.0+) из-за реализации Focus API, которая отображает функцию JavaScript, аналогичную приведенной выше в клиентском коде.

Edit: (после комментариев)

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

txtDays.Attributes.Add("onfocus", "this.select();") 

Это должно гарантировать, что, когда onfocus событие поднимается, TextBox будет выбран, а также.

+0

Спасибо за дополнительную помощь (+1). Но я пробовал функцию, подобную той, которую вы просили, но я получаю ошибку javascript, говоря, что txtdays не объявлен. Мой txtdays находится в поле шаблона, но он должен найти это правильно? Должен ли я опубликовать некоторую разметку? – Eric

+0

Хммм ... Вместо разметки, я думаю, нам нужно гораздо больше информации. о том, что происходит. Кажется, что вы щелкаете ImageButton, а страница возвращается на сервер, а затем предоставленный код запускается. Итак, нужна ли эта страница для просмотра в браузере, но только с выбранным текстовым полем? Если это единственная функциональность, вам не нужно отправлять обратно на сервер вообще. – Cerebrus

+0

JS не может найти текстовое поле, потому что визуализированный идентификатор дочерних элементов управления GridView совсем другой. Вы должны взглянуть на источник HTML-страницы, который будет отображаться, и это будет выглядеть примерно так: «MyGridView_ctl01_txtDays». Если вы передадите этот идентификатор в Javascript, он сможет сфокусироваться и выбрать ваше текстовое поле. – Cerebrus