C# 如何向窗体添加属性以设置要使用的颜色和行数?

C# 如何向窗体添加属性以设置要使用的颜色和行数?,c#,.net,winforms,C#,.net,Winforms,在新表格的顶部,我添加了: Color[] colors; 然后我为颜色创建了一个属性: public Color[] ColorLines { get { return this.colors; } set { this.colors = value; }

在新表格的顶部,我添加了:

Color[] colors;
然后我为颜色创建了一个属性:

public Color[] ColorLines
        {
            get
            {
                return this.colors;
            }
            set
            {
                this.colors = value;
            }
        }
然后我有一个绘画活动:

private void OnPaint(object sender, PaintEventArgs e)
        {
            e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
            e.Graphics.FillRectangle(new SolidBrush(this.BackColor), this.ClientRectangle);
            GraphicsPath path = new GraphicsPath();

            int visibleLines = 0; 

            Font drawFonts1 = new Font("Arial", 16);

            for (int i = m_text.Length - 1; i >= 0; i--)
            {

                Point pt = new Point((int)((this.ClientSize.Width - e.Graphics.MeasureString(m_text[i], m_font).Width) / 2),
                    (int)(m_scrollingOffset + this.ClientSize.Height - (m_text.Length - i) * m_font.Size));
                if ((pt.Y + this.Font.Size > 0) && (pt.Y < this.Height))
                {
                    path.AddString(m_text[i], m_font.FontFamily, (int)m_font.Style, m_font.Size,
                        pt, StringFormat.GenericTypographic);

                    visibleLines++;
                }
                e.Graphics.DrawString(m_text[i], drawFonts1, new SolidBrush(colors[i % 2]), pt);
            }
            if ((visibleLines == 0) && (m_scrollingOffset < 0))
            {
                m_scrollingOffset = (int)this.Font.SizeInPoints * m_text.Length;
            }           
            int topSizeWidth = (int)(this.Width * m_topPartSizePercent / 100.0f);
            path.Warp(
                new PointF[4] 
                { 
                    new PointF((this.Width - topSizeWidth) / 2, 0),
                    new PointF(this.Width - (this.Width - topSizeWidth) / 2, 0),
                    new PointF(0, this.Height),
                    new PointF(this.Width, this.Height)
                },
                new RectangleF(this.ClientRectangle.X, this.ClientRectangle.Y, this.ClientRectangle.Width, this.ClientRectangle.Height),
                null,
                WarpMode.Perspective
                );
            e.Graphics.FillPath(new SolidBrush(this.ForeColor), path);
            path.Dispose();
        }
和抽绳为线条上色:

e.Graphics.DrawString(m_text[i], drawFonts1, new SolidBrush(colors[i % 2]), pt);
我在form1构造函数中使用它,如下所示:

m_scroller.ColorLines = new Color[] { Color.Red,Color.Black };
问题是,在表格1中,我可以添加我想要的颜色:Color.Red only或Color.Red,Color.Black,Color.Green等等

根据我在form1中添加的颜色数量,我需要将行数更改为行中新表单中的颜色:

e.Graphics.DrawString(m_text[i], drawFonts1, new SolidBrush(colors[i % 2]), pt);
如果在表格1中我使用了两种颜色,那么我需要在这里设置为2。如果是一种颜色,则为1。如果是五种颜色,则为5


我怎样才能添加到颜色的相同属性中,我必须将行数设置为颜色?(或者我需要为行号创建一个新属性?

如果我正确理解了您想要的内容。。。您可以重载新的表单构造函数(我们称之为Form2)-使用参数添加新构造函数:

表格2:

private Color[] _colors;

public Form2(Color[] colors)
{
   _colors = colors;
}

...
// Also you can count colors instead of sending their number to second form
e.Graphics.DrawString(m_text[i], drawFonts1, new SolidBrush(_colors[i % _colors.Count]), pt);
在form1中,当您打开第二个表单时,您可以执行以下操作:

m_scroller.ColorLines = new Color[] { Color.Red,Color.Black };
...
var newForm = new Form2(m_scroller.ColorLines);
newForm.ShowDialog();

这可能是我提出的一个愚蠢的问题,但为什么不使用蒙皮/主题/项目颜色托盘来限制颜色?
m_scroller.ColorLines = new Color[] { Color.Red,Color.Black };
...
var newForm = new Form2(m_scroller.ColorLines);
newForm.ShowDialog();