2017-06-01 71 views
1

當我選擇或雙擊RichTextBox中的一個單詞時,面板應在此單詞上方出現(此panel最初是隱藏的,並且在單詞突出顯示時出現)。當我刪除選擇時,panel應該消失。如何在RichTextBox中選擇單詞時顯示面板?

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

那麼問題是什麼? – Icemanind

+0

如何使面板出現在所選單詞的上方? – Aino

+0

您可能需要檢查[此問題](https://stackoverflow.com/q/11389601/3775798),瞭解如何獲取所選單詞的位置信息以定位面板。 –

回答

0

根據您的更改,您需要一個自定義控件來實現此目的。 爲此設置您的自定義位置,另一個問題可能是您的Control(此處:buttonOverlay)的z-index(優先級)。用buttonOverlay.BringToFront(),你可以將它設置在前面。

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; 
    } 
} 

添加自定義Control下面的代碼添加到您的Form構造:

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

FormattingOverlay是從UserControl繼承的類:

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; 
    } 
} 

整個樣本項目能夠被發現via this link.

+0

這個面板上不應該有文字。我需要在這個面板上有按鈕。 – Aino

+0

在此面板中,應定位文本格式按鈕。如果用戶選擇了一個單詞,那麼該面板將顯示所選單詞或行的編輯按鈕。 – Aino

+0

我對代碼做了一些更改,看看它,還創建了一個新的示例項目。 – jAC

相關問題