2017-06-13 3 views
0

buttonをマーカーが設定されている行の前に置く方法はありますか? buttonは文字列の直前に置く必要があります。ユーザーがマーカーを移動すると、buttonは別の文字列に移動します。写真のように。ボタンを文字列の前に置く

現時点ではclickが発生した行の反対側にbuttonが表示されます。

 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

それはワット非常に明確ではありません帽子の意味は、「前」と「反対」です。正確に説明できますか? –

+0

予想される位置はどこですか? 「ラインの前」はどこですか? – Sweeper

+0

私はまた、内部命令が常に同じforループを持っている理由を理解していません –

答えて

1

ます(例:locationOnForm.X-20)は、xとyを増加または減少させることによって(私のボタンサイズ21、23)、ボタンの大きさに基づいて新しい位置を変更することができ、これを試してみてください。

 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