我正在编写一个继承的DataGridView控件,默认情况下它将具有两列。 DGV驻留在用户控件GeneralTabPanel上,该控件从MainTabPanel继承,而UserControlMainTabPanel继承。原因是GeneralTabPanel包含每个继承面板都必须重写的虚函数。

问题是,每当我在Designer中查看GeneralTabPanel并单击Build时,Visual Studio Express 2013都会在Designer中生成两列并将其添加到DGV。

SuperDataGridView

using System.Windows.Forms;

namespace AnyGameEngineEditor {

    public class SuperDataGridView : DataGridView {

        public SuperDataGridView () {
            this.ColumnCount = 2;
        }
    }
}


常规选项卡面板

namespace AnyGameEngineEditor {
    public partial class GeneralTabPanel : MainTabPanel {

        public GeneralTabPanel () {
            InitializeComponent ();
        }

    }
}


主选项卡面板

using System.Windows.Forms;

namespace AnyGameEngineEditor {
    public partial class MainTabPanel : UserControl {
        public MainTabPanel () {
            InitializeComponent ();
            this.Dock = DockStyle.Fill;
        }

    }
}


这是我可以使用VS2013 Express在机器上重现该问题的准系统。这是如何重现的方法(我尚未在另一台计算机上进行过实际测试):


新建一个Windows Forms项目。
将这三个文件复制到根文件夹中。
在设计器中打开GeneralTabPanel
打开DataGridViewTextBoxCell的Designer .cs文件。
生成项目。
.cs文件底部应有两个新的Dock变量。
保存项目并重建,现在应该在底部再添加两个变量。
重复5-7,直到您确信发生了有趣的事情。


我发现,如果我注释掉MainTabPanel中的行,则不会发生这种情况。

因此,最终我的问题是,为什么在世界上会发生这种情况?

最佳答案

AutoGenerateColumns设置为false。

09-25 19:12