Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






ListBox






Если у тега < select> указать атрибут SIZE, больший 1 (значение по умолчанию), то получим простой невыпадающий список. Ему соответствует < asp: ListBox>.

Элемент управления позволяет выбрать несколько пунктов списка одновременно. Для этого надо установить его свойство SelectionMode:

SelectionMode=" multiple"

Свойство Rows устанавливает количество элементов, которые видны в листе. Если элементов больше, то появляется полоса прокрутки.

Свойство Items возвращает коллекцию элементов ListItem, которые находятся в списке. Оно позволяет определить выбранные пункты.

Представьте, что мы разрабатываем сайт туристического агентства. Посетителю предоставляется возможность выбрать несколько городов для своего маршрута из имеющегося списка. Смотрим код:

< %@ Page Language=" C#" %> < script runat=" server" > void Page_Load() { string msgCitiesList = " "; if (Page.IsPostBack) foreach (ListItem it in cities.Items) if (it.Selected) { msgCitiesList = msgCitiesList + it.Text + " < br /> "; } if (msgCitiesList! = " ") { Message.Text = " Вы выбрали следующие города: < br /> " + msgCitiesList; } else { Message.Text = " "; } } < /script> < html xmlns=" https://www.w3.org/1999/xhtml" > < head> < title> Пример ListBox< /title> < /head> < body> Какие города вы хотите включить в свой маршрут? < br /> < form id=" Form1" runat=" server" > < asp: ListBox ID=" cities" runat=" server" SelectionMode=" multiple" > < asp: ListItem> Лондон< /asp: ListItem> < asp: ListItem> Мадрид< /asp: ListItem> < asp: ListItem> Париж< /asp: ListItem> < asp: ListItem> Рига< /asp: ListItem> < /asp: ListBox> < br /> < input type=" Submit" > < p> < asp: Label ID=" Message" runat=" server" /> < br /> < /form> < /body> < /html>

Событие SelectedIndexChanged имеется и тут, как и у всех классов-наследников от абстрактного класса ListControl.

Panel

Часто бывает нужно вставить элемент управления в точно определенное место страницы. Например, объединим два предыдущих примера:

< %@ Page Language=" C#" %> < %@ import Namespace=" System.Drawing" %> < script runat=" server" > void Page_Load() { Label ShopNews = new Label(); ShopNews.Text = " Новости торговой площадки"; ShopNews.Font.Size=20; ShopNews.ForeColor=Color.Red; ShopNews.BackColor=Color.LightGray; ShopNews.BorderWidth=4; ShopNews.BorderStyle=BorderStyle.Groove; ShopNews.Height=50; ShopNews.Width=500; frmDemo.Controls.Add(ShopNews); if (Page.IsPostBack) lblMessage.Text = " Вы выбрали " + Category.SelectedItem.Value; } < /script> < html xmlns=" https://www.w3.org/1999/xhtml" > < head> < title> Выбор категории товаров< /title> < /head> < body> < br/> < form id=" frmDemo" runat=" server" > Выберите категорию товаров< br /> < asp: DropDownList id=" Category" runat=" server" > < asp: ListItem> Компьютеры < /asp: ListItem > < asp: ListItem > Принтеры< /asp: ListItem > < asp: ListItem > Комплектующие < /asp: ListItem > < asp: ListItem Selected=" true" > Мониторы < /asp: ListItem > < asp: ListItem > Компакт-диски< /asp: ListItem > < /asp: DropDownList > < br/> < input type=" Submit" value=" Выбрать" > < br/> < br/> < asp: Label id=" lblMessage" runat=" server" /> < /form> < /body> < /html>


Рис. 3.2.

Эта страница работает не так, как нам хотелось. Текст оказался после выпадающего списка, хотя логичней было бы, чтобы текст шел в начале. В HTML для этого используют элемент разметки < DIV> — стандартный контейнер. Его аналог в ASP.NET:

— < asp: Panel>.

Чтобы заставить метку отображаться перед списком, необходимо поместить перед DropDownList объект Panel:

< asp: Panel ID=" Panel1" runat=" server" > < /asp: Panel> < br />

после чего вызывать метод Controls.Add(...) от этого объекта:

Panel1.Controls.Add(ShopNews);


Рис. 3.3.

Свойство HorizontalAlign элемента Panel полезно, если нужно установить выравнивание содержащихся в нем элементов управления. Поменяем код в предыдущем примере:

< asp: Panel ID=" Panel1" runat=" server" HorizontalAlign=" Center" width=500 />

Текст теперь размещается в центре метки.

Булевское свойство Wrap элемента Panel заставляет переносить текст на новую строку, если оно установлено, или расширять раздел, когда текст не помещается в одну строку, если оно не установлено.

Если в программе установить свойство Visible панели в False, можно сделать невидимыми все элементы, которые в нем находятся. Стили, установленные в панели, наследуются всеми вложенными элементами.

Новая возможность в ASP.NET 2.0 — задавать для Panel полосы прокрутки, как бы имитируя встроенное в страницу окно. Это делается с помощью свойства ScrollBars. Он может принимать следующие значения: None, Both, Vertical, Horizontal, Auto. Если вы установите его в Auto, полосы прокрутки появятся, когда содержимое панели не умещается в ее видимые размеры:

< asp: Panel ID=" Panel1" runat=" server" Height=" 140px" Width=" 494px" ScrollBars=" Auto" HorizontalAlign=" Left" > < /asp: Panel> protected void Page_Load(object sender, EventArgs e) { for(int i=0; i< 100; i++) { Literal l=new Literal(); l.Text = " Мой дядя самых честных правил, < br> Когда не в шутку занемог< br> < br> "; this.Panel1.Controls.Add(l); } }

Реализуется такая возможность с помощью атрибута css overflow:

< div id=" Panel1" style=" height: 140px; width: 494px; overflow: auto; text-align: left; " >

так что подобного поведения можно было добиться, просто изменив стиль. Но ведь не все из нас знают так хорошо css, чтобы иметь понятие об overflow.

Ставить свойство ScrollBars в Vertical или Horizontal я вам не рекомендую. Генерируется overflow-x, а это не работает в браузере Opera 9.0. overflow не поддерживается IE 6.0.

Вертикальную полосу прокрутки можно установить и слева. Для этого поменяйте свойство Direction в RightToLeft.

Для Panel можно задать фоновую картинку с помощью свойства BackImageUrl.

Заключение

Серверные элементы управления предоставляют в распоряжение программиста свойства, методы и события. При их помощи мы можем абстрагироваться от деталей HTML-кода и работать со страницей и ее элементами как с объектами.

 

 

 

 

3: Серверные элементы управления (продолжение): Рассмотрены элементы управления — кнопки и изображения, календарь.
Вначале — маленькая " хитрость". Хороший web-разработчик должен знать, как выглядят его страницы в разных браузерах. По умолчанию обычно они открываются в Internet Explorer. Щелкните правой кнопкой мыши на файле и выберите Browse with. Там можно сменить браузер по умолчанию или выбрать любой из списка для данного просмотра. Button Button — это командная кнопка, нажатие на которую часто приводит к отправке данных на сервер. Можно создавать кнопки двух типов: для передачи данных формы (submit button) или командные кнопки для выполнения различных функций, связанных с данной кнопкой. Если на форме есть несколько кнопок, свойство CommandName позволяет узнать, какая именно кнопка была нажата. ASP.NET поддерживает 3 вида событий.
  • События, которые происходят в браузере клиента и обрабатываются кодом на Javascript.
  • События загрузки страницы.
  • События элементов управления.
Например, чтобы обработать щелчок на кнопке, мы переопределяем событие Click. protected void Button1_Click(object sender, EventArgs e) { } События можно определить через вкладку событий в окне свойств. Второй аргумент всех обработчиков событий имеет тип EventArgs или какой-либо унаследованный от него. Например, мы хотим создать форму для заполнения резюме. Автор может иметь заранее неизвестное нам количество предыдущих мест работы. Добавим на форму кнопку, при нажатии на которую в форму добавляется один элемент ввода текста: < %@ Page Language=" C#" %> < script runat=" server" > static int num=0; static TextBox[] tb=new TextBox[10]; void AddExperience(Object sender, EventArgs e){ if (num < 10) // Чтобы не возникало ошибки обращения к несуществующему элементу массива { TextBox newBox = new TextBox(); newBox.ID = " box" + num; tb[num] = newBox; num++; } for (int i=0; i< 10; i++) // Добавление на форму контролов из массива. { if (tb[i]! = null) { places.Controls.Add(tb[i]); Label lb=new Label(); lb.Text=" < br> < br> "; places.Controls.Add(lb); } else break; }} < /script> < html xmlns=" https://www.w3.org/1999/xhtml" > < head> < /head> < body> < form runat=" server" id=" Experience" > < asp: Label ID=" Label1" runat=" server" text=" Введите Ваше последнее место работы" /> < asp: Panel id=" places" runat=" server" > < asp: TextBox id=" first" runat=" server" /> < br /> < br /> < /asp: Panel> < asp: Button id=" Add" Text=" Еще" OnCommand=" AddExperience" CommandName=" Add" runat=" server" /> < /form> < /body> < /html> Здесь мы имеем массив из 10 элементов типа TextBox. Новый элемент создается в момент нажатия на кнопку " Еще". Можно добавить до 10 новых элементов. Как и раньше, они размещаются в контейнере, это нужно, чтобы они выводились до кнопки. При помощи свойства OnClientClick можно задать клиентский сценарий на JavaScript. Его значением может быть встроенная функция языка JavaScript, или функция, описанная в теле страницы. Клиентский код выполняется до серверного кода, заданного в свойстве OnClick. Image Элемент управления asp: image соответствует тегу img языка HTML. Его можно использовать для динамического добавления на страницу новых изображений. Вернемся к нашему туристическому агентству. Мы решили, что, когда клиент выбирает города, на страницу автоматически должна выводиться карта соответствующего города. Оставляем это в качестве упражнения. Карты городов можно найти через поисковую систему Яндекс. < asp: Image> имеет свойства AlternateText, ImageUrl, ImageAlign
AlternateText Соответствует атрибуту ALT тега IMG. Отображается, если показ картинок отключен или картинки невозможно найти
ImageUrl Соответствует атрибуту SRC тега IMG
ImageAlign Соответствует атрибуту ALIGN тега IMG

Как всегда, свойства можно менять из программы. Например, меняя значение ImageUrl, можно организовать просмотр множества картинок в виде слайд-шоу. Создайте директорию images и поместите в нее несколько картинок image1, image2 и так далее.

Напишем новую страницу:

< %@ Page Language=" C#" %> < html xmlns=" https://www.w3.org/1999/xhtml" > < head> < script language=" C#" runat=" server" > public static int count=1; void NextImage(Object sender, EventArgs e){count++; if(count==10) count=1; //циклический просмотрImage1.ImageUrl =" images/image" +count+".jpg"; }< /script> < /head> < body> < form runat=" server" > < h3> Image Example< /h3> < asp: Image id=" Image1" runat=" server" ImageAlign=" top" AlternateText=" Картинки нет" height=" 300" ImageUrl=" images/image1.jpg" /> < hr> < br> < br> < asp: Button id=" Next" Text=" Next" OnClick=" NextImage" runat=" server" /> < br> < br> < /form> < /body> < /html>





© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.