我如何以编程方式向c上的窗体上的所有控件添加上下文菜单条#

问题描述:

我有一个上下文菜单条(contextColorOptions),它允许更改任何源控件的背景色和前景色,以访问上下文菜单条。我如何以编程方式向c上的窗体上的所有控件添加上下文菜单条#

private void backgroundColorToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (colorDialog1.ShowDialog() == DialogResult.OK) 
     { 
      contextColorOptions.SourceControl.BackColor = colorDialog1.Color; 
     } 
    } 

    private void textColorToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (colorDialog1.ShowDialog() == DialogResult.OK) 
     { 
      contextColorOptions.SourceControl.ForeColor = colorDialog1.Color; 
     } 
    } 

    private void resetColorsToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     contextColorOptions.SourceControl.BackColor = DefaultBackColor; 
     contextColorOptions.SourceControl.ForeColor = DefaultForeColor; 
    } 

我想能够分配我的表单中的每个控件具有相同的上下文菜单条。

我尝试这样做:

 foreach (Control cntrl in this.Controls) 
     { 
      cntrl.ContextMenuStrip = contextColorOptions; 
     } 

但是,这似乎并没有工作。有没有人有任何想法? 提前谢谢!

注意并非所有控件都具有相同的属性,并且您可以以相同的方式调用。您必须先检查该控件是否具有名为backcolor,forecolor或contextmenustrip的属性名称。关键是查询控件的类型并在背景和面板上更改颜色,并为所有内部设置透明颜色。

有其他简单的方法,但这个工程:

foreach (Control cntrl in this.Controls) 
     { 
      if (cntrl.getType() == "System.Windows.Forms.Form") 
        cntrl.ContextMenuStrip = contextColorOptions; 
     } 

希望这有助于!!。如果你whant得到一个控件的属性,以检查是否控制有你想要的属性,你必须使用这样的事情:

var controlType = control.GetType(); 
     var property = controlType.GetProperty("The property you are looking for", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 

如果属性= NULL 你得到它:)