Я вижу данную расылку, как аналог премодерируемой конференции.
Т.е. здесь мы, люди изучающие и использующие платформу .NET,
сможем обменяться своими находками и идеями.
Присылайте письма с вопросами и ответами на адрес
level3@mail.ru,
они будут помещены в рассылку с указанием имени и (по желанию) адреса
автора,
если они соответствуют тематике и не содержат рекламы и персональных атак.
На письма с очень часто задаваемыми вопросами я постараюсь ответить
сразу, не помещая их в рассылку, таким образом, надеюсь, что подписка
будет интересной для Вас и в то же время не будет заполнена часто
задаваемыми вопросами.
В предыдущем выпуске я упомянул некоторые элементы C# и .NET, отличающие их
от других
языков и сред. Но не все удалось вспомнить, поэтому здесь привожу другие
отличия.
Еще в C# есть оператор доступа к объекту как к массиву (indexer)
и перегрузка операторов.
Кроме того, можно написать функцию swap, благодаря наличию передачи
параметров по ссылке (byref)
структуры позволяют иногда не использовать
динамическое выделение и освобождение памяти.
Константы, перечисления (enum), возможность компилирования в .exe-файлы
delegates - вроде в Java Reflection такое есть
platform invocation services - в Java есть Java Native Interface
код с неавтоматическим управлением памятью (unmanaged code)
Чтобы создать диалог нужно в 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
вызывается из меню и кроме него исключения обрабатывать некому.
В этом случае обработку исключений нужно вписать.
Нужно положить кнопки на форму,
у формы заполнить свойства "applyButton" и "cancelButton".
Если форма покрыта другими элементами и не выделяется нажатием на нее,
то можно выбрать ее из списка вверху окна свойств.
При этом у кнопки Cancel автоматически заполнится свойство
DialogResult, у кнопки Ok его нужно заполнить вручную, иначе
диалог не будет закрываться при нажатии на эту кнопку.
Сплиттер позволяет изменять размер компонента, прижатого к какому-либо краю.
Для использования сплиттера нужно:
1) продумать компоновку формы и выбрать компонент, который будет разделен
сплиттером на две части (назовем его основой). В качестве такого компонента
может быть выбрана сама форма.
2) Положить на основу компонент (как правило - панель),
который не должен менять размеров при изменении размеров основы.
Прижать положенный компонент к нужному краю.
3) Добавить на основу сплиттер. Прижать его к тому же краю.
4) Добавить на основу еще один компонент (еще одну панель),
который будет занимать оставшуюся область
и установить для него режим fill.
На панели после этого можно добавлять другие компоненты.
DataGrid позволяет отображать данные в виде таблицы
(вообще он еще много чего умеет, но об этом в MSDN).
Однако сам он данные не содержит, а использует для этого другие классы,
например DataTable и DataView.
Проще всего использовать DataGrid так:
1) положить DataGrid на форму
2) В обработчике события onLoad установить свойство DataSource