2

これは今私を少し困惑させました。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 でフォーム デザイナーを閉じて再度開くと、コンストラクターが再度呼び出され、以前にデザイナーで行った変更がリセットされることです。これらのデフォルト値を入れる特別な場所はありますか?

4

1 に答える 1

2

残念ながら、プロパティを自分で再度実装する必要があります。

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

キーワードnewは base プロパティをオーバーライドまたはシャドウし、変更できるようにします。DefaultValue属性は、プロパティの値を「設定」するのではなく、値をデザイナー ファイルに書き込むかどうかを決定するためにデザイナーによって使用されるだけです。コンストラクターでデフォルト値を設定する必要があります。

于 2013-11-04T17:04:09.753 に答える