C#WinForms FlowLayoutPanel锁定子控件

时间:2015-04-08 08:17:41

标签: c# winforms flowlayoutpanel

我有一个包含这样的元素的基本形式:
  - pnl类型为Panel的搜索:搜索按钮
  - 类型FlowLayoutPanel的pnlActions:添加,编辑,删除,导出..等按钮

没有锁定,两个面板的修饰符都是Private&按钮的修饰符为Protected

FlowLayoutPanel用于自定义子表单中的选项(例如删除删除选项),而不留空格,因为元素将相应地流动。

在子表单中,只能访问搜索按钮。 pnlActions中的按钮在设计器中被锁定,但通过检查属性Locked = FalseModifiers= Protected

尝试将pnlActions'修饰符设置为Protected,但它仍然相同。

知道是什么导致了这种行为吗? 除了内部控件布局之外,PanelFlowLayoutPanel之间的区别是什么? 如果我手工编码任何东西,我会发布代码示例,但它都是由设计师生成的

我在Win7上使用VS 2013,如果这很重要的话 提前致谢

2 个答案:

答案 0 :(得分:1)

这是Designer的问题。如果您通过代码进行所有更改工作... 该问题将无法解决,因为该平台不再受到Microsoft的维护。

答案 1 :(得分:0)

我知道这是一个古老的问题,但是如果有人需要,我也提供了一个可能的解决方案。

我们将创建一个继承FlowLayoutPanel的类,我将其命名为FlowLayoutPanelHeritable。您可以将其放在您认为合适的名称空间中,在本示例中,名称空间为WindowsFormsApp

using System.ComponentModel;
using System.Windows.Forms;
using System.Windows.Forms.Design;

namespace WindowsFormsApp
{
    [Designer(typeof(ParentControlDesigner))]
    public class FlowLayoutPanelHeritable : FlowLayoutPanel
    {
    }
}

首先,我们必须设置FlowLayoutPanelFatherFormProtected的修饰符。现在,我们必须通过访问FatherForm的{​​{1}}中的代码进行修改。我们将用FatherForm.designer.cs替换FlowLayoutPanel的每个实例(在变量的创建和初始化中)。然后,我们保存并重新编译。

现在,如果您访问FlowLayoutPanelHeritable,将在设计时看到您不再具有修改限制。

重要提示:如果要编辑ChildForm,则必须访问FatherForm并将所有FatherForm.designer.cs替换为FlowLayoutPanelHeritable;完成编辑后,执行相反的过程。