2017-06-01 2 views
1

Wenn ich ein Wort in der RichTextBox anwähle oder doppelklicke, sollte ein Panel über diesem Wort erscheinen (Dieses panel ist anfänglich ausgeblendet und erscheint, wenn das Wort markiert ist). Wenn ich die Auswahl entferne, sollte die panel verschwinden.Wie zeige ich ein Panel an, wenn ich ein Wort in einer RichTextBox auswähle?

private void richTextBox1_SelectionChanged(object sender, EventArgs e) 
{ 
    if (richTextBox1.SelectedText.Length > 0) 
     panel1.Visible = true; 
    else 
     panel1.Visible = false; 
} 
+0

Also, was ist die Frage? – Icemanind

+0

Wie wird das Panel über dem ausgewählten Wort angezeigt? – Aino

+0

Sie können [diese Frage] (https://stackoverflow.com/q/11389601/3775798) nach einer Idee suchen, wie Sie Positionsinformationen ausgewählter Wörter für die Positionierung Ihres Panels erhalten. –

Antwort

0

Gemäß Ihren Änderungen benötigen Sie ein benutzerdefiniertes Steuerelement, um dies zu erreichen. Legen Sie Ihren benutzerdefinierten Speicherort dafür fest, ein anderes Problem könnte die z-index (Priorität) Ihrer Control (hier: buttonOverlay) sein. Mit buttonOverlay.BringToFront() stellen Sie es nach vorne ein.

private void richTextBox1_SelectionChanged(object sender, EventArgs e) 
{ 
    if (richTextBox1.SelectedText.Length > 0) 
    { 
     Point relativePoint = rTxtBxSelectionTester.GetPositionFromCharIndex(rTxtBxSelectionTester.SelectionStart); 
     int txtBsPosX = relativePoint.X + rTxtBxSelectionTester.Location.X; 
     int txtBxPosY = relativePoint.Y + rTxtBxSelectionTester.Location.Y - this.buttonOverlay.Size.Height; 
     relativePoint = new Point(txtBsPosX, txtBxPosY); 
     this.buttonOverlay.Location = relativePoint; 
     this.buttonOverlay.Visible = true; 
     this.buttonOverlay.BringToFront();   
    } 
    else 
    { 
     this.buttonOverlay.Visible = false; 
    } 
} 

die benutzerdefinierte hinzuzufügen Control fügen Sie den folgenden Code in Ihre Form Konstruktor:

this.buttonOverlay = new FormattingOverlay(this); 
this.Controls.Add(this.buttonOverlay); 
this.buttonOverlay.Visible = false;` 

Die FormattingOverlay ist eine Klasse, die von UserControl erbt:

public partial class FormattingOverlay : UserControl 
{ 

    public FormattingOverlay(Form1 mainForm) 
    { 
     this.mainForm = mainForm; 
     InitializeComponent(); 
    } 

    private void btnBold_Click(object sender, EventArgs e) 
    { 
     RichTextBox rTxtBx = mainForm.rTxtBxSelectionTester; 
     rTxtBx.SelectionFont = new Font(rTxtBx.Font, FontStyle.Bold); 
     rTxtBx.SelectionStart = rTxtBx.SelectionStart + rTxtBx.SelectionLength; 
     rTxtBx.SelectionLength = 0; 
     rTxtBx.SelectionFont = rTxtBx.Font; 
    } 
} 

Das Projekt gesamte Probe kann gefunden werden via this link.

+0

Es sollte keine Wörter auf diesem Panel sein. Ich brauche Knöpfe auf diesem Panel. – Aino

+0

In diesem Fenster sollten sich die Textformatierungsschaltflächen befinden. Wenn der Benutzer ein Wort auswählt, erscheint dieses Feld mit Bearbeitungsschaltflächen des ausgewählten Worts oder der ausgewählten Zeile. – Aino

+0

Ich habe einige Änderungen am Code vorgenommen, einen Blick darauf geworfen, auch ein neues Beispielprojekt erstellt. – jAC

Verwandte Themen