我如何以编程方式向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 你得到它:)