C#でユーザーコントロールを作成しています。
※C#のカテゴリーがないので、こちらに質問させていただきます。
既存のコントロールを基底クラスとしているのですが、下記のコードで基底クラスのプロパティであるXXXを使用できないようにしました。
[Browsable(false)]
[Obsolete("使用不可", true)]
public new int XXX { get { return 0; } set { } }
この、XXXに対してアクセスするコードはコンパイルエラーとなり、プロパティウィンドウにも表示されず、一応は使用できないようには出来ました。
ところが、コントロールをフォームに貼り付けて、他の使用可能なプロパティ(YYYプロパティとします)を変更すると、Form.Designer.csのInitializeComponent()に、XXXに値を設定するコードが自動生成されます。当然、そのままコンパイルすればエラーとなります。
※XXXは、YYYの値に連動して値が変化する仕様です。YYYを追加したことでXXXが不要というか、あっては事故のもとになるので、使用不可にしました。
そこで、お教え願いたいのは、Form.Designer.csのInitializeComponent()に、プロパティの値を設定するコードが生成される仕組みです。若しくは、設定するコードが生成されないようにする方法です。
以上よろしくお願いします。
No.1ベストアンサー
- 回答日時:
例えばTextBoxのMaxLengthだった時
取得は可能だが、設定は許可しない例です。
【コンポーネントの実装】
class Class1 : TextBox
{
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new int MaxLength
{
get { return 0; }
protected set { }
}
private int _yyy;
public int YYY
{
get
{
return this._yyy;
}
set
{
this._yyy = value;
base.MaxLength = this._yyy;
}
}
}
【利用時】
class11.MaxLength = 1;
エラーメッセージ
set アクセサーにアクセスできないため、プロパティまたはインデクサー 'WindowsFormsApplication1.Class1.MaxLength' はこのコンテキストでは使用できません。
EditorBrowsable(EditorBrowsableState.Never)
外部ソリューションで参照された際に、コード入力中に表示されるインテリセンスの候補として出現しなくなります。
勘違いしてはならないのが、同一ソリューション内の他プロジェクトでは効きません。
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
コンポーネントを設置した際、Designerファイルで自動生成されるコードとして除外します。
これを設定することで、Designerファイル上にプロパティの設定コードは自動生成されません。
上記例だと、結果的に以下の動作になります。
・Designerファイルで制御文が入ってこない。
・インテリセンスに表示されてこない。
・直接入力されたとしても、値を設定することはできず、無意味?な値の取得のみ行える。
(無意味かどうかは実装に応じて・・・)
Obsolete("使用不可", true)は、上記に加えてお好きにどうぞ、という感じです。
Obsolete()はメッセージが適切かどうか微妙では?
操作不能としたいという要望では、上記の方法論の方が適切かもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Visual Basic(VBA) worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応 3 2022/12/27 22:27
- Visual Basic(VBA) ActiveReportのdetailをデータセットの自動バインドを使って帳票を出力しています。 1 2023/08/16 07:16
- IT・エンジニアリング ActiveReportのdetailをデータセットの自動バインドを使って帳票を出力しています。 1 2023/08/16 07:17
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Visual Basic(VBA) <excel vba>selenium basicのWebDriverの自動更新のエラーについて 1 2022/10/01 17:07
- その他(パソコン・周辺機器) チャレンジタッチ3 改造 アプリインストールできない 1 2022/07/01 14:43
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックス(VBA)でEnter...
-
DataGridで左詰め、右...
-
PictureBoxの背景色変更(VB.NET)
-
ユーザーフォームに日付を表示...
-
コンボボックスのセンタリング
-
リストコントロールのデータの...
-
TreeViewでToolTipTextを表示し...
-
DataGridViewで行の展開みたい...
-
MFCでbitmapを背景にしてstatic...
-
エクセル VBA ユーザーフォーム...
-
ADOのCursorLocationプロパティ
-
Enabled=Falseのテキストボック...
-
コントロール使わずdropdownlis...
-
ACCESS2010 ActiveXコントロー...
-
ASP.NETでのテキストボックスに...
-
デザインモードを解除すると消...
-
Excel VBA テキストボックス...
-
checkbox付きListViewで デフ...
-
実行時エラー 438になった時の...
-
VBA シートのボタン名を変更し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックス(VBA)でEnter...
-
ADOのCursorLocationプロパティ
-
Wordテキストコントロールが未...
-
エクセルの画像にツールチップ...
-
ACCESS2010 ActiveXコントロー...
-
ユーザーフォームに日付を表示...
-
コンボボックスの高さを変更し...
-
C# TEXTが空白であるLABELは何...
-
VB.NETで縦書表示をしたいので...
-
VBからエクセルのテキストボ...
-
エクセル入力規制リスト行数
-
DataGridViewで行の展開みたい...
-
チェックボックスの文字色の変え方
-
デザインモードを解除すると消...
-
VB6でLabelの最前面にText Box...
-
Enabled=Falseのテキストボック...
-
C# アプリ終了時に設定を記憶...
-
PictureBoxの背景色変更(VB.NET)
-
checkbox付きListViewで デフ...
-
VC++のエディットボックスの非表示
おすすめ情報