2017-06-16 24 views
1

RichTextBoxにマーカーが取り付けられているラインに応じて、位置が垂直に変わるButtonがあります。 Buttonをクリックすると、RichTextBoxの全幅に合わせてButtonの反対側に、Panel(またはUserControl、おそらくそれが良い)が表示される必要があります。RichTextBoxにパネルを表示するにはどうすればいいですか?

Panelは、RichTextBoxにある必要があります。つまり、(500, 500)Panelの初期サイズをRichTextBoxのエッジからエッジまで表示すると、ユーザがフレームサイズを(500; 1000)に変更してPanelディスプレイを再度押すと、このPanelが伸び、すべてがまた伸びるはずですRichTextBoxに表示されます。以下は、Buttonを縦に表示するためのコードと、必要なアニメーションGIFの例です。 onClickの方法で

private void richTextBox1_TextChanged(object sender, EventArgs e) 
{ 
    var pos = richTextBox1.GetPositionFromCharIndex(richTextBox1.SelectionStart); 

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

    Point newLocation = new Point(locationOnForm.X - 10, pos.Y + locationOnForm.Y - 13); 

    button1.Location = newLocation; 
} 

Example GIF

+0

たぶん、あなたは、[コントロールレイヤー]で何かを試みることができる(https://msdn.microsoft.com/en-us/library /aa984382(v=vs.71).aspx)? –

+0

ボタンを配置するのと同じように、ucをオーバーレイすることができます。どこに問題がありますか? (RTBをオーバーレイする、つまりテキストの一部をカバーすることに注意してください。 – TaW

答えて

0

あなたは横にパネルを配置することができますか?

ボタンと同じ高さにしたい場合は、この行をメソッド内に追加します。

MyPanel.Size = new System.Drawing.Size(MyPanel.Width, MyButton.Height); 

そして、それを伸ばすためにあなたがSizeChngedフォームを使用することができるイベント

private void MyForm_SizeChanged(object sender, EventArgs e) 
     { 
      MyPanel.Width - MyButton.width + 5; 
     } 
関連する問題