C# Как добавить полосу прокрутки к результатам рисования на панели flowLayoutPanel - PullRequest
0 голосов
/ 09 марта 2020

Я пишу свое первое приложение, используя Visual Studio и Windows Forms (. NET Framework).

Например, я хочу отображать прямоугольники в 4 рядах по 15 в столбцах.

Для отображения я использовал flowLayoutPanel, где я настраивал:

AutoScroll = True;
Dock = Fill;
WrapContents = False;

Проблема в том, что мои рисунки выходят за пределы поля flowLayoutPanel. Я sh смогу прокрутить мои рисунки в этой панели FlowLayout.

Подскажите, пожалуйста, как сделать полосу прокрутки для рисунков? Может быть, лучше использовать панель для рисования?

Мой код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace MyProgram
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void showD1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // refresh area
            flowLayoutPanel1.Refresh();
        }

        private void showD2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            using (Graphics g = this.flowLayoutPanel1.CreateGraphics())
            {
                // refresh area
                flowLayoutPanel1.Refresh();


                // pen color
                Pen black = new Pen(Color.Black, 1);
                    float[] dashValues = { 4, 2 };
                    black.DashPattern = dashValues;


                float   rectWidth = 0.03f * Width,       // permanent width of a single drawing
                        rectHeight = 0.2f * Height,      // permanent height of a single drawing
                        x = 0.03f * Width,               // position X frist drawing
                        y = 0.045f * Height;             // position Y frist drawing


                // columns
                int colX = 15;
                // rows
                int rowY = 4;                  

                for (int j = 0; j < rowY; j++)
                {
                    for (int i = 0; i < colX; i++)
                    {
                        // single drawing
                        g.DrawRectangle(black, x, y, rectWidth, rectHeight);

                        x += 0.05f * Width;             // horizontal distance between rectangles
                    }

                    x = 0.03f * Width;                  // horizontal distance between rectangles
                    y += 0.27f * Height;                // vertical distance between rectangles
                    drawS = false;

                }

                black.Dispose();
            }
        }

        private void flowLayoutPanel1_Paint(object sender, PaintEventArgs e)
        {

        }

    }
}

введите описание изображения здесь

Спасибо за ответ!

...