Вход на сайт
Вопрос по С#
29.08.09 13:15
Подскажите пожалуйста как можно написать программу на С# по нижеследующей картинке. В общем нужно при нажатии на кнопку Start пошел прогресс от 0 до 100%( Progress-Bar), а внизу чтобы при этом шли цифрами количество процентов(Label). И нужно чтобы в то время пока идет прогресс(и соответственно проценты) нельзя бы былобы его остановить кнопками (Button) "Start" и "Zuruecksetzen". А с помощью кнопки "Schlissen" все это дело закрыть.
NEW 29.08.09 15:05
в ответ monstrello72 29.08.09 13:15
все очень просто, вставь в проект таймер, изначально его отключив,
в нем можно создать евентфункцию "тик",
сделать чтоб тик вызывался например каждую секунду.
когда давиш на кнопку старт запускаеш таймер и обнуляеш счетчик.
и enable = false на соответсвующие кнопки.
каждый раз когда будет тик инкрементируеш счетчик,
изменяеш Progress-Bar, выводиш проценты и если счетчк дошел до максимума.
то останавливаеш таймер, счетчик и разрешаеш давить на все кнопки
как то так... удачи!
в нем можно создать евентфункцию "тик",
сделать чтоб тик вызывался например каждую секунду.
когда давиш на кнопку старт запускаеш таймер и обнуляеш счетчик.
и enable = false на соответсвующие кнопки.
каждый раз когда будет тик инкрементируеш счетчик,
изменяеш Progress-Bar, выводиш проценты и если счетчк дошел до максимума.
то останавливаеш таймер, счетчик и разрешаеш давить на все кнопки
как то так... удачи!
все что вы сделаете в интернете может быть использовано против вас!
NEW 29.08.09 15:15
в ответ monstrello72 29.08.09 15:12
Я не знаю как вообще в виде кода запустить Progress и Проценты( как это в виде кода сделать).
-----
Progress запускать не надо. Он всего лишь отрисовывает что ему задано - смотри минимальное, максимальное и текущее значение.
Ну а по поводу Процентов - это в школу, в 5-й класс...
-----
Progress запускать не надо. Он всего лишь отрисовывает что ему задано - смотри минимальное, максимальное и текущее значение.
Ну а по поводу Процентов - это в школу, в 5-й класс...

NEW 29.08.09 15:23
в ответ monstrello72 29.08.09 15:12
в виде кода, немогу сорри, нет времени...
у прогрессбара есть имя свойсва, их можно редактировать в самом ГУИ дизайнере,
например начальное и максимальное значение.
а также с ними можно "общатся" из кода (если конечно код имеет право допуска)
в коде вводиш имя потом точку и автоматически паказываются все публичные переменные
и функции этого класса. Выбираеш там "value" кажется и туда пишеш проценты...
у прогрессбара есть имя свойсва, их можно редактировать в самом ГУИ дизайнере,
например начальное и максимальное значение.
а также с ними можно "общатся" из кода (если конечно код имеет право допуска)
в коде вводиш имя потом точку и автоматически паказываются все публичные переменные
и функции этого класса. Выбираеш там "value" кажется и туда пишеш проценты...
все что вы сделаете в интернете может быть использовано против вас!
NEW 29.08.09 18:23
в ответ viger2 29.08.09 15:23
Вот что я накопал в Hilfe,мой ProgressBar называется (Name)Progress. Проценты идут так: нажимаю Start , и примерно через секунд 30 (не бежит от 1 до 100) появляется 100. Подправьте пожалуйста где что не так( а Прогресс вообще не бежит)
private void Start_Click(object sender, EventArgs e)
{
Progress1.Visible = true;
Progress1.Minimum = 1;
Progress1.Maximum = Progress.100;
Progress1.Value = 1;
Progress1.Step = 1;
for (int i = 1; i <= Progress.100; i++);
{
System.Threading.Thread.Sleep(100);
Prozent.Text = i.ToString();
if (CopyFile(Progress[i - 1]) == true);
Progress1->PerformStep();
}
}
private void Start_Click(object sender, EventArgs e)
{
Progress1.Visible = true;
Progress1.Minimum = 1;
Progress1.Maximum = Progress.100;
Progress1.Value = 1;
Progress1.Step = 1;
for (int i = 1; i <= Progress.100; i++);
{
System.Threading.Thread.Sleep(100);
Prozent.Text = i.ToString();
if (CopyFile(Progress[i - 1]) == true);
Progress1->PerformStep();
}
}
NEW 29.08.09 20:20
в ответ monstrello72 29.08.09 19:53
Дык, научись копировать тогда msdn.microsoft.com/en-us/library/system.windows.forms.progressbar.perform...
NEW 29.08.09 21:48
в ответ monstrello72 29.08.09 18:23
короче както так...
private void Start_Click(object sender, EventArgs e)
{
Progress1.Visible = true;
Progress1.Minimum = 1;
Progress1.Maximum = 100;
Progress1.Value = 1;
Progress1.Step = 1;
for (int i = 1; i <= 100; i++);
{
System.Threading.Thread.Sleep(100);
Prozent.Text = i.ToString();
//if (CopyFile(Progress[i - 1]) == true); // нафиг ненужно
//Progress1->PerformStep(); // нафиг ненужно
Progress1.Value = i ;
}
}
private void Start_Click(object sender, EventArgs e)
{
Progress1.Visible = true;
Progress1.Minimum = 1;
Progress1.Maximum = 100;
Progress1.Value = 1;
Progress1.Step = 1;
for (int i = 1; i <= 100; i++);
{
System.Threading.Thread.Sleep(100);
Prozent.Text = i.ToString();
//if (CopyFile(Progress[i - 1]) == true); // нафиг ненужно
//Progress1->PerformStep(); // нафиг ненужно
Progress1.Value = i ;
}
}
все что вы сделаете в интернете может быть использовано против вас!
NEW 29.08.09 21:58
что именно?
в дизайнере ГУИ есть "Tools", там же где ты "брал для рисования" кнопки или процессбар и т.д.
там есть таймер, его заносиш в ГУИ, он появится правда снизу под самой формой,
потом давиш на него правой кнопкой мышки и выбираеш "проперти" (в немецкой версии кажется Eigenschaft)
в проперти есть две таб свойства и функции, давиш на функции и там допельклик на "тик"
www.c-sharpcorner.com/UploadFile/mahesh/WorkingwithTimerControlinCSharp11...
в ответ monstrello72 29.08.09 19:08
В ответ на:
а как это сделать?
а как это сделать?
что именно?
в дизайнере ГУИ есть "Tools", там же где ты "брал для рисования" кнопки или процессбар и т.д.
там есть таймер, его заносиш в ГУИ, он появится правда снизу под самой формой,
потом давиш на него правой кнопкой мышки и выбираеш "проперти" (в немецкой версии кажется Eigenschaft)
в проперти есть две таб свойства и функции, давиш на функции и там допельклик на "тик"
www.c-sharpcorner.com/UploadFile/mahesh/WorkingwithTimerControlinCSharp11...
все что вы сделаете в интернете может быть использовано против вас!
NEW 29.08.09 22:18
в ответ viger2 29.08.09 21:48
NEW 29.08.09 22:29
интересно, откуда ты береш такие задания?
может стоит взять просто книжку типа C# за 21 день или тому подобное...
в таких книгах обычно каждый промежуточный шаг описан, что за чем делать...
просто иногда когда человек говорит "я незнаю как это зделать", невсегда знаеш что именно он незнает
а что знает... может ему просто одного промежуточного шага нехватает а может у него просто нет
именно базовых знаний... и получается что говориш на разных языках...
вспоминается случай рассказанный моим другом, как что было точно незнаю, но суть такова,
к ним приехали заказчики или партнеры из Испании, и он должен был обьяснить принцип работы их продукта
одному из испанских коллег, через пару дней им пришлось прекратить это делать, т.к. у этого
человека небыло элементарных технических знаний. Как можно обяснить человеку о микропроцессорной
системе который незнает что такое двоичная система... ? Он оказался экономистом, а отправили его
перенимать опыт только потому что он хорошо знал немецкий язык...
Я к чему это, просто попробуй поработать с книжкой где каждый шаг разжеван, и возможно будет меньше вопросов возникать.
и обучение будет намного эффективней... Хотя с другой стороны эффективность обучения будет еще намного выше если
приходится сталкиватся лбом с проблемами и решать их, как например у тебя в данном случае!
Удачи!
в ответ monstrello72 29.08.09 13:15
В ответ на:
Подскажите пожалуйста как можно написать программу на С# по нижеследующей картинке.
Подскажите пожалуйста как можно написать программу на С# по нижеследующей картинке.
интересно, откуда ты береш такие задания?
может стоит взять просто книжку типа C# за 21 день или тому подобное...
в таких книгах обычно каждый промежуточный шаг описан, что за чем делать...
просто иногда когда человек говорит "я незнаю как это зделать", невсегда знаеш что именно он незнает
а что знает... может ему просто одного промежуточного шага нехватает а может у него просто нет
именно базовых знаний... и получается что говориш на разных языках...
вспоминается случай рассказанный моим другом, как что было точно незнаю, но суть такова,
к ним приехали заказчики или партнеры из Испании, и он должен был обьяснить принцип работы их продукта
одному из испанских коллег, через пару дней им пришлось прекратить это делать, т.к. у этого
человека небыло элементарных технических знаний. Как можно обяснить человеку о микропроцессорной
системе который незнает что такое двоичная система... ? Он оказался экономистом, а отправили его
перенимать опыт только потому что он хорошо знал немецкий язык...
Я к чему это, просто попробуй поработать с книжкой где каждый шаг разжеван, и возможно будет меньше вопросов возникать.
и обучение будет намного эффективней... Хотя с другой стороны эффективность обучения будет еще намного выше если
приходится сталкиватся лбом с проблемами и решать их, как например у тебя в данном случае!
Удачи!

все что вы сделаете в интернете может быть использовано против вас!
NEW 29.08.09 23:25
к сожалению у меня нет visual studio на домашнем компьютере.
в принципе, в своем первом посте я написал как можно действовать...
с таймером хоть чтонибудь получилось? а с твоим вторым ходом решения, что вышло? ошибок больше нет?
в ответ monstrello72 29.08.09 22:47
В ответ на:
Я учусь на курсах в Taylorix(изучаю С#) там нам дают такие задания. Но все-таки хотелось бы решить эту задачку. Если у тебя будет время посмотри пожалуйста(начальные условия ты знаешь).Заранее благодарен!
Я учусь на курсах в Taylorix(изучаю С#) там нам дают такие задания. Но все-таки хотелось бы решить эту задачку. Если у тебя будет время посмотри пожалуйста(начальные условия ты знаешь).Заранее благодарен!
к сожалению у меня нет visual studio на домашнем компьютере.
в принципе, в своем первом посте я написал как можно действовать...
с таймером хоть чтонибудь получилось? а с твоим вторым ходом решения, что вышло? ошибок больше нет?
все что вы сделаете в интернете может быть использовано против вас!
NEW 30.08.09 10:06
в ответ viger2 29.08.09 22:29
Вот это точно не выдает ошибок
А как сделать,чтобы в Label проценты отображались,то не знаю.
Если просто написать с Progress1.Value(i); то он ругается.Не потходит также label1.Text = i ; так как он не хочет int в string конвертировать
В ответ на:
private void button1_Click(object sender, EventArgs e)
{
Progress1.Visible = true;
Progress1.Minimum = 1;
Progress1.Maximum = 100;
Progress1.Value = 1;
Progress1.Step = 1;
for (int i = 1; i <= 100; i++)
{
System.Threading.Thread.Sleep(100);
Progress1.Value = i;
}
}
private void button1_Click(object sender, EventArgs e)
{
Progress1.Visible = true;
Progress1.Minimum = 1;
Progress1.Maximum = 100;
Progress1.Value = 1;
Progress1.Step = 1;
for (int i = 1; i <= 100; i++)
{
System.Threading.Thread.Sleep(100);
Progress1.Value = i;
}
}
А как сделать,чтобы в Label проценты отображались,то не знаю.
Если просто написать с Progress1.Value(i); то он ругается.Не потходит также label1.Text = i ; так как он не хочет int в string конвертировать
NEW 30.08.09 11:29
в ответ Alexa- 30.08.09 10:06
В ответ на:
Если просто написать с Progress1.Value(i); то он ругается.
Может потому, что у ProgressBar такого метода нет?Если просто написать с Progress1.Value(i); то он ругается.
В ответ на:
Не потходит также label1.Text = i ; так как он не хочет int в string конвертировать
А если так? label1.Text = i.ToString();Не потходит также label1.Text = i ; так как он не хочет int в string конвертировать
NEW 30.08.09 12:40
В свойствах таймера нет тик , есть Tag, если это одно и тоже, то как его использовать. А с прогресс баром с помощью Alexa все получилось!!!(кстати приветствую старую знакомую!!! и большое спасибо за прогрессбар!!!) Теперь при нажатии на кнопку Start идет прогресс(Label стоит пока прогресс идет и в конце появляется 100)
в ответ viger2 29.08.09 23:25
В ответ на:
с таймером хоть чтонибудь получилось?
с таймером хоть чтонибудь получилось?
В свойствах таймера нет тик , есть Tag, если это одно и тоже, то как его использовать. А с прогресс баром с помощью Alexa все получилось!!!(кстати приветствую старую знакомую!!! и большое спасибо за прогрессбар!!!) Теперь при нажатии на кнопку Start идет прогресс(Label стоит пока прогресс идет и в конце появляется 100)
NEW 30.08.09 12:53
в ответ monstrello72 30.08.09 12:31
private void button1_Click(object sender, EventArgs e)
{
Progress1.Visible = true;
Progress1.Minimum = 1;
Progress1.Maximum = 100;
Progress1.Value = 1;
Progress1.Step = 1;
for (int i = 1; i <= 100; i++)
{
Progress1.PerformStep();
label1.Text = i.ToString();
label1.Update();
System.Threading.Thread.Sleep(100);
}
}
{
Progress1.Visible = true;
Progress1.Minimum = 1;
Progress1.Maximum = 100;
Progress1.Value = 1;
Progress1.Step = 1;
for (int i = 1; i <= 100; i++)
{
Progress1.PerformStep();
label1.Text = i.ToString();
label1.Update();
System.Threading.Thread.Sleep(100);
}
}
NEW 30.08.09 13:29
я же написал,
давиш правой кнопкой мышки на таймер выбираеш проперти
а там на Event или события..

доппельклик на клетку радом с "Тick" и ты автоматически попадаеш в функцию в самом теле программы...
в ответ monstrello72 30.08.09 12:40
В ответ на:
В свойствах таймера нет тик , есть Tag,
В свойствах таймера нет тик , есть Tag,
я же написал,
давиш правой кнопкой мышки на таймер выбираеш проперти
а там на Event или события..

доппельклик на клетку радом с "Тick" и ты автоматически попадаеш в функцию в самом теле программы...
все что вы сделаете в интернете может быть использовано против вас!
NEW 30.08.09 13:36
кстати, такой путь решения без разделения процессов,
т.е. в где в функцию
вставляются процесс который длится долгое время ( в данном случае 10 секунд System.Threading.Thread.Sleep(100) умножить 100 раз)
очень нерекомендуется! поэтому лучше пользоватся таймером.
ГУИ нежелательно прерывать на длительное время.
т.е. в где в функцию
В ответ на:
private void button1_Click(object sender, EventArgs e)
private void button1_Click(object sender, EventArgs e)
вставляются процесс который длится долгое время ( в данном случае 10 секунд System.Threading.Thread.Sleep(100) умножить 100 раз)
очень нерекомендуется! поэтому лучше пользоватся таймером.
ГУИ нежелательно прерывать на длительное время.
все что вы сделаете в интернете может быть использовано против вас!
NEW 30.08.09 14:15
для данного примера может и ненужно, но
цель процессбара графически отображать состояние какогото параллельного процесса,
например процесс передачи данных, который в неопределенный момент времени
"говорит" сейчас прошло там 20% данных и т.д.
и что все это время ГУИ должна быть в подвешенном состоянии?
а при помоши таймера как раз можно и симулировать такой внешний процесс,
пусть он и несовсем асинхронен...
надеюсь я понятно выразился?....
в ответ NightWatch 30.08.09 13:40
В ответ на:
Почему? Не вижу связи.
Почему? Не вижу связи.
для данного примера может и ненужно, но
цель процессбара графически отображать состояние какогото параллельного процесса,
например процесс передачи данных, который в неопределенный момент времени
"говорит" сейчас прошло там 20% данных и т.д.
и что все это время ГУИ должна быть в подвешенном состоянии?
а при помоши таймера как раз можно и симулировать такой внешний процесс,
пусть он и несовсем асинхронен...
надеюсь я понятно выразился?....
все что вы сделаете в интернете может быть использовано против вас!
NEW 30.08.09 14:25
согласен, казусы могут непременно быть, например при отладке в реальном маштабе вемени,
и наверняка требуются публичные переменные для счетчка и возможно дополнительная логика
которая включает/выключает таймер, запрещает "тик" на время пока он необработаеся и т.д.
Но согласись, что для данного случая таймер, который дает "тик" каждые 0.5 сек вполне достаточно,
чтобы симулировать внещний процесс? или?
в ответ Murr 30.08.09 14:02
В ответ на:
Почитай внимательнее про таймер. Особенно в плане возможных казусов...
Уверяю тебя - будешь весьма удивлен...
Почитай внимательнее про таймер. Особенно в плане возможных казусов...
Уверяю тебя - будешь весьма удивлен...
согласен, казусы могут непременно быть, например при отладке в реальном маштабе вемени,
и наверняка требуются публичные переменные для счетчка и возможно дополнительная логика
которая включает/выключает таймер, запрещает "тик" на время пока он необработаеся и т.д.
Но согласись, что для данного случая таймер, который дает "тик" каждые 0.5 сек вполне достаточно,
чтобы симулировать внещний процесс? или?
все что вы сделаете в интернете может быть использовано против вас!
NEW 30.08.09 14:30
с потоками еще сложнее работать, во всяком случае для начинающего программиста,
а таймер уже готовый класс, где нужно минимум знаний... главное его запустить в
нужное время с нужными параметрами, обработать тик и выключить когда
он будет уже ненужен...
в ответ NightWatch 30.08.09 14:17
В ответ на:
В таком случае таймер здесь абсолютно не верный подход.
Используются потоки.
В таком случае таймер здесь абсолютно не верный подход.
Используются потоки.
с потоками еще сложнее работать, во всяком случае для начинающего программиста,
а таймер уже готовый класс, где нужно минимум знаний... главное его запустить в
нужное время с нужными параметрами, обработать тик и выключить когда
он будет уже ненужен...
все что вы сделаете в интернете может быть использовано против вас!
NEW 30.08.09 19:56
в ответ monstrello72 30.08.09 17:27
Очень хотелось бы с Timer разобраться
-----
Читай документацию. Вдумчиво и внимательно. Стараясь понять что написано.
Бо, если ты будешь когда-нибудь программировать, то нянькаться с тобой не
будут - дадут задачу, сроки и зарплату - дальше выкручивайся как умеешь...
-----
Читай документацию. Вдумчиво и внимательно. Стараясь понять что написано.
Бо, если ты будешь когда-нибудь программировать, то нянькаться с тобой не
будут - дадут задачу, сроки и зарплату - дальше выкручивайся как умеешь...

NEW 30.08.09 21:56
на практике пока такого невстречал, раньше тоже тоже с С++ дотнетовский таймер для графического интерфейса использовал,
и никогда с проблемами несталкивался, во всяком случае в незамечал, разве что иногда в дебаге в пошаговой отладке...
Сейчас специально посмотрел, MSDN вроде не о непредсказуемости таймера не пишет...
в ответ Murr 30.08.09 19:51
В ответ на:
Одна из особенностей, об которых надо было бы прочитать, заключается в
том, что хочет - дает, не хочет - не дает... и делает это непредсказуемо...
Одна из особенностей, об которых надо было бы прочитать, заключается в
том, что хочет - дает, не хочет - не дает... и делает это непредсказуемо...
на практике пока такого невстречал, раньше тоже тоже с С++ дотнетовский таймер для графического интерфейса использовал,
и никогда с проблемами несталкивался, во всяком случае в незамечал, разве что иногда в дебаге в пошаговой отладке...
Сейчас специально посмотрел, MSDN вроде не о непредсказуемости таймера не пишет...
все что вы сделаете в интернете может быть использовано против вас!
NEW 30.08.09 22:16
В ответ на:
Тот, который Timer из .Neta
Если имеешь в виду System.Windows.Forms.Timer, то http://msdn.microsoft.com/en-us/library/xy0zeach.aspxТот, который Timer из .Neta
NEW 05.09.09 22:11
да это он...
...your application may not get timer events as often as the Interval property specifies.
The interval is not guaranteed to elapse exactly on time...
ну что, господа
NightWatch и
Murr вы оказались всетаки правы! Действительно оказалось что на дотнетовский таймер нельзя на 100% пологатся. Причем на практике по иронии судьбы я убеделся в этом как раз на этой неделе, когда делал тест в виртуальной машине под другой операционкой. Причем сначало толком немог понять в чем причина, почему ГУИ так редко обновляется, и действительно дело оказалось в таймере... хотя пришлось немного поизгалятся, что бы это подтвердить
т.к. в операционке на vmware практически небыло возможности для дебага,
а на "основной" машине все работало почти без проблем.
Чтож, данный случай подтверждает правило что если чтото невидиш то это неозначает что этого нет.
Я просто недумал что тут могут возникнуть проблемы, года два назад я неделями напролет "охотился" с осциллоскопом за данными на линиях а триггером как раз была программка под дотнетом с таймером, и к счастью или к сожалению мне недовелось усомниться в надежности таимера... наверное мне просто тогда повезло....
в ответ NightWatch 30.08.09 22:16
В ответ на:
Если имеешь в виду System.Windows.Forms.Timer, то http://msdn.microsoft.com/en-us/library/xy0zeach.aspx
Если имеешь в виду System.Windows.Forms.Timer, то http://msdn.microsoft.com/en-us/library/xy0zeach.aspx
да это он...

...your application may not get timer events as often as the Interval property specifies.

The interval is not guaranteed to elapse exactly on time...

ну что, господа


а на "основной" машине все работало почти без проблем.
Чтож, данный случай подтверждает правило что если чтото невидиш то это неозначает что этого нет.

Я просто недумал что тут могут возникнуть проблемы, года два назад я неделями напролет "охотился" с осциллоскопом за данными на линиях а триггером как раз была программка под дотнетом с таймером, и к счастью или к сожалению мне недовелось усомниться в надежности таимера... наверное мне просто тогда повезло....
все что вы сделаете в интернете может быть использовано против вас!
NEW 05.09.09 22:37
Есть мнение, что утверждение некорректно. Win CE позиционируется как RTOS. Там, вероятно, тики таймеров не теряются. И в .Net соответственно тоже.
в ответ viger2 05.09.09 22:11
В ответ на:
Действительно оказалось что на дотнетовский таймер нельзя на 100% пологатся.
Действительно оказалось что на дотнетовский таймер нельзя на 100% пологатся.
Есть мнение, что утверждение некорректно. Win CE позиционируется как RTOS. Там, вероятно, тики таймеров не теряются. И в .Net соответственно тоже.
Dropbox - средство синхронизации и бэкапа файлов.
NEW 06.09.09 17:44
Реализация System.Windows.Forms.Timer (а точнее SetTimer) подразумевает, что тики приходят в виде оконного сообщения WM_TIMER. Отсюда и проблемы.
Если ограничения не устраивают msdn советует использовать System.Threading.Timer. Этот таймер использует коллбэки и точнее, чем оконный.
в ответ voxel3d 05.09.09 22:37
В ответ на:
Там, вероятно, тики таймеров не теряются
Каких таймеров?Там, вероятно, тики таймеров не теряются
Реализация System.Windows.Forms.Timer (а точнее SetTimer) подразумевает, что тики приходят в виде оконного сообщения WM_TIMER. Отсюда и проблемы.
Если ограничения не устраивают msdn советует использовать System.Threading.Timer. Этот таймер использует коллбэки и точнее, чем оконный.