GUI-приложение на .NET за 0x4EC секунд
От: Владислав Чистяков Российская Империя www.nemerle.org
Дата: 28.10.02 08:39
Оценка: 321 (10)
Статья:
GUI-приложение на .NET за 0x4EC секунд
Автор(ы): Владислав Чистяков
Дата: 26.10.2002
Аннотация: Статья рассчитана на тех, кто хочет изучить программирование в .Net и язык C#, или хотя бы понять, как можно использовать эту среду, чтобы решить стоит ли этим заниматься. Эта статья также будет полезна начинающим программистам, так как позволяет пройти весь цикл разработки программы. В качестве побочного эффекта вы получите полезную утилиту.


Авторы:
Владислав Чистяков

Аннотация:
Статья рассчитана на тех, кто хочет изучить программирование в .Net и язык C#, или хотя бы понять, как можно использовать эту среду, чтобы решить стоит ли этим заниматься. Эта статья также будет полезна начинающим программистам, так как позволяет пройти весь цикл разработки программы. В качестве побочного эффекта вы получите полезную утилиту.

22.12.03 16:11: Перенесено модератором из '.NET' — AVK
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Замечание небольшое :)
От: Hacker_Delphi Россия  
Дата: 24.12.02 20:03
Оценка:
Абсолютно неверная фраза: "До C# не было языков, позволяющих использовать в качестве меток в операторах, подобных switch, не простые char или int, а строки."
был QuickBasic в его конструкции SELECT (точный синтаксис уже не помню) можно было использовать строки... и в компиляющем варианте — тоже. часто использовалось при опросе клавиатуры (если программировал под DOS через Бейсик — поймешь, почему так )
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Может я что не правильно понимаю, но ...
От: null  
Дата: 17.12.02 08:22
Оценка:
посмотрим на комментарий

[...skip...]

internal AscDir(AscDir ParentDir, string sPath, string sPattern)
{
[...skip...]
// Запаминаем имя каталога. В принципе можно было бы просто хранить
// сам объект DirectoryInfo, но это привело бы к неоправданному
// расходу ресурсов.
m_sName = di.Name;

[...skip...]

и дальше рекурсия этого конструктора,
в котором di локальная переменная 8-[ ]




Не понимаю где мы ресурсы выигрываем ?
Если di будет жить при вызове конструтора AscDir для родительского каталога,
а также во всем дереве конструкторов AscDir для дочерних
каталогов. (фух... надеюсь объяснил)

конечно, ресурсы сильно съедятся тут
m_Root = new AscDir(null, sPath, sPattern);
а после все подчиститься (может быть).

только зачем освобождать то что занимали di,
если на этот конструктор их уже хватило.
Про ToolBar
От: Shire  
Дата: 30.10.02 09:54
Оценка: 4 (1)
Приятно читается. Только вот в Tag кнопки я бы положил delegate — приятней читается.

protected delegate void tbBtnEvent(ToolBarButton b);
public Form1()
{
InitializeComponent();
tbbNew.Tag=new tbBtnEvent(FileNew);
}
...
public void FileNew(ToolBarButton b)
...
private void toolBar1_ButtonClick(object sender,
System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if(e.Button.Tag is tbBtnEvent)
{
((tbBtnEvent)e.Button.Tag)(e.Button);
}else MessageBox.Show("Нет обработчика!");
}
Замечательная обзорная статья!
От: Igor Trofimov  
Дата: 29.10.02 12:19
Оценка:
Буду рекомендоватиь начинающим! Куча возможностей упоминется... и GUI, и RegExp, и DllImport, и XML... Очень удачно все влезло в небольшую задачку для демонстрации возможностей.
Сильная статья !
От: Аноним  
Дата: 29.10.02 08:39
Оценка:
Вот бы еще таких штуки три...
Re: Замечание небольшое :)
От: null  
Дата: 09.01.03 10:21
Оценка:
Это уж точно, что до C# БЫЛИ языки, поддерживающие строки в case. Хотя бы тот же Javascript.
Re: Замечание небольшое :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.12.02 02:24
Оценка:
Ну, лохонулся. :)) QBasic я конечно видел, но программировать не нем особо не приходилось. Один раз сделал зачет за какую-то даму...

И чего же они в VB это дело не включили?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Может я что не правильно понимаю, но ...
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.02 23:39
Оценка:
m_sName — член класса и живет намного дольше конструктора.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Может я что не правильно понимаю, но ...
От: null  
Дата: 17.12.02 08:38
Оценка:
sorry за offtopic, но я не null, и вошел как Serjio nebug@mail.ru, обидно когда null-ом называют
Re: Сильная статья !
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.02 17:03
Оценка: 1 (1)
В следующих номерах будут статьи по технологиям созданным для RSDN@Houme (Януса). Но такой же целиковой статьи вряд ли получится. Все же проект по больше. Да и технологии посложнее.

Так же планируются статьи по таким вопросам как создание компонентов и контролов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Про ToolBar
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.12.02 17:00
Оценка:
Можно конечно и так. Просто хотелось показать case с текстовыми строками.

Ну а лучше всего было бы написать более качественную реализацию меню и тубларов в которой сделать поддержку Verb-ов (типа акшенов в Дельфи). Тогда можно было бы делать обратбочики визуально, да и настройку в рантайме можно было бы осуществить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Замечание небольшое :)
От: emag  
Дата: 16.01.03 14:40
Оценка:
На самом деле в VB это тоже включено. По крайней мере в VB 6.0 Select без проблем работает со строками.
Re: GUI-приложение на .NET за 0x4EC секунд
От: iZEN СССР  
Дата: 02.07.05 08:03
Оценка: +1
Здравствуйте, Владислав Чистяков, Вы писали:

ВЧ>Статья:

ВЧ>GUI-приложение на .NET за 0x4EC секунд
Автор(ы): Владислав Чистяков
Дата: 26.10.2002
Аннотация: Статья рассчитана на тех, кто хочет изучить программирование в .Net и язык C#, или хотя бы понять, как можно использовать эту среду, чтобы решить стоит ли этим заниматься. Эта статья также будет полезна начинающим программистам, так как позволяет пройти весь цикл разработки программы. В качестве побочного эффекта вы получите полезную утилиту.


ВЧ>Авторы:

ВЧ> Владислав Чистяков

ВЧ>Аннотация:

ВЧ>Статья рассчитана на тех, кто хочет изучить программирование в .Net и язык C#, или хотя бы понять, как можно использовать эту среду, чтобы решить стоит ли этим заниматься. Эта статья также будет полезна начинающим программистам, так как позволяет пройти весь цикл разработки программы. В качестве побочного эффекта вы получите полезную утилиту.

Соглашения об именовании элементов

Для текстовых окон (TextBox) будем давать префикс tb, для переключателей (CheckBox) – cb, для кнопок (Push Buttons) – pb, для TabControl – tab, для страниц TabControl-а – tp, для элементов меню (Menu Items) – mi, для кнопок тулбара – tbb, для разделителей тулбара – tbs, для сплитеров – spl. Эти префиксы дадут возможность легко определять элемент управления по его названию и облегчать поиск нужного элемента при использовании Complete Word в VS.Net.

Честно говоря, без этого "вводного" курса по изучению алфавита и словаря программы, очень трудно вникать в её суть с первого раза, да и этой "азбукой" приходится частенько пользоватся — листать туда-сюда, чтобы свериться, какой объект и правильно ли используется.

Добавьте три закладки и дайте им следующие имена/заголовки: tpSetings/Settings, tpPreview/Preview и tpLog/Log.

Давайте осмысленные имена объектам!
Почему бы не отказаться от префиксной нотации и перейти к нормальной постфиксной:
tp... -> SetingsTab, PreviewTab, LogTab...
tbFind –> FindTextBox,
lblPath -> PathLabel (метка — она везде метка, можно без постфикса Label, но во избежание...),
pbBrowseFolder -> BrowseFolderButton (опять: что обозначает префикс "pb"? Лезем в "словарь"... )
cbReplAll -> ReplAllFlag (флажок, Вы же не будете использовать такой же, но булевый эквивалент — как правило, значение берётся из контрола, а не синхронизируется с другой "одноимённой" булевой переменной),
gbRegExpOptions -> RegExpOptionsGroup (кратко и логично).

Попробуйте следовать приведённым или аналогичным рекомендациям и текст статьи засияет в лучшем свете некосноязычного, но человеческого звучания.
Re[2]: GUI-приложение на .NET за 0x4EC секунд
От: iZEN СССР  
Дата: 02.07.05 08:10
Оценка:
iZEN>Попробуйте следовать приведённым или аналогичным рекомендациям и текст статьи засияет в лучшем свете некосноязычного, но человеческого звучания.

Прошу прощения. Правильно: ...свете не косноязычного, но человеческого звучания.

(Кстати, почему при цитировании отрезается первая буква: iZEN -> ZEN? )
Re[2]: GUI-приложение на .NET за 0x4EC секунд
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.07.05 15:25
Оценка: +1
Здравствуйте, iZEN, Вы писали:

ZEN>Давайте осмысленные имена объектам!

ZEN>Почему бы не отказаться от префиксной нотации и перейти к нормальной постфиксной:
ZEN>tp... -> SetingsTab, PreviewTab, LogTab...
ZEN>tbFind –> FindTextBox,
ZEN>lblPath -> PathLabel (метка — она везде метка, можно без постфикса Label, но во избежание...),
ZEN>pbBrowseFolder -> BrowseFolderButton (опять: что обозначает префикс "pb"? Лезем в "словарь"... )

Погляди на дату публикации статьи (26.10.2002). В те времена никаких соглашений об именовании переменных небыло и я пользовался своими С++-ными привычками. Теперь я (как и очень многие) пользуюсь нашими соглашениями по оформлению кода.

ZEN>Попробуйте следовать приведённым или аналогичным рекомендациям и текст статьи засияет в лучшем свете некосноязычного, но человеческого звучания.


Уже года два как пользуюсь. Но все равно спасибо за коментарий.
... << RSDN@Home 1.1.4 beta 7 rev. 466>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: GUI-приложение на .NET за 0x4EC секунд
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.07.05 15:25
Оценка:
Здравствуйте, iZEN, Вы писали:

ZEN>(Кстати, почему при цитировании отрезается первая буква: iZEN -> ZEN? )


Погляди на мое цетирование. Там вообще две буквы остается. Просто собираются только большие буквы. Это позволяет избежать огромных префиксов если ник имеет огромный размер.
... << RSDN@Home 1.1.4 beta 7 rev. 466>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: GUI-приложение на .NET за 0x4EC секунд
От: Аноним  
Дата: 29.04.06 12:46
Оценка: +1
Здравствуйте, Владислав Чистяков, Вы писали:


public class CDelegateTest 
{
  // Объявление делегата (типа).
  public delegate void SomeDelegate(string sFileName);
  // Этот метод получает делегат в качестве параметра.
  public void DelegateTest(SomeDelegate sd)
  {
    // Вызов делегата синтаксически эквивалентен вызову глобальной функции,
    // или локальной функции (находящейся в этом же классе). Однако при
    // этом вызывается метод, ссылка на который помещена в делегат.
    // Причем если метод не статический, то вызов производится у конкретного
    // экземпляра объекта, ссылка на который также хранится в делегате.
    sd(); // Вызов метода, указанного в делегате.
  }
}


А разве тут можно вызвать sd(); без параметра?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.