我打算在右键单击文本框时显示一些信息。这些信息只是简单易读的信息。
我的方法是在右键单击texbox时使用richtextbox可见。但是,当用户单击容器时,我无法隐藏文本框。对Richtextbox使用mousecapturechanged事件只会限制Richtextbox上的点击,而不是Richtextbox外部的任何点击。释放焦点也无法解决目的。
修改:要点:
所以我要做的是创建一个弹出信息框,其唯一目的应该是显示信息,然后在点击方框本身以外的任何地方隐藏
答案 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控件..它可能会崩溃。