首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展的DataGridView不应用更改

扩展的DataGridView不应用更改
EN

Stack Overflow用户
提问于 2018-11-05 03:02:42
回答 1查看 113关注 0票数 1

我扩展了一个DataGridView,但不幸的是,在使用了工具箱中的模板之后,它为我生成了默认参数。看起来它覆盖了我的设置。我在这里做错了什么?

代码语言:javascript
复制
class CustomDataGrid2 : DataGridView
{
    public CustomDataGrid2() : base()
    {
        base.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
        base.ColumnHeadersHeight = 23;
        System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
        base.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
        base.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
        dataGridViewCellStyle1.Alignment = DataGridViewContentAlignment.MiddleLeft;
        dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.ControlDark;
        dataGridViewCellStyle1.Font = new System.Drawing.Font("Verdana", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
        dataGridViewCellStyle1.ForeColor = System.Drawing.Color.White;
        dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
        dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
        dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
        base.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;

        base.EnableHeadersVisualStyles = false;
        base.Location = new System.Drawing.Point(112, 186);
        base.RowHeadersVisible = false;
        base.Size = new System.Drawing.Size(401, 150);
    }
}

结果:

代码语言:javascript
复制
// 
// customDataGrid21
// 
this.customDataGrid21.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.customDataGrid21.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.ControlDark;
dataGridViewCellStyle1.Font = new System.Drawing.Font("Verdana", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
dataGridViewCellStyle1.ForeColor = System.Drawing.Color.White;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.customDataGrid21.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
this.customDataGrid21.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.customDataGrid21.EnableHeadersVisualStyles = false;
this.customDataGrid21.Location = new System.Drawing.Point(60, 138);
this.customDataGrid21.Name = "customDataGrid1";
this.customDataGrid21.RowHeadersVisible = false;
this.customDataGrid21.Size = new System.Drawing.Size(401, 150);
this.customDataGrid21.TabIndex = 3;

如您所见,我设置了DataGridViewColumnHeadersHeightSizeMode.DisableResizing,但它生成了AutoSize

我也试过:

代码语言:javascript
复制
class CustomDataGrid4 : DataGridView
{
    public CustomDataGrid4() : base()
    {
    }

    protected override void OnLayout(LayoutEventArgs e)
    {
        base.OnLayout(e);

        base.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
        base.ColumnHeadersHeight = 23;

    }
}

结果:

代码语言:javascript
复制
// 
// customDataGrid41
// 
this.customDataGrid41.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.customDataGrid41.Location = new System.Drawing.Point(96, 152);
this.customDataGrid41.Name = "customDataGrid41";
this.customDataGrid41.Size = new System.Drawing.Size(240, 150);
this.customDataGrid41.TabIndex = 3;

解决方案:

代码语言:javascript
复制
class CustomDataGrid6 : DataGridView
{
    private DataGridViewColumnHeadersHeightSizeMode m_ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
    private int m_columnHeadersHeight = 23;

    public new DataGridViewColumnHeadersHeightSizeMode ColumnHeadersHeightSizeMode
    {
        get => this.m_ColumnHeadersHeightSizeMode;
        set
        {
            this.m_ColumnHeadersHeightSizeMode = value;
            base.ColumnHeadersHeightSizeMode = this.m_ColumnHeadersHeightSizeMode;
        }
    }

    public int ColumnHeadersHeight
    {
        get => this.m_columnHeadersHeight;
        set
        {
            this.m_columnHeadersHeight = value;
            base.ColumnHeadersHeight = this.m_columnHeadersHeight;
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-05 03:27:42

在重写的OnLayout()方法中设置属性:

MSDN:派生类应该重写此方法来执行任何自定义布局逻辑。

代码语言:javascript
复制
private DataGridViewColumnHeadersHeightSizeMode m_ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;

public CustomDGV() { }

protected override void OnLayout(LayoutEventArgs e)
{
    base.OnLayout(e);
    base.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; 
}

public new DataGridViewColumnHeadersHeightSizeMode ColumnHeadersHeightSizeMode
{
    get => this.m_ColumnHeadersHeightSizeMode;
    set {  this.m_ColumnHeadersHeightSizeMode = value;
           base.ColumnHeadersHeightSizeMode = this.m_ColumnHeadersHeightSizeMode;
    }
}

当您将自定义控件放在窗体上时,DataGridViewColumnHeadersHeightSizeMode.DisableResizing将是ColumnHeadersHeightSizeMode的应用值

使用Label.AutoSize属性尝试它。只有在Autosize = false方法中设置时,才会在设计器中设置OnLayout()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53147774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档