WinForm窗体继承表格,无法修改属性

我创建了一个窗体,里面有DataGridView,并设置为public。
然后创建窗体2,继承上面的窗体,然后我发现我不能对DataGridView进行修改,设计器的所有属性都是灰色的。还有个控件BindingNavigator也是一样的问题。

有什么解决办法可以让我直接在设计器内进行操作,虽然可以代码改,但那也太麻烦了

该回答引用GPTᴼᴾᴱᴺᴬᴵ
这是因为继承的窗体2并没有将DataGridView和BindingNavigator的访问修饰符设为public,导致无法在设计器中进行修改。

解决方法:

  1. 在窗体2的.Designer.cs文件中,将DataGridView和BindingNavigator的访问修饰符改为public。

  2. 在窗体2的.cs文件中,添加以下代码,以使设计器中的属性修改可以生效。

public new DataGridView DataGridView1
{
    get { return base.DataGridView1; }
    set { base.DataGridView1 = value; }
}

public new BindingNavigator BindingNavigator1
{
    get { return base.BindingNavigator1; }
    set { base.BindingNavigator1 = value; }
}

这样就可以在设计器中修改继承的DataGridView和BindingNavigator控件的属性了。

参考GPT和自己的思路:

这个问题是由于继承关系导致的,继承的子窗体不允许直接修改基类窗体中定义的控件的属性。但是你可以通过以下步骤来解决这个问题:

  1. 将DataGridView和BindingNavigator的访问修饰符改为protected,这样继承窗体就能访问到这些控件了。

  2. 在窗体2的设计器中,选中DataGridView或BindingNavigator控件,然后在属性窗口中选择“复制”。

  3. 在窗体2的设计器中,选择窗体2本身,然后在属性窗口中选择“粘贴”。这样就可以将基类窗体中DataGridView或BindingNavigator的属性复制到继承的窗体2中了。

  4. 如果你想要修改继承窗体中的DataGridView或BindingNavigator控件的某个属性,可以在窗体2中的代码文件里面覆盖基类窗体中的这个控件,并在窗体2的构造函数中对该控件进行属性修改。

希望这些步骤可以解决你遇到的问题,祝你好运!

将第一个窗体的DataGridView作为属性,而不是成员变量