这可能是一个初学者的问题,但我搜索过,没有找到任何明确的答案!
主要问题是:如何从C#中没有该控件的基本表单继承控件的属性(特别是FlatStyle
)?
详细信息:我Form1
继承自baseForm
。 baseForm
有一个Panel
和一个Label
控件,但没有Button
。在Form1
中,我添加了一个名为Button1
的按钮。如何通过Button
更改baseFrom
的样式?
我不想使用矩形或类似的方式创建自定义控件或重新设计按钮,但只更改应用程序中所有按钮的属性。
更新:我希望所有按钮都受到影响,无论它们是否已存在或只是已添加。无论在哪个容器中它们都无关紧要。
答案 0 :(得分:1)
在baseForm
中,您可以将ControlAdded
事件挂钩到要添加Panel
的{{1}},并通过代码适当地设置样式。这适用于从Button
继承的每个表单。
例如(在baseForm
)
baseForm
刚做了一个非常快速的测试......它甚至可以在设计模式下工作:
作为替代方案,如果您要在应用程序的任何位置使用格式繁多的按钮,您可以考虑创建一个继承自public partial class BaseForm : Form
{
public BaseForm()
{
InitializeComponent();
// "myPanel" is the panel where the button will be added in inherited forms
myPanel.ControlAdded += myPanel_ControlAdded;
}
private void myPanel_ControlAdded(object sender, ControlEventArgs e)
{
var button = e.Control as Button;
if (button != null)
{
button.FlatStyle = FlatStyle.Flat;
button.ForeColor = Color.Red;
}
}
}
的自定义控件,并在其中指定属性,例如:
Button
构建完成后,您将在工具箱中找到它(在“[您的项目]组件”选项卡下),或者您可以将其填充到您自己的控件库(在不同的解决方案中)并将其永久添加到Visual Toolbox中工作室。
答案 1 :(得分:1)
您需要使用Reflection
您可以使用LINQ查询来执行此操作。这将查询表单Button
var c = from controls in this.Controls.OfType<Button>()
select controls;
foreach(var control in c)
control.FlatStyle = FlatStyle.Flat;