2014-12-26 18 views
1

텍스트 상자에 html 요소가 포함 된 텍스트 상자가 있습니다. 각 텍스트는 별도의 텍스트 묶음으로 표시됩니다. 이제 각각의 요소에 대해 하나씩, 해당 요소의 왼쪽에 세로로 가운데에있는 그림 상자를 추가하고 싶습니다 (예제에서 div 내부의 p와 div는 우선해야하며 p는 무시해야합니다) .텍스트 상자에서 텍스트의 덩어리에 대해 수직으로 컨트롤 중심 맞추기

내가 지금까지 생각해 낸 코드는 분명히 Y 좌표가 올바르지 않기 때문에 뭔가 빠져 있습니다. 두 검은 얼룩이 두 pictureboxes 대표 아래 그림을 참조하십시오

enter image description here

그리고 여기하는 코드이다 :,

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를 사용하여 아래쪽을 찾는 것이 합리적입니다. 그리고 그것은 첫 번째 얼룩에 대한 올바른 위치를 제공하는 것 같습니다.

답변

0

해결책을 찾은 것 같습니다. 기본적으로 새 태그를 검색 할 때마다 입력 문자열이 짧아 지므로 검색 문자열에서 제거 된 문자 수를 추가하지 않으면 끝 태그 위치가 잘못됩니다. 또는 코드에서 조금 더 명확하게 알 수 있습니다.

while (m.Success) { 
    string new_s = str.Substring(m.Index); 
    string new_p = "</" + m.Groups["tag"].Value + ">"; 
    Match m_end = Regex.Match(new_s, new_p); 
    Point start_p = textBox1.GetPositionFromCharIndex(m.Index); 
    Point end_p = textBox1.GetPositionFromCharIndex(m_end.Index + m.Index); 
    int top = (int)start_p.Y; 
    int bottom = (int)(end_p.Y + textBox1.Font.Size); 
    if (m_end.Success) { 
     int midpoint = (top + bottom)/2; 
     PictureBox pictureBox = new PictureBox(); 
     pictureBox.Name = "pictureBox" + i.ToString(); 
     pictureBox.Location = new System.Drawing.Point(15, midpoint + 7 + 2); 
     pictureBox.Image = Image.FromFile("c:\\blob.png"); 
     pictureBox.Size = new Size(15, 15); 
     pictureBox.SizeMode = PictureBoxSizeMode.Zoom; 
     this.Controls.Add(pictureBox); 
    } 
    i++; 
    m = r.Match(str, m_end.Index + m.Index); 
}