开发者

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

开发者 https://www.devze.com 2022-12-10 11:53 出处:网络
i intend to display some information when i right click on a textbox. this information is just plain readable information.

i intend to display some information when i right click on a textbox. this information is just plain readable information.

My approach was to use a richtextbox to be visible whenever the texbox is right clicked. however i am not able to hide the textbox when user clicks the container. using mousecapturechanged event for Richtextbox only caputres the click on the开发者_JAVA百科 Richtextbox and not any clicks made outside the Richtextbox. release focus also does not solve the purpose.

Edit: Gist:

So what am i trying to do is create a popup info box, whose sole purpose should be to display information and then hide when click is made anywhere other than the box itself


This works for me : this assumes you do want the RTF control to pop up where the user clicked in the TextBox, rather than in a fixed location. And this example suppresses the default context menu by setting ShortCutsEnabled : it re-enables using keyboard shortcuts when the left mouse goes down : if they are turned off. This example also defines a double-click handler on the RTF control which will also hide the RTF control.

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


I know you say that explicitly releasing focus does not work (how are you doing this, exactly?), what about setting up an event listener for the LostFocus even on the rich text box, and then hiding it when the even occurs?


In winforms Controls the LostFocus Events doesn't work in all situations.. better use the Leave event.. it always fires when the control Loses the Focus.. In your case you need to track the MouseDown( or whatever event of the mouse you like the best) in the TextBox to pop out the RichtextBox and then use the Leave event of the RichtextBox to Hide it. Do not try to Remove the RichtextBox Control in the leave event.. it might crash.

0

精彩评论

暂无评论...
验证码 换一张
取 消