Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
SergeyK
Зарегистрирован: 09.11.2010 Сообщения: 21
|
Добавлено: Пн Янв 17, 2011 17:37 17.01.2011 Заголовок сообщения: |
|
|
Спасибо за информацию! Я раньше на Delphi программировал. Но Delphi, как я понимаю,умер Хочется выучить что -то современное и перспективное |
|
Вернуться к началу |
|
|
Michael Руководитель проекта
Зарегистрирован: 12.10.2005 Сообщения: 2488 Откуда: Москва
|
Добавлено: Пн Янв 17, 2011 17:59 17.01.2011 Заголовок сообщения: |
|
|
Я бы, если сейчас начинал, изучал бы SDK под Android. Реально перспективно. Ну а на PC, да, самое оптимальное - это NET. _________________ Любой путь начинается с первого шага |
|
Вернуться к началу |
|
|
JoKeR Почетный активист проекта
Зарегистрирован: 09.12.2008 Сообщения: 393
|
Добавлено: Вт Мар 01, 2011 15:18 01.03.2011 Заголовок сообщения: |
|
|
А как сделать окошко, отображаемое во время выполнения процесса и закрыть по завершению процесса? |
|
Вернуться к началу |
|
|
Velavok Разработчик
Зарегистрирован: 08.12.2008 Сообщения: 39
|
Добавлено: Ср Мар 02, 2011 11:35 02.03.2011 Заголовок сообщения: |
|
|
JoKeR писал(а): | А как сделать окошко, отображаемое во время выполнения процесса и закрыть по завершению процесса? |
Если в окошке не должен отображаться прогресс выполнения, то
можно так:
1. Создаем главную форму.
2. Создаем форму, которая будет отображаться во время выполнения процесса
3. Во 2-ю форму добавляем код на событие Shown:
Код: |
Application.DoEvents();
bool result = DoSomething();
DialogResult = result ? DialogResult.OK : DialogResult.Cancel;
Close();
Application.DoEvents();
|
4. Вызов этого окошка осуществляется кодом:
Код: |
ActionDlg dlg = new ActionDlg ();
DialogResult res = dlg.ShowDialog();// для модального, для не модального dlg.Show()
|
Отображением прогресса выполнения делается по сложнее. Но если нужно то напишу как.
Решил написать свой Принтстор с блэк джеком и отчетами? |
|
Вернуться к началу |
|
|
JoKeR Почетный активист проекта
Зарегистрирован: 09.12.2008 Сообщения: 393
|
Добавлено: Ср Мар 02, 2011 13:19 02.03.2011 Заголовок сообщения: |
|
|
Хлеще! Решил, что за Вами не угнаться и начал рисовать сразу облачную ОС
Переношу свой старый проект по анализу биллинговых отчетов с Делфей на C#.
По теме:
DoSomething() - это кто?
Ошибка 1 Элемент "DoSomething" не существует в текущем контексте.
Я так понимаю какая-то функция.
И с прогрессом было бы куда интересней.
Спасибо за помощь. |
|
Вернуться к началу |
|
|
Velavok Разработчик
Зарегистрирован: 08.12.2008 Сообщения: 39
|
Добавлено: Ср Мар 02, 2011 13:51 02.03.2011 Заголовок сообщения: |
|
|
DoSmthing() - это метод класса который выполняет нужное действие.
С прогрессом по сложнее:
1. Создаем форму аналогично первому случаю.
2. Кидаем на неё BackgroundWorker (находится во вкладке Компоненты)
3. Кидаем на неё прогрессбар
4. Делаем метод выполняющий нужное нам действие в несколько этапов:
Код: |
private void DoSmth(BackgroundWorker bgWorker)
{
for (int i=0; i<Steps; ++i)
{
DoStep(); // делаем действие
int delta = i*100/Steps;// вычисляем процент завершенности
bgWorker.ReportProgress(i);
}
bgWorker.ReportProgress(100);
}
|
, где DoStep() - метод выполняющий один шаг алгоритма
Steps - кол-во всех шагов алгоритма.
5. На событие Shown формы вешаем следующий код:
Код: |
progressBar1.Maximum = 100;
progressBar1.Value = 0;
backgroundWorker1.RunWorkerAsync();
|
6. На событие DoWork у backgroundWorker1 вешаем:
Код: |
DoSmth(backgroundWorker1);
|
7.На событие ProgressChanged у backgroundWorker1 вешаем:
Код: |
if (e.ProgressPercentage<=progressBar1.Maximum && e.ProgressPercentage>=progressBar1.Minimum)
progressBar1.Value = e.ProgressPercentage;
else
if (e.ProgressPercentage>progressBar1.Maximum)
progressBar1.Value = progressBar1.Maximum;
else
{
if (e.ProgressPercentage < progressBar1.Minimum)
progressBar1.Value = progressBar1.Minimum;
}
|
тут на всякий случай добавлены проверки на граничные условия
8. На событие RunWorkerCompleted у backgroundWorker1 вешаем:
Код: |
progressBar1.Value = 100;
Visible = false;
Close();
|
9. Вызываем аналогично первому случаю.
Вроде должно работать |
|
Вернуться к началу |
|
|
JoKeR Почетный активист проекта
Зарегистрирован: 09.12.2008 Сообщения: 393
|
Добавлено: Ср Мар 02, 2011 13:53 02.03.2011 Заголовок сообщения: |
|
|
Еще маленький вопрос.
Могу ли я как-нибудь получить код записи после её добавления в БД?
Или же всё равно необходимо писать после добавления запрос (типа SELECT MAX(id) FROM table). |
|
Вернуться к началу |
|
|
Velavok Разработчик
Зарегистрирован: 08.12.2008 Сообщения: 39
|
Добавлено: Ср Мар 02, 2011 14:09 02.03.2011 Заголовок сообщения: |
|
|
JoKeR писал(а): | Еще маленький вопрос.
Могу ли я как-нибудь получить код записи после её добавления в БД?
Или же всё равно необходимо писать после добавления запрос (типа SELECT MAX(id) FROM table). |
Для разных СУБД разные способы. В аксессе нельзя.
При работе с MSSQLServer например можно так:
SELECT IDENT_CURRENT ('table') AS Current_Identity; |
|
Вернуться к началу |
|
|
|