簡體   English   中英

如何使文本框的行為類似於C#中的彈出信息框

[英]How to make textbox behave like a popup info box in C#

當我右鍵單擊文本框時,我打算顯示一些信息。 這些信息只是普通的可讀信息。

我的方法是每當右鍵單擊texbox時,都使用一個RichTextBox可見。 但是,當用戶單擊容器時,我無法隱藏文本框。 對Richtextbox使用mousecapturechanged事件只會顯示對Richtextbox的點擊,而不會對Richtextbox之外的任何點擊進行提示。 發布重點也不能解決目的。

編輯: 要點:

所以我想做的是創建一個彈出信息框,其唯一目的應該是顯示信息,然后在單擊框本身以外的任何位置時隱藏信息

我知道您說過明確釋放焦點是行不通的(確切地說,您是怎么做的?),即使在富文本框中為LostFocus設置了事件偵聽器,然后在出現偶數時將其隱藏,該怎么辦?

這對我有用:假設您確實希望RTF控件在用戶單擊TextBox的位置而不是固定位置彈出。 此示例通過設置ShortCutsEnabled抑制默認的上下文菜單:當鼠標左鍵按下時,它會使用鍵盤快捷鍵重新啟用:如果它們已關閉。 本示例還在RTF控件上定義了一個雙擊處理程序,該處理程序也將隱藏RTF控件。

    private Point rtfLocation;

    private void textBox1_MouseDown(object sender, MouseEventArgs e)
    {
        if (MouseButtons == MouseButtons.Right)
        {
            rtfLocation = this.PointToClient(textBox1.PointToScreen(new Point(e.X, e.Y)));
            textBox1.ShortcutsEnabled = false;
            richTextBox1.Location = rtfLocation;
            richTextBox1.Show();
        }
    }

    private void richTextBox1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        richTextBox1.Hide();
    }

    private void richTextBox1_Leave(object sender, EventArgs e)
    {
        richTextBox1.Hide();
    }

    private void Form1_Click(object sender, EventArgs e)
    {
        if (richTextBox1.Visible)
        {
            richTextBox1.Hide();
        }
    }

    private void textBox1_Click(object sender, EventArgs e)
    {
        if (richTextBox1.Visible) richTextBox1.Hide();
    }

    private void richTextBox1_VisibleChanged(object sender, EventArgs e)
    {
        textBox1.ShortcutsEnabled = ! richTextBox1.Visible;
    }

在winforms控件中,LostFocus事件並非在所有情況下都起作用。.更好地使用Leave事件..當控件失去焦點時,它總是會觸發。.在這種情況下,您需要跟蹤MouseDown(或鼠標的任何事件, (最好的)在TextBox中彈出RichtextBox,然后使用RichtextBox的Leave事件將其隱藏。 不要在離開事件中嘗試刪除RichtextBox控件。它可能會崩潰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM