C# 当其父控件更改设计器中的可视属性时,如何通知子控件?
我有一个C# 当其父控件更改设计器中的可视属性时,如何通知子控件?,c#,.net,winforms,user-controls,C#,.net,Winforms,User Controls,我有一个UserControl,它承载一个DataGridView组件,该组件有一个标题和一个数据行 当DataGridView的容器在设计器中更改某些可视属性时,我在尝试通知DataGridView时遇到问题 我重写基本UserControl的BackColor属性以设置网格中数据行的BackColor。目标是,当我设置UserControl容器的背景色时,它将逐渐进入网格 如果显式设置UserControl的BackColor属性,则设计和运行时DataGridControl将正确执行 如果
UserControl
,它承载一个DataGridView
组件,该组件有一个标题和一个数据行
当DataGridView的容器在设计器中更改某些可视属性时,我在尝试通知DataGridView时遇到问题
我重写基本UserControl的BackColor属性以设置网格中数据行的BackColor。目标是,当我设置UserControl容器的背景色时,它将逐渐进入网格
如果显式设置UserControl的BackColor属性,则设计和运行时DataGridControl将正确执行
如果我只是更改容器中的背景色,那么我拥有的在运行时工作,但在设计时是间歇的
将控件放在容器上时,数据行背景色将跟随容器颜色
更改容器的背景色不会调用UserControl的属性setter来更改设计器中的数据行
更改容器确实会更改我在表格布局面板
上使用标签
创建的其他自定义组件。我没有将所有标签都设置为与容器匹配,因此必须使用属性设置器才能正确设置。如果我放一个MessageBox.Show(“Setter Called”)
在属性设置器中,它并不总是发生。在工作控件或我的目标非工作控件中
当我运行项目时,可执行文件会更改行以匹配。作为奖励,设计器的颜色会在显示可执行文件后立即更改,即使在我结束程序后,它仍然保持匹配的颜色
我还在UserControl上尝试了ParentChanged事件,但它仅在程序运行或我从表单中添加或删除控件时才会被调用。就像其他属性一样。永远不要更改IDE中的容器
使用Load事件使代码在运行时工作
当前代码:
public JobPanel()
{
InitializeComponent();
this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
dataGridView1.RowCount = 1;
dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None;
}
[BrowsableAttribute(true)]
public override Color BackColor { get { return base.BackColor; } set { SetBackColor(value); } }
private void SetBackColor(Color value)
{
if (BackColor != value) { //Makes no difference if we remove this test
base.BackColor = value;
if (dataGridView1 != null) {
dataGridView1.Rows[0].DefaultCellStyle.BackColor = BackColor;
dataGridView1.Rows[0].DefaultCellStyle.SelectionBackColor = BackColor;
}
}
}
private void JobPanel_Load(object sender, EventArgs e)
{
dataGridView1.DefaultCellStyle.BackColor = base.BackColor;
dataGridView1.DefaultCellStyle.ForeColor = base.ForeColor;
}