2017-06-13 45 views
0

如何将button放置在设置标记的行的前面? button应放置在字符串之前。如果用户移动标记,那么button将移动到另一个字符串。如图所示。将按钮放在字符串前面

此刻,button显示在click发生的行的对面。

 private void richTextBox1_MouseClick(object sender, MouseEventArgs e) 
    { 
     buttonaddmenu.Visible = true; 

     int index = richTextBox1.SelectionStart; 
     int line = richTextBox1.GetLineFromCharIndex(index); 
     buttonaddmenu.Visible = true; 
     int x = richTextBox1.Location.X - 10; 
     int y = 25; 

     for (int i = 0; i < richTextBox1.Lines.Length; i++) 
     { 
      buttonaddmenu.Location = new Point(3, Cursor.Position.Y - 170); 
     } 
    } 

enter image description here

+1

这不是很清楚w ^你的意思是“在...之前”和“在...之后”。你能解释一下吗? –

+0

预期的位置在哪里? “在线前面”在哪里? – Sweeper

+0

我也不明白为什么你有一个for循环的内部指令总是相同的 –

回答

1

您可以通过增加或减少的X和Y改变基于按钮的大小(我的按钮大小的21,23)的新位置(例如:locationOnForm.X-20)试试这个:

 private void richTextBox1_SelectionChanged(object sender, EventArgs e) 
     { 
     var pos = richTextBox1.GetPositionFromCharIndex(richTextBox1.SelectionStart); 
     Point locationOnForm = richTextBox1.FindForm().PointToClient(richTextBox1.Parent.PointToScreen(richTextBox1.Location)); 
     Point newLocation = new Point(locationOnForm.X-20, 
          pos.Y + locationOnForm.Y); 
     button2.Location = newLocation; 
     } 

更新

 Point locationOnForm = panel1.FindForm().PointToClient(panel1.Parent.PointToScreen(richTextBox1.Location)); 
+0

但如何将按钮放在字符串的对面?该按钮应该只能垂直移动。 – Kaya

+0

回答更新请检查 –

+0

对不起,还有一个问题。如何在面板上显示此按钮,而不是在窗体上显示? – Kaya