Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将面板的单个实例多次添加到单个FlowLayoutPanel(C#桌面应用程序)中?_C#_.net_Visual Studio_Desktop Application - Fatal编程技术网

如何将面板的单个实例多次添加到单个FlowLayoutPanel(C#桌面应用程序)中?

如何将面板的单个实例多次添加到单个FlowLayoutPanel(C#桌面应用程序)中?,c#,.net,visual-studio,desktop-application,C#,.net,Visual Studio,Desktop Application,我有一个应用程序,我想将面板的单个实例多次添加到单个FlowLayoutPanel实例中。因此,如果我更改单个面板实例的背景颜色,它将在所有视图上生效。单个实例意味着整个应用程序中只存在一个该实例。 控件只能有一个所有者,不能有多个所有者 因此,一个实例不能有多个所有者,因此不可能做到这一点 然而,根据你所描述的,这也是没有必要的。您不希望只使用一个实例,而是希望多个控件同时以相同的方式运行。因此,将所有面板存储在一个列表或数组中,然后迭代它们,并在需要时应用新的背景颜色。像这样 //Creat

我有一个应用程序,我想将面板的单个实例多次添加到单个FlowLayoutPanel实例中。因此,如果我更改单个面板实例的背景颜色,它将在所有视图上生效。

单个实例意味着整个应用程序中只存在一个该实例。 控件只能有一个所有者,不能有多个所有者

因此,一个实例不能有多个所有者,因此不可能做到这一点

然而,根据你所描述的,这也是没有必要的。您不希望只使用一个实例,而是希望多个控件同时以相同的方式运行。因此,将所有面板存储在一个列表或数组中,然后迭代它们,并在需要时应用新的背景颜色。像这样

//Create a list on your form level.
private List<Panel> PanelList { get; set; }

//Store a list of Panels.  You can also add them manually.
//Do this after initialisation of your form and all controls are added.
this.PanelList = this.Controls.OfType<Panel>().ToList();

//When required, call this method
private void UpdatePanelBackgroundColor(Color backColor)
{
    foreach (var panel in this.PanelList)
        panel.BackColor = backColor;
}
//在表单级别创建列表。
私有列表小组成员{get;set;}
//存储面板列表。您也可以手动添加它们。
//在初始化表单并添加所有控件后执行此操作。
this.PanelList=this.Controls.OfType().ToList();
//需要时,调用此方法
私有void UpdatePanelBackgroundColor(颜色背景色)
{
foreach(此.PanelList中的var面板)
panel.BackColor=背景色;
}

单个实例意味着整个应用程序中只存在该实例中的一个。 控件只能有一个所有者,不能有多个所有者

因此,一个实例不能有多个所有者,因此不可能做到这一点

然而,根据你所描述的,这也是没有必要的。您不希望只使用一个实例,而是希望多个控件同时以相同的方式运行。因此,将所有面板存储在一个列表或数组中,然后迭代它们,并在需要时应用新的背景颜色。像这样

//Create a list on your form level.
private List<Panel> PanelList { get; set; }

//Store a list of Panels.  You can also add them manually.
//Do this after initialisation of your form and all controls are added.
this.PanelList = this.Controls.OfType<Panel>().ToList();

//When required, call this method
private void UpdatePanelBackgroundColor(Color backColor)
{
    foreach (var panel in this.PanelList)
        panel.BackColor = backColor;
}
//在表单级别创建列表。
私有列表小组成员{get;set;}
//存储面板列表。您也可以手动添加它们。
//在初始化表单并添加所有控件后执行此操作。
this.PanelList=this.Controls.OfType().ToList();
//需要时,调用此方法
私有void UpdatePanelBackgroundColor(颜色背景色)
{
foreach(此.PanelList中的var面板)
panel.BackColor=背景色;
}

您可以尝试以下代码将面板多次添加到单个FlowLayoutPanel

另外,我在FlowLayoutPanel中创建了更改背景颜色的代码

代码:

公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
}
专用面板CreateNotificationPanel()
{
var p=新面板{BackColor=Color.Red};
p、 添加(新按钮{Text=“Test”});
返回p;
}
FlowLayoutPanel flp=新的FlowLayoutPanel{Dock=DockStyle.Fill};
私有void Form1\u加载(对象发送方、事件参数e)
{
添加(CreateNotificationPanel());
添加(CreateNotificationPanel());
添加(CreateNotificationPanel());
此.Controls.Add(flp);
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
var result=flp.Controls.OfType().ToList();
foreach(结果中的var项目)
{
item.BackColor=颜色.黄色;
}
}
}
结果:


您可以尝试以下代码将面板多次添加到单个FlowLayoutPanel

另外,我在FlowLayoutPanel中创建了更改背景颜色的代码

代码:

公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
}
专用面板CreateNotificationPanel()
{
var p=新面板{BackColor=Color.Red};
p、 添加(新按钮{Text=“Test”});
返回p;
}
FlowLayoutPanel flp=新的FlowLayoutPanel{Dock=DockStyle.Fill};
私有void Form1\u加载(对象发送方、事件参数e)
{
添加(CreateNotificationPanel());
添加(CreateNotificationPanel());
添加(CreateNotificationPanel());
此.Controls.Add(flp);
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
var result=flp.Controls.OfType().ToList();
foreach(结果中的var项目)
{
item.BackColor=颜色.黄色;
}
}
}
结果:


我不喜欢FlowLayoutPanel,因为它的属性有限。您可以使用常规面板做更多的工作,并在其中添加您自己的面板阵列。如果您共享一小部分代码,您将收到更精确的答案。我不喜欢FlowLayoutPanel,因为它的属性有限。你可以使用一个普通的面板做更多的事情,并在其中添加你自己的面板阵列。如果你共享一小部分代码,你会得到更精确的答案。这就是我目前所做的。顺便说一句,我不希望一个控件有多个所有者,我希望一个实例在同一个flowLayoutPanel中多次呈现。@NishantKathiriya是的,我知道你想要什么。但是为了使一个实例被渲染多次,它必须有多个所有者!我已经按照你的建议实施了小组。但现在的问题是,如果一个flowLayoutPanel中添加了500多个面板,不仅应用程序在渲染时会卡住,而且整个笔记本电脑都会挂起,我必须强制关机。任何关于如何处理这个问题的想法。顺便说一下,我只需要将空面板添加到flowLayoutPanel。面板内部不会有任何控制。此面板仅用于可视化。@NishantKathiriya您正在使用SuspendLayout()吗?否则,请提出另一个问题。这就是我目前所做的。顺便说一下,我不希望单个控件具有多个所有者,我希望单个实例在同一个flowLa中多次呈现