我的属性网格重复在每个控件上单击呈现到表单

本文关键字:单击 表单 控件 网格 属性 我的 | 更新日期: 2023-09-27 18:18:00

当我点击任何控件在我的表单或用户控件,然后propertygrid显示,但它重复的每个控件上的表单。如何对每个控件只显示一次单击

public void Selectpropertygrid()
{            
    foreach (Control c in dock_Control1.Controls)
    {
        c.MouseClick+=new MouseEventHandler(c_MouseClick);
    }
    foreach (Control ctr in this.Controls)
    {
        ctr.MouseClick += new MouseEventHandler(c_MouseClick);
    }
 }
 
 public void c_MouseClick(object sender, MouseEventArgs e)
 {   
     Control ct=sender as Control;
     prp = new PropertyGrid();
     prp.CommandsVisibleIfAvailable = true;
     prp.Location = new Point(0, 0);
     prp.Size = new Size(220 ,800);      
     prp.Enabled = true;            
     prp.Visible = true;
     prp.Text = "Properties";
     prp.Dock = DockStyle.Left;
     prp.Enabled = true;
     this.Controls.Add(prp);            
     prp.SelectedObject = ct;           
 }

我的属性网格重复在每个控件上单击呈现到表单

很可能您已经向c_MouseClick事件处理程序订阅了多个事件。如果不建议在添加所需的事件处理程序之前删除任何事件处理程序,则更可取。

试着像这样修改你的代码,看看它是否被修复了。

public void Selectpropertygrid()
{            
    foreach (Control c in dock_Control1.Controls)
    {
        c.MouseClick -= c_MouseClick;
        c.MouseClick += c_MouseClick;
    }
    foreach (Control ctr in this.Controls)
    {
        ctr.MouseClick -= c_MouseClick;
        ctr.MouseClick += c_MouseClick;
    }
 }

我不确定或不清楚你的情况。但据我所知,对于每个UserControl或Control,你必须有一个事件附加到它。因此,在事件结束时,使用'sender'参数从控件中删除(-=)该事件。请尽量提供更多的信息,以便我能清楚地说明我要说的话。

(sender as Control).Click -= event();

希望能有所帮助。