13

いくつかの事前定義されたコントロール (groupbox、button、datagridview) を持つ UserControl があり、これらのコントロールは保護されているとマークされており、コンポーネント変数も保護されているとマークされています。

次に、この基本 UserControl から別の UserControl に継承したいと考えていますが、DataGridView は常にデザイナーでロックされています。

ISupportInitilize を実装する DataGridView と関係があるのではないかと思います。

public class BaseGridDetail : UserControl

DataGridView コントロール (など) が定義されています。


public class InheritedDetail : BaseGridDetail

DataGridView コントロールがロックされています


継承後にデザイナーでこのコントロールを使用できるようにする方法はありますか?

4

5 に答える 5

13

見た目では、DataListView(およびその他のいくつかのコントロール)は視覚的な継承をサポートしていません。ここに記録されている接続の問題がありますが、期待できそうにありません。

他のフォームコントロール(flowlayoutpanelなど)でも同様の問題が記録されています。

視覚的な継承を強制する方法を見つけることができません。

connectに関する公式の回答は次のとおりです。「この特定のリリースでは、DataGridViewはビジュアルインテリジェンスで使用するように設計されていません。将来のリリースを計画するときに、提案を念頭に置いてください」これは2006年5月26日です。

更新:答えがあるかもしれないこのブログ投稿を見つけました

編集:ブログ投稿の主張を確認できませんでした。この問題の最新のようです

ただし、実行時にDataListViewを操作できるように見えるため、視覚的なプロパティ(およびその他の設定)を設定できる可能性があります。それは大きな妥協ではありません。

于 2008-10-16T05:40:51.927 に答える
9

[1] カスタム UserControl を作成する

[2] カスタム userControl で以下の Inherited DataGridView を使用するようにします。

[Designer(typeof System.Windows.Forms.Design.ControlDesigner))]
public class InheritedDataGridView : DataGridView { }

[3] カスタム UserControl から継承し、viola !!

[4] 「System.Design」dll を追加することを忘れないでください

楽しみ。

于 2010-09-06T06:08:35.263 に答える
3

データグリッドをパネルコントロールに追加し、パネルとデータグリッドの修飾子を保護に設定します。これにより、継承されたすべてのフォームデザイン時にグリッドのプロパティにアクセスできるようになります。

于 2011-09-16T15:40:31.967 に答える
1

回答を残しましたが、あなたの質問を読み直して削除することにしました。

継承されたコントロールで変更しようとしている DataGridView についてはどうですか? 柱ですか?次のように、ベース UserControl で保護されたメソッドを設定し、グリッドの列コレクションをそれに渡すことで、これを行うことができました。

// in base UserControl
public BaseGridDetail()
{
    InitializeComponent();

    InitGridColumns(dataGridView1.Columns);
}

protected virtual void InitGridColumns(DataGridViewColumnCollection columns)
{
    columns.Clear();
}

これで、派生コントロールは次のようにそのメソッドを単純にオーバーライドできます。

// in InheritedDetail
protected override void InitGridColumns(DataGridViewColumnCollection columns)
{
    base.InitGridColumns(columns);
    // add my own custom columns
}
于 2008-10-16T05:17:12.350 に答える
-1

プロパティを定義済みの [private] に変更し、元はマシン生成コードである xx.designer.cs で定義されている [protected] に変更します。

例えば

    private System.Windows.Forms.Button btnSave;

    protected System.Windows.Forms.Button btnSave;

そして再構築します。

その後、継承されたコントロールのプロパティを変更できます。

于 2016-07-12T00:55:49.903 に答える