如何使文本框的行为像C#中的弹出信息框

时间:2009-11-06 01:54:03

标签: c# user-interface

我打算在右键单击文本框时显示一些信息。这些信息只是简单易读的信息。

我的方法是在右键单击texbox时使用richtextbox可见。但是,当用户单击容器时,我无法隐藏文本框。对Richtextbox使用mousecapturechanged事件只会限制Richtextbox上的点击,而不是Richtextbox外部的任何点击。释放焦点也无法解决目的。

修改:要点:

所以我要做的是创建一个弹出信息框,其唯一目的应该是显示信息,然后在点击方框本身以外的任何地方隐藏

3 个答案:

答案 0 :(得分:0)

我知道你说明确释放焦点不起作用(你是怎么做的,确切地说?),即使在富文本框中为LostFocus设置事件监听器,然后在偶数发生时隐藏它也是如此?

答案 1 :(得分:0)

这适用于我:这假设您确实希望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;
    }

答案 2 :(得分:0)

在winforms中控制LostFocus事件在所有情况下都不起作用..更好地使用Leave事件..它总是在控件丢失焦点时触发..在你的情况下你需要跟踪MouseDown(或者任何事件) TextBox中你最喜欢的鼠标,弹出RichtextBox,然后使用RichtextBox的Leave事件来隐藏它。不要尝试在leave事件中删除RichtextBox控件..它可能会崩溃。