繁体   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