【发布时间】:2014-01-30 02:23:29
【问题描述】:
我正在编写一个继承的DataGridView 控件,默认情况下它将有两列。 DGV 位于用户控件 GeneralTabPanel 上,该控件继承自 MainTabPanel,而 MainTabPanel 继承自 UserControl。原因是MainTabPanel 包含每个继承面板都必须覆盖的虚函数。
问题是每当我在 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;
}
}
}
GeneralTabPanel
namespace AnyGameEngineEditor {
public partial class GeneralTabPanel : MainTabPanel {
public GeneralTabPanel () {
InitializeComponent ();
}
}
}
MainTabPanel
using System.Windows.Forms;
namespace AnyGameEngineEditor {
public partial class MainTabPanel : UserControl {
public MainTabPanel () {
InitializeComponent ();
this.Dock = DockStyle.Fill;
}
}
}
这是我可以用 VS2013 Express 在我的机器上重现该问题的准系统。这是如何重现(我还没有在另一台机器上实际测试过):
- 创建一个新的 Windows 窗体项目。
- 将这三个文件复制到根文件夹中。
- 在设计器中打开
GeneralTabPanel。 - 打开
GeneralTabPanel的 Designer .cs 文件。 - 构建项目。
- .cs 文件底部应该有两个新的
DataGridViewTextBoxCell变量。 - 保存项目并重新构建,现在底部应该还有两个变量。
- 重复 5-7 直到您确信发生了一些有趣的事情。
我发现如果我注释掉MainTabPanel 中的Dock 行,就不会发生这种情况。
所以最终我的问题是为什么会发生这种情况?
【问题讨论】:
-
如果您对
this.ColumnCount = 2;行发表评论或给columncount提供其他号码会发生什么 -
@gmailuser 该数字决定了每个构建添加了多少列。如果我注释掉该行,加上它下面的行由于空异常,那么网格将有零列。我需要网格总是有两列。
-
我的意思是说更改值只是为了调试目的。例如。如果您分配 3 列,是否会发生同样的事情。
-
@gmailuser 是的,这就是我在评论中的意思。
标签: c# winforms datagridview visual-studio-2013