2017-06-16 1 views
1

Es gibt eine Button, die ihre Position vertikal ändert, je nachdem, in welcher Zeile der Marker in der RichTextBox installiert ist. Es ist notwendig, dass, wenn ich auf die Button die Panel (oder UserControl, vielleicht ist es besser), gegenüber der Button auf die volle Breite der RichTextBox erschien.Wie kann ich ein Panel auf einer RichTextBox anzeigen?

Panel sollte auf der RichTextBox befinden. Das heißt, wenn die Anfangsgröße des Formulars (500, 500) und dieses Panel von der Kante bis zum Rand der RichTextBox angezeigt wird, wenn der Benutzer die Rahmengröße auf (500; 1000) ändert und erneut die Panel Anzeige drückt, sollte diese Panel dehnen und alles ist auch angezeigt auf der RichTextBox. Unten ist der Code zum Anzeigen der Button vertikal und ein animiertes GIF-Beispiel von dem, was ich brauche.

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

Vielleicht versuchen Sie könnte etwas mit [control Schichtung] verwenden (https://msdn.microsoft.com/en-us/library /aa984382(v=vs.71).aspx)? –

+0

Sie können den uc überlagern, indem Sie ihn ähnlich positionieren wie den Knopf. Wo genau ist das Problem? (Beachten Sie, dass es die RTB überlagert, dh es wird einen Teil des Textes abdecken. – TaW

Antwort

0

Im onClick Methode Sie das Panel daneben positionieren könnte?

private void MyButton_Click(object sender, EventArgs e) 
    { 
     MyPanel.Location = new Point(MyButton.Location.X + MyButton.Width, MyButton.Location.Y); 
     MyPanel.Visible = true; 
    } 

Und wenn Sie es die gleiche Höhe wie die Schaltfläche sein möchten, fügen Sie diese Zeile in der Methode.

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

Und es Dehnen Sie Ihre Formulare SizeChnged Ereignis

private void MyForm_SizeChanged(object sender, EventArgs e) 
     { 
      MyPanel.Width - MyButton.width + 5; 
     } 
Verwandte Themen