c# - 在哪里设置自定义控件默认值

标签 c# winforms custom-controls default-value windows-forms-designer

这个问题现在让我有点困惑了。我正在创建一个带有一些合理默认值的派生 System.Windows.Forms.DataGridView 控件。现在要澄清这一点,它们只是默认值,应该能够在设计器中进行更改。截至目前,我在控件构造函数中设置了默认值:

using System.Drawing;
using System.Windows.Forms;

namespace TruckSmart.Controls
{
    /// <summary>
    /// An implementation of a System.Windows.Forms.DataGridView with sensible default values.
    /// </summary>
    public class DataGrid : System.Windows.Forms.DataGridView
    {
        /// <summary>
        /// Initializes a new instance of the TruckSmart.Controls.DataGrid class.
        /// </summary>
        public DataGrid()
        {
            AllowUserToAddRows = false;
            AllowUserToDeleteRows = false;
            AllowUserToOrderColumns = false;
            AllowUserToResizeColumns = false;
            AllowUserToResizeRows = false;
            AutoGenerateColumns = false;
            AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
            AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;
            BackgroundColor = SystemColors.Window;
            BorderStyle = BorderStyle.Fixed3D;
            ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.None;
            Margin = new Padding(0);
            MultiSelect = false;
            ReadOnly = true;
            RowHeadersVisible = false;
            SelectionMode = DataGridViewSelectionMode.FullRowSelect;

            AlternatingRowsDefaultCellStyle = new DataGridViewCellStyle()
            {
                BackColor = Color.FromKnownColor(KnownColor.AliceBlue)
            };

            ColumnHeadersDefaultCellStyle = new DataGridViewCellStyle()
            {
                WrapMode = DataGridViewTriState.False
            };
        }
    }
}

使用构造函数的主要问题是,当我在 Visual Studio 中关闭表单设计器并重新打开它时,构造函数会再次被调用,并且我之前在设计器中所做的任何更改都会被重置。我应该把这些默认值放在一个特殊的地方吗?

最佳答案

不幸的是,您必须自己重新实现这些属性:

[DefaultValue(false)]
public new bool AllowUserToAddRows {
  get { return base.AllowUserToAddRows; }
  set { base.AllowUserToAddRows = value; }
}

关键字new将覆盖或隐藏基本属性,以便您随后更改它。 DefaultValue 属性不会“设置”属性的值,它只是由设计器用来确定是否将该值写入设计器文件。您仍然需要在构造函数中设置默认值。

关于c# - 在哪里设置自定义控件默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772608/

相关文章:

winforms - 在 winforms 应用程序中调整主窗体大小时如何调整面板大小?

WPF 自定义控件模板绑定(bind)

asp.net - 显示友好日期、数字

c# - Linq 的 Enumerable.Count 方法检查 ICollection<> 但不检查 IReadOnlyCollection<>

c# - 我应该用 GTK+ 而不是 WinForms 为 Mono 重写 GUI 吗?

wpf - 在 WPF 和 WinForms 控件中处理相同快捷方式的最佳方法是什么?

c# - C# .NET 中可滚动控件的最佳实践方法

c# - PasswordDeriveBytes (System.Security.Cryptography) 如果处置失败

c# - 带有 Directx 11 的 WPF

c# - 如何检查列表是否已排序?