public void NewText(List <string> lines, bool resetIndex = true) { if (resetIndex) { _index = 0; CurrentLines = lines; UpdatePositionBar(); } if (resetIndex) { if (Index != -1) { MaximumLines = 19; if (lines.Count > MaximumLines) { UpButton.Visible = true; DownButton.Visible = true; PositionBar.Visible = true; } else { UpButton.Visible = false; DownButton.Visible = false; PositionBar.Visible = false; } } else { MaximumLines = 19; UpButton.Visible = false; DownButton.Visible = false; PositionBar.Visible = false; } } for (int i = 0; i < TextButtons.Count; i++) { TextButtons[i].Dispose(); } for (int i = 0; i < TextLabel.Length; i++) { if (TextLabel[i] != null) { TextLabel[i].Text = ""; } } TextButtons.Clear(); int lastLine = lines.Count > MaximumLines ? ((MaximumLines + _index) > lines.Count ? lines.Count : (MaximumLines + _index)) : lines.Count; for (int i = _index; i < lastLine; i++) { TextLabel[i] = new MirLabel { Font = font, DrawFormat = TextFormatFlags.WordBreak, Visible = true, Parent = this, Size = new Size(420, 20), Location = new Point(40, 64 + (i - _index) * 20), NotControl = true }; if (i >= lines.Count) { TextLabel[i].Text = string.Empty; continue; } string currentLine = lines[i]; List <Match> matchList = R.Matches(currentLine).Cast <Match>().ToList(); matchList.AddRange(C.Matches(currentLine).Cast <Match>()); int oldLength = currentLine.Length; foreach (Match match in matchList.OrderBy(o => o.Index).ToList()) { int offSet = oldLength - currentLine.Length; Capture capture = match.Groups[1].Captures[0]; string[] values = capture.Value.Split('/'); currentLine = currentLine.Remove(capture.Index - 1 - offSet, capture.Length + 2).Insert(capture.Index - 1 - offSet, values[0]); string text = currentLine.Substring(0, capture.Index - 1 - offSet) + " "; Size size = TextRenderer.MeasureText(CMain.Graphics, text, TextLabel[i].Font, TextLabel[i].Size, TextFormatFlags.TextBoxControl); if (R.Match(match.Value).Success) { string link = GetLinkFromString(values[0], values[1]); NewButton(values[0], values[1], TextLabel[i].Location.Add(new Point(size.Width - 11, 0)), link); } if (C.Match(match.Value).Success) { NewColour(values[0], values[1], TextLabel[i].Location.Add(new Point(size.Width - 11, 0))); } } TextLabel[i].Text = currentLine; TextLabel[i].MouseWheel += LoginNoticeDialog_MouseWheel; } OkButton.BringToFront(); }