C# 把按钮放在绳子的前面

C# 把按钮放在绳子的前面,c#,winforms,richtextbox,C#,Winforms,Richtextbox,如何将按钮放置在设置标记的行前面? 按钮应放在字符串的正前方。如果用户移动标记,则按钮将移动到另一个字符串。如图所示 此时,按钮显示在发生单击的行的对面 private void richTextBox1_MouseClick(object sender, MouseEventArgs e) { buttonaddmenu.Visible = true; int index = richTextBox1.SelectionStart;

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

此时,
按钮
显示在发生
单击的行的对面

        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);
        }
    }
private void richTextBox1_鼠标单击(对象发送器,鼠标指针)
{
buttonaddmenu.Visible=true;
int index=richTextBox1.SelectionStart;
int line=richTextBox1.GetLineFromCharIndex(索引);
buttonaddmenu.Visible=true;
intx=richTextBox1.Location.x-10;
int y=25;
对于(int i=0;i

您可以根据按钮大小(我的按钮大小21、23)通过增加或减少x和y(例如:locationForm.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));

你说的“前面”和“对面”是什么意思还不是很清楚。你能准确地解释一下吗?预期的位置在哪里?“在行的前面”在哪里?我也不明白为什么你有一个for循环,其中内部指令总是相同的。按钮显示在鼠标上悬停在一行上还是单击一行?不。按钮应该显示在标记所在的位置。但是如何将按钮放置在字符串的对面?按钮只能垂直移动。对不起,还有一个问题。如何在面板上而不是窗体上显示此按钮?