Рисование в windows forms
Уроки Windows Forms C++/C#
Рисование линий в PictureBox MVS C++/C#
В этом уроке вы приступите к изучению базовых приёмов рисования в «PictureBox». И в данном уроке будет рассмотрено то, как нарисовать линию заданной длины, цвета и в заданном месте поля «PictureBox». Для этого нам понадобятся: 4 «textBox», 1 «button», и конечно же «PictureBox». Примерный вид программы:
То, как изменить цвет фона элемента (“PictureBox”) рассматривается в этом уроке. В “textBox”ы мы будем записывать начальное и конечное значение координат поля рисования: две координаты – одна точка, ещё две координаты – ещё одна точка, которая соединяется с предыдущей, образуя отрезок, заданного в коде программы цвета. Значение каждой координаты, получаемое из текстового поля, мы будем конвертировать в «int»—Convert::ToInt32(textBox1->Text); А для хранения значения создаётся массив, его нужно объявить в верху программы: int m_p[4];
Ну а теперь, пожалуй, приступим к коду самой программы, который вы можете видеть ниже. В нём, как видите, вызвано событие «PictureBox1_Paint», о том, как вызвать событие элемента рассматривается в “этом уроке”. В событии «button1_Click» есть строка — pictureBox1->Refresh(); с помощью неё каждый раз, когда пользователь будет вводить новые координаты, изображение в «PictureBox» будет заново прорисовываться.
#pragma endregion private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) < this->Text = «Рисуем Линию»; button1->Text = «Рисовать»; > private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) < m_p[1] = Convert::ToInt32(textBox1->Text); m_p[2] = Convert::ToInt32(textBox2->Text); m_p[3] = Convert::ToInt32(textBox3->Text); m_p[4] = Convert::ToInt32(textBox4->Text); pictureBox1->Refresh(); > private: System::Void pictureBox1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) < // Рисуем линию e->Graphics->DrawLine(System::Drawing::Pens::Green, m_p[1], m_p[2], m_p[3], m_p[4]); > >; >
Результат: Следующий урок >>
Рисование дерева в Windows Forms
у меня проблема с AutoScroll и рисованием (суть вопроса после кода). Я вот по такому коду рисую AVL- дерево:
Проблема в том, что если дерево не влезает в treePanel, то нужен Scroll рисунка, но как его реализовать, я не знаю. Свойство AutoScroll у treePanel работает только если я вместо рисования кругов рисую Label-метки, но даже в этом случае рисунок как-то странно съезжает, т.е. проблему это не решает (наверное)
Помогите, пожалуйста кодом или советом!)
1-изображение — это нужно устранить 2-изображение — А вот так пока получается, но нужно , чтобы можно было скроллить После ответа ниже — понял, что делал неправильно, код будет примерно следующий (линии я пока не нарисовал, но скроллящееся дерево без соединительных линий — уже есть) Вот обновлённый код:
1 ответ 1
Для начала проясним ошибочное предположение: нарисованное изображение не является контентом, с точки зрения ScrolableControl , от которого наследуются все контролы, которые поддерживают скроллинг. Таким образом, свойство AutoScroll не может вам помочь, так как учитывает только вложенные контролы. Даже принудительная ручная активация скролла вам в данном случае не поможет.
Какие есть варианты? Основных три. Остальные — производные.
Так как скролл учитывает только контролы, то строить изображение с помощью кастомных контролов. Через свойство Control.Region можно придать контролу любую форму (вершина, ребро, да хоть весь граф).
Использовать двухслойную модель контрола, т.е. за скролл отвечает один, а рисуем на другом, вложенном в первый. При этом во время рисования не забываем изменять размер контрола на котором рисуем так, чтобы изображение умещалось полностью, тогда, как только вложенный контрол перестанет умещаться в родительском, активируется автоскролл и появится возможность прокрутки.
Берем скрол полностью в свои руки, исключив все автоматические рюшечки. Фактически, мы просто добавляем полосы скролла и с их помощью управляем положением изображения вручную. Для этого изображение целиком должно быть представлено объектом GraphicsPath , для которого можно задать позиционирование при отрисовке.
Если нужна только картинка, я бы предпочел последний вариант. Для интерактива — без вариантов первый. Второй — как переходный от вашего решения к любому более специализированному.
Рисование на форме из класса
Разбираюсь в классах c#. Хочу сделать класс, в котором был бы метод, рисующий какой-либо объект на форме, допустим, прямоугольник. Но я не очень понимаю, как в классе задавть область рисования. Хочу потом на коде формы просто вызывать метод этого класса, что-то по типу:
Набросал класс, но как указать область рисования?
Рисование на форме из другого класса
В общем вопрос такой: Имеется форма с названием MainForm, также имеется класс GameObject.
Рисование в форме, передача методов класса классу формы используя делегаты
Всем доброй ночи!) Решив данный вопрос , решится большая задача, суть которой заключается в том.
Рисование в форме
На форме TextBox1,TextBox2,TextBox3, кнопка, и поле для рисования. По введенным коэффициента.
Рисование на форме
Привет, помогите пожалуйста понять почему не выводится прямоугольник на форму при запуске.
В метод для отрисовки передаете ссылку на Graphics
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Рисование в форме
Добрый день. Можно ли в C# сделать аналогично как в FreePascal.
Рисование на Форме
Как нарисовать радиальный двухцветный градиент на всей поверхности формы?
Попиксельное рисование на форме
Необходимо рисовать изображение на форме (или в отдельном окне) по пикселям. Чтобы в любой момент.
Рисование фрактала на форме
Дали задание нарисовать фрактал у виде папоротника. Вот собственно сам скрин фрактала который.