私はC#で新しくなっていますが、コーディングには新しくなく、20年近く行っていますが、Panelから継承したカスタムコントロールのプロパティに問題があります。プロパティを置くと、Designerのプロパティリストに表示され、設定することもできますが、小さなアプリケーションを実行すると、これらのプロパティの値は使用されないようです。プログラムでプロパティを変更した場合も同じ:エラーはありませんが、コントロールは何もしません。正しく設定されていないようです。しかし、私がクラスを計画的に行うと、彼らは働きます。私の推測では、私のプロパティの何かが設定されている/物事を得ることは正しくないということです。私は偽= colorStrip1.showButtonsを置けば、なぜ私のコントロールのプロパティはクラス外で変更されませんか?
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; }
}
....
をだから私の形で、例えば負荷に、あるいはクリックイベントのどこか;:私はそれをやっているかの次のコードチャンクを参照してください。またはcolorStrip1.showButtons = true; whatever(colorStrip1はコントロールをデザインモードでフォームに配置した後のインスタンス名)... console.writeは常に 'false'と表示します。私が 'true'としてデザインプロパティリストに設定したとしても、デフォルト値をtrueにしても、決済された値は反映されず、外部的に変更されることはありません。何か案は?メソッドのどれも、新しく外部的に解決されたプロパティ値も取得しません。明らかに、getter/setterは機能しません。私は私が設定したり、私のプロパティを取得する方法を正しくしていないと思われる外部クラス。それは魅力として、その内部だけで動作します...どんな助け...非常に感謝します!
乾杯
リチウム
P.S.明確にする解決策:
この場合、プロパティを設定すると、の新しい設定値を使用しようとしていたため、が機能しませんでした。これは新しい値を得ることができないようです事。 プロパティの値を(デザインモード>プロパティエディタまたはオブジェクトの外部コード)に変更すると、親フォームのロードイベントのは変更されますが、コンストラクタ以外のすべてのメソッドでは読み取り可能です。
プロパティを取得して設定するスレッドが複数ありますか?テストコードを教えていただけますか? – DVD
'_showButtons'の* old *値を書き出していることに注意してください - 2つのセットを連続して実行すると、新しい値が見えますか? –
.NET *のプロパティは、パスカルケーシングを使用して名前を付ける必要があります。つまり、最初の文字は大文字にする必要があります。 – Lucero