規則很簡單:如何抽取另一種顏色的每一行?
第一行紅色第二行綠色第三行紅色。 我有一個變量,名爲m_text,它的格式是這樣的:
紅色第二行中的第一行是時間&日期爲綠色。 然後有一個空的/空間線,然後是第三行紅色第四行綠色然後空/空行。 而所有的線條都是一樣的。第一個以紅色第二個綠色,然後每一行以紅色和綠色紅色綠色紅色綠色。
可變_colors是顏色[]
在用戶控件代碼頂部我沒有:
Color[] _colors;
string[] m_text = new string[0];
然後:
public void ScrollerColors(Color[] colors)
{
_colors = colors;
}
然後:
public Color[] ColorLines
{
get
{
return this._colors;
}
set
{
this._colors = value;
}
}
然後文字滾動:
public string TextToScroll
{
get
{
return string.Join("\n", m_text);
}
set
{
string buffer = value;
m_text = buffer.Split(new char[1] { '\n' });
}
}
然後OnPaint事件裏面我有:
private void OnPaint(object sender, PaintEventArgs e)
{
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
e.Graphics.FillRectangle(new SolidBrush(this.BackColor), this.ClientRectangle);
int visibleLines = 0;
Font drawFonts1 = new Font("Arial", 20, FontStyle.Bold, GraphicsUnit.Pixel);
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))
{
visibleLines++;
}
if (_colors != null)
{
e.Graphics.DrawString(m_text[i], drawFonts1, new SolidBrush(_colors[i % _colors.Length]), pt);
}
}
拉繩線也以顏色的m_text線紅色和綠色。
這是怎麼我在快樂Form1中使用它:
在Form1的頂部:
scroller1.TextToScroll = combindedString;
ListColors();
combindedString是,將在m_text文本。
然後在底部form1中我有這個方法:
private void ListColors()
{
List<Color> allColors = new List<Color>();
KnownColor[] colors = (KnownColor[])Enum.GetValues(typeof(KnownColor));
foreach (KnownColor knowColor in colors)
{
Color color = Color.FromKnownColor(knowColor);
allColors.Add(color);
}
scroller1.ColorLines = new Color[] { Color.Red, Color.Green };
}
結果使用DrawString i之後得到的是:
拉繩顏色在紅第二的第一行綠線,空行/空行,然後是綠色的第四行,但它應該是紅色。
它應該是這樣的:在紅
文本行(第一行),那麼日期&時間線爲綠色。 空行.... 紅色文本行(第四行)然後是日期&綠色的時間行。
我該如何解決?
編輯
這是我在OnPaint事件改變:
if (_colors != null)
{
if (m_text[i].Length > 0)
{
coloring += 1;
}
e.Graphics.DrawString(m_text[i], drawFonts1, new SolidBrush(_colors[coloring % _colors.Length]), pt);
}
着色爲int。
但仍然得到綠色的紅色兩條線。
也試過文森特的解決方案:
if (m_text[i] == string.Empty)
{
}
else
{
e.Graphics.DrawString(m_text[i], drawFonts1, new SolidBrush(_colors[i % _colors.Length]), pt);
}
但我得到的是:
僅供參考,關於你的第一個截圖 - [你可以使用剪切工具捕獲上下文菜單](http://blogs.technet .COM/b/migreene /存檔/ 2007/05/12 /如何使用的最剪斷工具對捕獲合作ntext-menus.aspx)就像你擁有的一樣。它可能比目前的圖片更具可讀性。 – Default