0

私はC#は初めてですが、コーディングは初めてではありません(ほぼ20年間行っています)。また、Panelから継承する、作成しているカスタムコントロールのプロパティに問題があります。プロパティを配置すると、Designerプロパティリストに表示され、設定することもできますが、小さなアプリケーションを実行すると、これらのプロパティ値が使用されていないようです。プログラムでプロパティを変更した場合も同じです。エラーは発生しませんが、コントロールは何も実行しません。適切に設定されていないようです。しかし、私がクラスでプログラム的にそれを行う場合、彼らは機能します。私の推測では、プロパティの設定/取得の内容が正しくありません。私がそれを行っている方法の次のコードチャンクを参照してください:

public class ColorStrip : Panel
{
    // properties
    // ------------------------------------------
    // size of color clusters (boxes)
    private int _clusterSize = 20;
    // controls if show the buttons panel
    private Boolean _showButtons;

    // property setters/getters
    // ------------------------------------------
    // clusterSize...
    public int clusterSize
    {
        get { return _clusterSize; }
        set { _clusterSize = value; }
    }
    // showButtons...
    public Boolean showButtons
    {
        get { return _showButtons; }
        set { Console.Write(_showButtons); _showButtons = value; }
    }
    ....

したがって、私のフォームでは、たとえばloadや、どこかのクリックイベントでも、colorStrip1.showButtons=falseを指定すると; またはcolorStrip1.showButtons=true; 何でも(colorStrip1は、コントロールをデザインモードのフォームに配置した後のインスタンス名になります)...console.writeは常に「false」と言います。デザインプロパティリストで「true」として設定しても、設定された値は反映されません。デフォルトでtrueに設定しても、外部で変更されることはありません。何か案は?どのメソッドも、外部で解決された新しいプロパティ値を取得しません。明らかに、ゲッター/セッターは機能していません。クラスのでプロパティを設定または取得する方法が正しく行われていないようです。それは魅力として、その中でのみ機能します...どんな助けでも...とても感謝しています!

乾杯

リチウム

解決策を明確にするためのps:

この場合のプロパティの設定は、コンストラクター内で新しい設定値を使用しようとしていたため機能しませんでした。これは、物を構築しているため、新しい値を取得できないようです。デザインモード>プロパティエディターまたはオブジェクトの外部のコードで、たとえば親フォームのloadイベントでプロパティ値を変更すると、変更されますが、コンストラクターを除くすべてのメソッドで読み取り可能です。もちろん:)

4

2 に答える 2

1

実行順序の問題である可能性があります。プロパティセッターは変数を設定するだけですが、実際には、この変数に関連する状態を更新するためにコントロール上で何もトリガーしません(たとえば、私が想定するボタンの追加や表示)。

残りの初期化が行われる前にプロパティを設定すると、値が使用されます。それ以外の場合は、最初の実行中にデフォルト値がプロパティ値のままであるため、使用されません。

セッターを操作する必要があります。説明するための疑似コードを次に示します。

set {
  _showButtons = value;
  if (alreadyInitialized) {
    UpdateButtons();
  }
}

注:必ず最初に値を設定してから実行してください。そうしないと、(自分Console.Write()が行っているのと同じように)古い値を使用することになります。

于 2010-12-15T21:11:51.810 に答える
0

引用されたコードは問題ないように見えます。ColorStripの同じインスタンスを参照していることを確認しますか?また、.Designer.csファイルをチェックして、プロパティを設定するコードがそこにあることを確認します。

実際、自動実装プロパティを使用してコードを単純化してみてください。

public int clusterSize { get;set;}
public Boolean showButtons {get;set;}

public ColorStrip() { ... clusterSize = 20; ... }
于 2010-12-15T20:47:48.200 に答える