C# 如何更改基本窗体中的控件属性(FlatStyle)?

C# 如何更改基本窗体中的控件属性(FlatStyle)?,c#,inheritance,C#,Inheritance,这可能是一个初学者的问题,但我搜索了一下,没有找到任何明确的答案 主要问题是:如何从C#中没有控件的基窗体继承控件的属性(特别是FlatStyle) 详细信息:我从baseForm继承了Form1baseForm有一个面板和一个标签控件,但没有按钮。在Form1中,我添加了一个名为Button1的按钮。如何通过baseFrom更改该按钮的样式? 我不想创建自定义控件或使用矩形或类似方式重新设计按钮,但只想更改应用程序中所有按钮的属性 更新:我希望所有按钮都受到影响,无论它们是已经存在还是刚刚添

这可能是一个初学者的问题,但我搜索了一下,没有找到任何明确的答案

主要问题是:如何从C#中没有控件的基窗体继承控件的属性(特别是
FlatStyle

详细信息:我从
baseForm
继承了
Form1
baseForm
有一个
面板
和一个
标签
控件,但没有
按钮
。在
Form1
中,我添加了一个名为
Button1
的按钮。如何通过
baseFrom
更改该
按钮的样式?
我不想创建自定义控件或使用矩形或类似方式重新设计按钮,但只想更改应用程序中所有按钮的属性



更新:我希望所有按钮都受到影响,无论它们是已经存在还是刚刚添加。无论它们在哪个容器(如果有的话)中。

baseForm
中,您都可以在
面板上钩住
ControlAdded
事件,在该面板上添加
按钮,并通过代码适当地设置样式。这将适用于从
baseForm
继承的每个表单

例如(在
baseForm
中)

刚刚做了一个很快的测试。。。它甚至可以在设计模式下工作:

作为另一种选择,如果您要在应用程序中到处使用大量样式的按钮,可以考虑创建从<代码>按钮>代码>继承的自定义控件,并在那里分配属性,如:

public class FlatButton : System.Windows.Forms.Button
{
  public FlatButton()
  {
    FlatStyle = FlatStyle.Flat;
  }
}

生成后,您将在工具箱(在“[您的项目]组件”选项卡下)中找到它,或者您可以将其填充到自己的控件库(在不同的解决方案中)中,并将其永久添加到Visual Studio的工具箱中。

您需要使用

您可以使用查询来执行此操作。这将查询表单上键入
按钮的所有内容

var c = from controls in this.Controls.OfType<Button>()
              select controls;
foreach(var control in c)
    control.FlatStyle = FlatStyle.Flat;
var c=from this.controls.OfType()中的控件
选择控件;
foreach(c中的var控制)
control.FlatStyle=FlatStyle.Flat;

这是可行的,尽管它需要递归(
This.Controls
将只提供第一个子控件,而不是嵌套控件)我已编辑了您的标题。请看,“,其中的共识是“不,他们不应该”。你需要至少10个好的理由来做这样不明智的事情。你付出的不够。如果你想实现一个主题,那么只需要创建一个主题感知的按钮。@HansPassant我个人认为,在winforms上设置一些按钮的平面样式并不需要所有这些原因,也不需要一个完整的主题引擎的复杂性:-)@HansPassant什么是主题感知按钮?如果是自定义按钮,我必须指出,我不希望我的项目充满自定义对象,因为需要更改一些参数。不喜欢类的Winforms程序员就像不喜欢水的鱼。太多了。从长远来看,好好看看WPF,你会更喜欢它。这只会对面板的第一级子级进行更改,而不是嵌套的子级。例如,如果
myPanel
包含一个SplitContainer,它不会对SplitContainer中的按钮进行任何更改。正如我所说的,您将此代码放在要添加按钮的控件上。我回答了你的问题,你只提到了一个小组。如果你想要别的东西,把它加到问题上。我还指定了一种适用于任何地方的替代方法。我对此表示赞赏,并补充了这个问题。正如我提到的,不需要使用定制控件,因为我想要更改的只是FlatStyle。请您更新一下,并解释一下这个代码是如何影响所有按钮的,不管它们是以前存在的还是刚刚添加的。请阅读我的答案,就在屏幕截图下面,它说,
作为一个替代…
。。。忽略“重样式化”部分,它适用于任何类型的样式化按钮,只要您通过内置属性对其进行样式化。自定义绘图将需要额外的工作,但通过属性设置样式在此处进行了说明(如果已经有按钮,则必须将其转换为按钮子体,但这应该是对
.Designer.cs
文件的简单搜索和替换
var c = from controls in this.Controls.OfType<Button>()
              select controls;
foreach(var control in c)
    control.FlatStyle = FlatStyle.Flat;