【问题标题】:Datagridview shall disappear when clicking on the Form in the background在后台单击表单时,Datagridview 将消失
【发布时间】:2016-08-01 15:27:53
【问题描述】:

如标题所述,我有一个表单,前面有一个 Datagridview。 datagridview 比我后面的表单小,我希望 Datagridview 在我单击除 Datagridview 之外的任何其他位置时消失。

我的代码如下所示:

this.dataGridView1.Leave += new System.EventHandler(this.focus);

Eventhandler 是这样定义的:

private void focus(object sender, EventArgs e)
{ 
     if(dataGridView1.Focused == false)
     {
         dataGridView1.Visible = false;
     }
}

我的问题是我的 Datagridview 仅在我的表单中的一个新事件被激活时才会消失,但当我单击表单上的文本框时不会消失。

谁能帮帮我?

【问题讨论】:

  • 您希望数据网格在失去焦点时变得不可见?或者你的问题是什么?
  • @GuidoG 12 是的

标签: c# .net winforms drop-down-menu datagridview


【解决方案1】:

如果您单击 FormToolStripButtonPictureBox 或任何其他不可选择的控件,则不会引发 Leave 事件。

如果您期望下拉菜单之类的行为,您可以在 ToolStripControlHost 中托管 DataGridView,并使用 ToolStripDropDown 显示它。这样,当您单击 `DataGridView 之外的任何位置时,它都会消失。它就像一个下拉菜单。网格也可以比您的表格大:

private void button1_Click(object sender, EventArgs e)
{
    this.dataGridView1.Margin = new Padding(0);
    var host = new ToolStripControlHost(this.dataGridView1);
    this.dataGridView1.MinimumSize = new Size(200, 100);
    host.Padding = new Padding(0);
    var dropdown = new ToolStripDropDown();
    dropdown.Padding = new Padding(0);
    dropdown.Items.Add(host);
    dropdown.Show(button1, 0,button1.Height);
}

重要提示:这是一个例子。最好注意在现实世界的应用程序中处理对象。例如,只使用一个 ToolStripdropDown 并在关闭表单时释放它。

【讨论】:

  • 我尝试了您的解决方案语句,但使用 dropdown.Show() 我收到一条错误消息,告诉我:无法从 'System.Windows.Forms.ToolStripStatusLabel' 转换为 'System.Windows.Forms.Control' .问题可能是我通过单击标签尝试了整个过程吗?
  • 它起作用了,我只需要使用一个控件作为参考点,例如一个组框,或者在你的示例中,一个按钮。我的错误是我认为标签是控件。
  • 太棒了!但您也可以在不使用参考控件的情况下显示下拉列表。看看Show 方法的其他重载。
【解决方案2】:

更改分配给的事件处理程序:

this.dataGridView1.Leave += new System.EventHandler(fokussiert);

专注于文本框时为我工作

【讨论】:

  • 如果您单击Form,或ToolStripButtonPictureBox 或任何其他不可选择的控件,Leave 将不会出现。
  • @JRoller 它对我没有任何改变。你在哪里定义了这个事件处理程序?因为我在我的设计师中定义了它。
【解决方案3】:

您希望您的 dgv 在您单击文本框时也消失?你是这个意思吗?

   private void dataGridView1_Leave(object sender, EventArgs e)
    {
        dataGridView1.Visible = false;        
    }

    private void Form1_Click(object sender, EventArgs e)
    {
        dataGridView1.Visible = false;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多