Чтение онлайн

ЖАНРЫ

Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:

tnNewNode.Tag = node_needToBePopulated;

//Этот фиктивный дочерний узел существует лишь для того, чтобы

//узел имел, по крайней мере, один дочерний узел и поэтому

//был расширяемым.

tnNewNode.Nodes.Add(dummy_node);

//----------------

//Узел "HouseType"

//----------------

tnNewNode = treeView1.Nodes.Add("HouseType");

//Установить для узла метку, указывающую на то, что узел

//будет заполняться динамически

tnNewNode.Tag = node_needToBePopulated;

//Этот фиктивный дочерний узел существует лишь для того, чтобы

//узел имел, по крайней мере, один дочерний узел и поэтому

//был расширяемым.

tnNewNode.Nodes.Add(dummy_node);

//Восстанавливаем обновление интерфейса

treeView1.EndUpdate;

}

//-------------------------------------------------------------------------

//Обработчик событий BeforeExpand для нашего элемента управления TreeView

//ПРИМЕЧАНИЕ: Этот обработчик событий необходимо будет

// вручную подключить к функции InitializeComponent

// формы.

//

//Вызывается при запросе пользователем расширения узла, у которого имеется,

//по крайней мере, один дочерний узел. Этот вызов осуществляется до

//отображения дочерних узлов данного узла и дает нам возможность

//динамически заполнить данными элемент управления TreeView.

//-------------------------------------------------------------------------

private void TreeView1BeforeExpand (object sender, System.Windows.Forms.TreeViewCancelEventArgs e) {

//Получить узел, который будет расширяться

System.Windows.Forms.TreeNode tnExpanding;

tnExpanding = e.Node;

//Если узел не отмечен как "нуждающийся в заполнении данными",

//то он устраивает нас в том виде, "как он есть".

if (tnExpanding.Tag !=(object) node_needToBePopulated) {

return; //Разрешить беспрепятственное продолжение выполнение

}

//------------------------------------------------------------

//Требуется динамическое заполнение дерева данными.

//Мы знаем, что узел должен быть заполнен данными; определить,

//что это за узел

//------------------------------------------------------------

if (tnExpanding.Text == nodeText Neighborhoods) {

PopulateTreeViewNeighborhoods(tnExpanding);

return; //добавление элементов закончено!

} else {

//Проверить другие возможности для узлов дерева, которые мы должны

//добавить.

System.Windows.Forms.MessageBox.Show("НЕ СДЕЛАНО: Добавьте код для динамического заполнения этого узла");

//Снять отметку с этого узла, чтобы мы не могли вновь выполнить

//этот код

tnExpanding.Tag = "";

}

}

//------------------------------------------------------------------

//Эта функция вызывается для динамического добавления дочерних узлов

//в узел "Neighborhood"

//------------------------------------------------------------------

void PopulateTreeViewNeighborhoods(TreeNode tnAddTo) {

TreeView tvControl;

tvControl = tnAddTo.TreeView;

tvControl.BeginUpdate;

//Очистить имеющийся фиктивный узел

tnAddTo.Nodes.Clear;

//Объявить четыре узла, которые мы хотим сделать дочерними узлами

//того узла, который был передан.

TreeNode[] newNeighborhoodNodes;

newNeighborhoodNodes = new TreeNode[4];

newNeighborhoodNodes[0] = new TreeNode("Capitol Hill");

newNeighborhoodNodes[1] = new TreeNode("Chelsea");

newNeighborhoodNodes[2] = new TreeNode("Downtown");

newNeighborhoodNodes[3] = new TreeNode("South Bay");

//Добавить дочерние узлы в элемент управления

TreeView tnAddTo.Nodes.AddRange(newNeighborhoodNodes);

tvControl.EndUpdate;

}

Приведенный код демонстрирует, что, проявив немного изобретательности и написав совсем небольшой объем дополнительного кода, можно отложить заполнение сложного пользовательского интерфейса данными до тех пор, пока они не понадобятся пользователю. Независимо от того, работаете ли вы в .NET Compact Framework или в любой другой среде выполнения для мобильных устройств, откладывание заполнения данными расширяемых элементов управления пользовательских интерфейсов до того момента, когда возникнет действительная необходимость в них, является чрезвычайно мощным методом.

Будьте внимательны, когда работаете с кодом, управляемым событиями

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

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

Поделиться с друзьями: