如何以编程方式将上下文菜单条添加到 c# 中的 win 窗体上的所有控件
How can I programmatically add a Context Menu Strip to all controls on a win Form in c#
我有一个上下文菜单条 (contextColorOptions),它允许更改访问上下文菜单条的任何源控件的背景颜色和前景色。
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;
}
希望对您有所帮助!!如果你想获取控件的属性来检查控件是否有你想要的属性,你必须使用这样的东西:
var controlType = control.GetType();
var property = controlType.GetProperty("The property you are looking for", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if 属性 != null
你明白了:)
我有一个上下文菜单条 (contextColorOptions),它允许更改访问上下文菜单条的任何源控件的背景颜色和前景色。
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;
}
希望对您有所帮助!!如果你想获取控件的属性来检查控件是否有你想要的属性,你必须使用这样的东西:
var controlType = control.GetType();
var property = controlType.GetProperty("The property you are looking for", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if 属性 != null 你明白了:)