デザイナで設定されたカスタムプロパティを使用してユーザーコントロールを作成しようとしています。ただし、コントロールには実行時に調整しないでください。デザイナーコードによって最初に設定された後に値が変更されるのを止める方法はありますか?実行時にC#のプロパティが停止する
答えて
プロパティ定義を変更できますか?一つのアプローチは、プロパティセッターにセンチネルを追加し、(通常のInitializeComponent(によって行われることになる))のみ一組の操作を可能にする、ある:
private int _myProperty;
private bool _isMyPropertySet = false;
public int MyProperty
{
set
{
if (!_isMyPropertySet)
{
_isMyPropertySet = true;
_myProperty = value;
}
else
{
throw new NotSupportedException();
}
}
}
プロパティ設定ツールで例外をスローできますか?
public int SomeProperty {
set {
if(designerComplete) {
throw new IllegalOperationException();
}
}
}
designerCompleteをクラス変数に設定します。これは、InitializeComponentメソッドがコンストラクタで呼び出された後にtrueに設定されます。
これは、デザインモードであるかどうかを確認するためのチェックを追加した場合にも有効です。 –
コードがフォームデザイナ内で実行されている場合は#defineセットがありますか?もしそうなら、それはおそらく行く方法でしょう。 – Kazar
@ Kevin:petebob796は、実際にデザイナーコードを意味するものではなく、フォームデザイナーで設定された値にプロパティを設定するInitializeComponentのランタイム呼び出しを意味します。そして、デザインモードをチェックすることで、彼が望むことはできません。 –
リサイズアーキテクチャはコードかどうかをテストするための内蔵方法を提供します現在デザインモードで実行されています - Component.DesignModeプロパティ。
だから、おそらくこのような実装で何かしたい:
private int _foo;
public int Foo
{
get { return _foo; }
set
{
if (this.DesignMode)
throw new InvalidOperationException();
_foo = value;
}
}
これは正解ですが、DesignModeプロパティはユーザーコントロール上で直接利用できるため、サイトに行く必要はありません。 – benPearce
DesignModeはあなたが思う通りのことをしません。フォームがVisual Studioデザイナーからロードされている場合はtrueを返します。実行時に "デザイナーが作成した" InitializeComponent()内からフォームがロードされると、falseを返します。 OPが関心を持っているのは後者です。 –
@マイケル:それは本当ですか?私は前にこのアプローチを同じ目的のために使ってきました。そして、それは絶対にうまくいっています。 – Noldorin
マイケルは偉大な答えを提供し、それは実行時に、あなたの問題を解決しますが。ただし、設計時に、その値を2回以上変更する必要がある場合(設計時間であり、確率が高い可能性が高い場合)、DesignModeチェックとMichaelsの例を組み合わせることをお勧めします。
private int _myProperty;
private bool _isMyPropertySet = false;
public int MyProperty
{
set
{
if (this.DesignMode || !_isMyPropertySet)
{
_isMyPropertySet = true;
_myProperty = value;
}
else
{
throw new NotSupportedException();
}
}
}
これで、NotSupportedException()を実行して、2番目のセットで不具合のあるデザイナを取得することなく、この値をデザイン中にハートのコンテンツに編集することができます。
はい、DesignModeに関するすべての議論の後、それはそのセッターにとって重要なものです。 –
- 1. C#プログラムの実行を一時停止する
- 2. QTPの実行を停止するC#
- 3. タスク実行時のタスクの停止
- 4. ゴースレッド - 一時停止の実行
- 5. 一時停止ボタンが押されたときにプログラムの実行を一時停止する方法
- 6. Railsの実行が停止する
- 7. SpriteKit:シーンが一時停止中にアクションを実行します。
- 8. セットアップ失敗時に実行中のテストを停止する
- 9. メディアスキャナの実行中に一時停止する方法
- 10. javascriptで実行を一時停止するには?
- 11. コード実行を一時停止するには?
- 12. linuxの起動/停止時に実行されるスクリプト?
- 13. C#エレベーターシステム、一時停止
- 14. Node.js - 別のスレッドでスクリプトの実行を一時停止する
- 15. コード行の後にコード(java、multithreading)の実行が停止する
- 16. 実行中にクエリを停止する
- 17. 実行コードの停止
- 18. 停止メソッドの実行
- 19. C#でメインプロセスを一時停止する
- 20. コーダスライダの停止/一時停止/再生ボタンの実装
- 21. NSTimerは実行時に停止しますか?
- 22. C#で非同期の一時停止を行うには?
- 23. 実行からPerformSelectorを一時停止する方法は?
- 24. 1秒間実行を一時停止する
- 25. メソッドの実行を停止する - Swift
- 26. 実行時のObjective-C動的プロパティ
- 27. Twilioコールの終了時にKRLルールの実行が停止しますか?
- 28. CCAction:停止と実行
- 29. 停止実行フローエクスプレス・バリ
- 30. jNIce - 実行を停止
実際、これは私の解決策よりもきれいです。+ +1 – Kazar
これは私が使用しようと考えている方法です。私はちょうど私が言語に組み込まれた何かを見逃している可能性があり、ベストプラクティスを使いたいと思っていました。 – PeteT
あなたがラップしているコントロールについてもっと知ることなく、私が考えることのできるものは何もありません。それを知っていても、私は多分助けにはならないでしょうが、他の誰かが... –