2

Id文字列プロパティを 追加したカスタム コントロールがあります。

コントロールがフォームに配置されたら、コンストラクターでこれを に設定したいのですがGuid.NewGuid().ToString()、それが以前に設定されていない場合に限ります。

このプロパティをデザイナーから手動で編集すると、コード行がDesigner.csファイルに追加されます。どうすればプログラムでそれを行うことができますか?
具体的には、カスタム コントロール内からどのように行うのですか?

4

2 に答える 2

3

お客様の要件に合ったサンプル ユーザー コントロールを作成しました。この場合は、Label を継承する「MyLabel」です。

最初に MyLabel クラスを保持する別のライブラリを作成します。このクラスのコードは次のとおりです。

public class MyLabel: Label
{
    public string ID { get; set; }

    protected override void OnCreateControl()
    {
        base.OnCreateControl();
        if (this.DesignMode && string.IsNullOrEmpty(this.ID))
        {
            this.ID = Guid.NewGuid().ToString();
        }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        this.Text = this.ID;
    }
}

ご覧のとおり、私のコントロールには、コントロールがデザイン モードで値がまだ設定されていない場合に設定される ID プロパティがあります。プロジェクトを再度開いても値が変わらないように、デザイン モードを確認することが重要です。

OnPaint イベントのオーバーライドは、実際の ID 値をリアルタイムで確認するためだけにあり、必須ではありません。

于 2012-11-25T11:42:48.227 に答える
-1

必要なのはProperties.SettingsMSDNページを参照してください。

これらは、設計時にデフォルト値に設定するか、実行時にロードして保存することができます。例:デザイナーを使用して、名前付きIDという名前
の新しいユーザースコープを作成します。string[]次に、コンストラクターで、このようなもの

string ID = "";
if (Properties.Settings.Default.IDs!=null && Properties.Settings.Default.IDs.Length>0) {
   ID = Properties.Settings.Default.IDs[0];
}
else {
   ID = "random";
   Properties.Settings.Default.IDs = new string[1];
   Properties.Settings.Default.IDs[0] = ID;
   Properties.Settings.Default.Save();
}

これは、格納されている配列の最初の要素が存在する場合はそれを使用し、存在しない場合は新しい文字列を作成して永続化します(したがって、次にプログラムを実行するときに設定から読み取られます)。

于 2012-11-25T08:35:25.253 に答える