Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

C+Sharp+and+.NET [CSharp & .NET] 2001.08.24


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

C Sharp and Dot NET

Содержание

  • 1. О рассылке
  • 2. Особенности C#
  • 3. Windows-формы
    • 3.1. Простейший диалог
    • 3.2. Кнопки Ok и Cancel
    • 3.3. Использование сплиттера
    • 3.4. Использование DataGrid
    • 3.5. Создание DataTable из программы
    • 3.6. Использование DataView
    • 3.7. Как запретить третье состояние чекбокса в таблице
  • 4. Вопросы
  • 4.1. Проверьте себя

1. О рассылке

Я вижу данную расылку, как аналог премодерируемой конференции.
Т.е. здесь мы, люди изучающие и использующие платформу .NET, сможем обменяться своими находками и идеями.
Присылайте письма с вопросами и ответами на адрес level3@mail.ru, они будут помещены в рассылку с указанием имени и (по желанию) адреса автора, если они соответствуют тематике и не содержат рекламы и персональных атак.
На письма с очень часто задаваемыми вопросами я постараюсь ответить сразу, не помещая их в рассылку, таким образом, надеюсь, что подписка будет интересной для Вас и в то же время не будет заполнена часто задаваемыми вопросами.

[к содержанию]

2.Особенности C#

В предыдущем выпуске я упомянул некоторые элементы C# и .NET, отличающие их от других языков и сред. Но не все удалось вспомнить, поэтому здесь привожу другие отличия.

Еще в C# есть оператор доступа к объекту как к массиву (indexer) и перегрузка операторов.

Кроме того, можно написать функцию swap, благодаря наличию передачи параметров по ссылке (byref)

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

Константы, перечисления (enum), возможность компилирования в .exe-файлы
delegates - вроде в Java Reflection такое есть
platform invocation services - в Java есть Java Native Interface

код с неавтоматическим управлением памятью (unmanaged code)

stackalloc - ?

[к содержанию]

3.Windows-формы

3.1.Простейший диалог

Чтобы создать диалог нужно в solution explorer'е выбрать команду 'add' из контекстного меню, после этого наша задача - вызвать диалог из нужного места и реализовать в нем работу с элементами управления.

Для вызова диалога можно использовать следующий код:

 

void someMethod()
{
    MyDialog dlg = new MyDialog();
    try
    {
        if (dlg.ShowDialog() == DialogResult.OK)
        {
            // do something
        }
        else
        {
            // do something else
        }
    }
    finally
    {
        dlg.Dispose();
    }
}

Вызов Dispose нужен, так как при закрытии диалога он не удаляется, а просто делается невидимым.

Нужен ли try-finally? Если даже обработка исключений будет проведена в вызывающем методе, наличие блока try-finally гарантирует освобождение ресурсов, которые могли использоваться в форме (или будут использоваться потом).

Часто someMethod вызывается из меню и кроме него исключения обрабатывать некому. В этом случае обработку исключений нужно вписать.

[к содержанию]

3.2.Кнопки Ok и Cancel

Нужно положить кнопки на форму, у формы заполнить свойства "applyButton" и "cancelButton".
Если форма покрыта другими элементами и не выделяется нажатием на нее, то можно выбрать ее из списка вверху окна свойств.

При этом у кнопки Cancel автоматически заполнится свойство DialogResult, у кнопки Ok его нужно заполнить вручную, иначе диалог не будет закрываться при нажатии на эту кнопку.

[к содержанию]

3.3.Использование сплиттера

Сплиттер позволяет изменять размер компонента, прижатого к какому-либо краю.

Для использования сплиттера нужно:
1) продумать компоновку формы и выбрать компонент, который будет разделен сплиттером на две части (назовем его основой). В качестве такого компонента может быть выбрана сама форма.
2) Положить на основу компонент (как правило - панель), который не должен менять размеров при изменении размеров основы. Прижать положенный компонент к нужному краю.
3) Добавить на основу сплиттер. Прижать его к тому же краю.
4) Добавить на основу еще один компонент (еще одну панель), который будет занимать оставшуюся область и установить для него режим fill.

На панели после этого можно добавлять другие компоненты.

[к содержанию]

3.4.Использование DataGrid

DataGrid позволяет отображать данные в виде таблицы (вообще он еще много чего умеет, но об этом в MSDN). Однако сам он данные не содержит, а использует для этого другие классы, например DataTable и DataView.

Проще всего использовать DataGrid так:
1) положить DataGrid на форму
2) В обработчике события onLoad установить свойство DataSource

[к содержанию]

3.5.Создание DataTable из программы

Компоненты ADO.NET позволяют добывать данные как из таблиц баз данных, так и создавать таблицы в памяти.

Для того, чтобы создать таблицу в памяти нужно:
1) Создать объект класса DataTable
2) Добавить в него нужные колонки
3) Заполнить строчки

 

    // 1.
    DataTable table = new DataTable();
    // 2.
    table.Columns.Add("name", Type.GetType("System.String");
    table.Columns.Add("checked", Type.GetType("System.Boolean");
    table.Columns.Add("index", Type.GetType("System.Int32");
    // 3.
    DataRow row = table.NewRow();
    row["name"] = "Nick";
    row["checked"] = false;
    row["index"] = 5;
    table.Rows.Add(row);
    // connect table to DataGrid
    dataGrid1.dataSource = table;

[к содержанию]

3.6.Использование DataView

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

 

    DataView view = new DataView(table);
    view.AllowNew = false;
    view.AllowDelete = false;
    dataGrid1.DataSource = view;

[к содержанию]

3.7.Как запретить третье состояние чекбокса в таблице

Для этого нужно установить стили колонок таблицы

 

    ... create and fill table as above
    ... attach DataGrid to table
    DataGridTextBoxColumn col1 = new DataGridTextBoxColumn();
    col1.MappingName = "name";
    DataGridTextBoxColumn col2 = new DataGridTextBoxColumn();
    col2.MappingName = "index";
    DataGridBoolColumn col3 = new DataGridBoolColumn();
    col3.MappingName = "checked";
    col3.AllowNull = false;
    DataGridTableStyle style="new" DataGridTableStyle();
    style.Add(col1);
    style.Add(col2);
    style.Add(col3);
    dataGrid1.TableStyles.Add(style);

[к содержанию]

4.Вопросы

4.1.Проверьте себя

#1. Рассмотрим следующий оператор C#:

   x.y = a[b];

Сколько вызовов пользовательских подпрограмм может быть скрыто здесь?

[к содержанию]


Буду рад услышать о других практических применениях упомянутых и неупомянутых классов - пишите на адрес level3@mail.ru

С уважением и наилучшими пожеланиями,
Сергей Радкевич.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное