【发布时间】:2015-02-23 22:10:24
【问题描述】:
我有一个文本框,其中包含一些 html 元素,每个元素都显示为单独的文本块。现在我想添加一些图片框,每个元素一个,垂直居中在其对应元素的左侧(如果是嵌套元素,例如示例中div内的p,div应该优先,p应该被忽略) .
到目前为止,我提出的代码显然缺少一些东西,因为 Y 坐标不正确。见下图,其中两个黑色斑点代表两个图片框:
这是代码:
string str = textBox1.Text;
string pattern = "<(?<tag>div|p|h[1-6])>";
Regex r = new Regex(pattern);
Match m = r.Match(str);
int i = 1;
while (m.Success) {
string new_s = str.Substring(m.Index + 3);
string new_p = "</" + m.Groups["tag"].Value + ">";
Match m_end = Regex.Match(new_s, new_p);
if (m_end.Success) { // Corresponding end tag exists
Point start_p = textBox1.GetPositionFromCharIndex(m.Index);
Point end_p = textBox1.GetPositionFromCharIndex(m_end.Index);
double top = start_p.Y;
double bottom = end_p.Y;
int midpoint = (int)(top + bottom) / 2;
PictureBox pictureBox = new PictureBox();
pictureBox.Name = "pictureBox" + i.ToString();
pictureBox.Location = new System.Drawing.Point(15, midpoint + 7);
pictureBox.Image = Image.FromFile("c:\\blob.png");
pictureBox.Size = new Size(15, 15);
pictureBox.SizeMode = PictureBoxSizeMode.Zoom;
this.Controls.Add(pictureBox);
m_end.Index.ToString());
}
i++;
m = r.Match(str, m_end.Index);
}
我也尝试将 textBox1.Font.Size 添加到等式中,但这没有帮助。而且行高很困难,因为从技术上讲,每个块都是一行。有关如何进行的任何建议?
编辑:由于 Point 基于左上角,因此使用 Font.Size 查找底部似乎是合理的。这似乎为第一个 blob 提供了正确的位置。
【问题讨论】:
标签: c# position controls centering