![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
初めて投稿します。
C#でカスタムコンポーネント(ユーザコントロール、Windowsフォームコントロールライブラリと呼ばれる?)を作りたいと考えています。
実際に作りたいのは、ツールボックス内のダイアログカテゴリー内にあるような、ダイアログのコントロールを作りたいです。このダイアログ関係のコントロールは、コンテナ上にドロップすると、コンテナ上にオブジェクトが配置されるのではなく、エリアの下にコントロール名が表示されますが、このようなダイアログコントロールを作りたいと思っています。
イメージが伝わるか分かりませんが、通常ユーザコントロールを生成すると、以下のようにスケルトンが作られますが、
public partial class UserControl1 : UserControl
これを
public partial class UserControl1 : Form
のようにして、Formクラスのコントロールを作りたいのですが、作り方がわからず困っています。
いろいろ調べたのですが、この手のダイアログコントロール?に関する情報が見当たらないので、もしご存知の方がいらっしゃったら、書籍でも、URLでも良いので情報ください。
よろしくお願いします。
![「C#のカスタムコンポーネント」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/1/21631348_5497dbd64a74f/M.jpg)
No.3ベストアンサー
- 回答日時:
はじめは、質問の意味が分かりませんでした。
が、他の回答者の方の意見なども参考にして理解できました。
「Formベースのクラスをコントロールとしてツールボックスに登録する」
こんな発想をしたことが無かったので、楽しみながら実験ができました。
●手順
1.「クラスライブラリ」プロジェクトを作成します。
2.参照設定に必要なアセンブリを追加します。
3.ウィザードで作成されたクラスを削除します。
4.追加で、Windowsフォームを作成します
一般的なフォームと同様、必要なデザイン、ロジックを記述します。
●ツールボックスに追加する方法
4項の状態では、ツールボックスにアイコンは表示されません。
強制的に追加してもエラーが返ってきます。
Formから継承した場合、ツールボックスに表示するためには、
3つの属性を定義することで表示されました。
[Designer("")]
[DesignTimeVisible(true)]
[ToolboxItem(true)]
以下のコードで実験済み
[Designer("")]
[DesignTimeVisible(true)]
[ToolboxItem(true)]
public partial class TestDialog : Form
{
public TestDialog()
{
InitializeComponent();
}
}
属性の使い方については、MSDNを参照してください。[Designer("")]の
引数を空白にしています。本来の使い方ではありません。
●ツールボックスにあるダイアログは、CommonDialogを継承しています。
コモン Win32 ダイアログ ボックスを表示するための抽象基本クラスです。
public partial class UserDialog : CommonDialog
{
public UserDialog()
{
InitializeComponent();
}
protected override bool RunDialog(IntPtr hwndOwner)
{
;
}
public override void Reset()
{
;
}
}
この場合は、属性は不要です。このままコンパイルすると、UserDialogが
ツールボックスに表示されます。
この違いについてはよくわかりません。
なお、MSDNには、CommonDialogのサンプルコードの記述もなく、難易度も
高そうなのでお奨めできません。
●因みにカスタム コントロール化は以下の方法があります。
1.皆さんが書いている UserControlです。一番簡単な方法で、Formと同じ
操作でデザインができます。
2.サブクラス化とも呼ばれる、標準コントロールを継承してカスタマイズ
する方法です。オーナー描画を行うことにより、独自のデザインに変更
することが主な目的です。
3.Controlクラスを継承して独自のコントロールを作成する方法です。
なお、これらは何れもFormに貼り付けるコントロールです。
詳しくは
サンプルで学ぶ「カスタム コントロール 入門、基礎、作り方」
参考URL:http://school.topposystem.co.jp/PR/COURSE_CONTRO …
まさしく目指していたのはこれです!
ありがとうございました。
属性
[Designer("")]
[DesignTimeVisible(true)]
[ToolboxItem(true)]
を追加するのが肝のようです。
これらの属性については、まだ理解できていないので、これから勉強してゆこうと思います。
No.2
- 回答日時:
Formクラスは、ダイアログなどのウィンドウそのもののベースクラスです。
ダイアログコントロールを作成するなら、ベースクラスはUserControlクラス、またはControlクラスになるはずです。そもそもFormクラスのコントロールって何でしょう?フォーム上に配置するコントロールのことでしょうか??それならUserControlクラスをベースクラスにする方法になりますが・・・
この回答への補足
回答ありがとうございます。
上手く伝えられずすみません。
画像を添付しました。この画像は、FontDialogの例ですが、このようなXxxxDialogのようなものを作りたいのです。
例えば、自前の汎用的なダイアログを作っておき、そのダイアログをツールボックスからドラッグ&ドロップで利用できるようにしたいと考えています。
もし、情報をお持ちでしたらよろしくお願いいたします。
No.1
- 回答日時:
ちょっとよくわかりませんが
ダイアログのコントロールを作りたいということは
ユーザコントロールクラスにフォームを作るんですよね(違ったらすいません)
そのフォームは、public partial class UserControl1 : Formですけど。。。
ユーザコントロールとしてのクラスとFormのクラス、他もろもろのクラスを
作成して1つのdllでそいつをツールに登録する感じですよね?
まったく素っ頓狂な回答(じゃないですね汗)で
申し訳ありません。
この回答への補足
返信が遅くなりすみません。説明がうまくできず申し訳ありません。
画像を添付しました。認識合っていると思います。
添付画像は、標準コントロールのFontDialogを貼り付けた場合です。
この手のXxxxxxDialogを自分で作成して、ツールボックスに登録して再利用したいのですがそのやり方を知りたいと思っています。
もし、hako-gtrさんが何か情報をお持ちでしたらよろしくお願いします。
ちなみに、
public partial class UserControl1 : Form
を実施すると、アイテムを選択したときに、「ツールボックスに含めることができるコンポーネントは何もありません」と怒られてしまいます。
もしかしたら作り方が悪いのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# ActiveXコントロールを.NETにインポートできない??? 2 2023/05/02 02:50
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- 発達障害・ダウン症・自閉症 発達障害、感情障害は改善しますか? 7 2023/01/20 23:18
- 呼吸器・消化器・循環器の病気 心筋梗塞の発作って薬でコレステロールの値をコントロールしても起こりえますか うちの親の話で、体重は相 7 2022/12/27 20:20
- 歴史学 水田が開墾されたのは、川のどこでが著しかったのでしょうか? 上流/中流/下流 2 2022/05/26 18:43
- その他(Microsoft Office) EXCELでバーコードを作成すると白くなってコードが見えません 1 2022/04/04 14:24
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- その他(Microsoft Office) Office(Windows版,Word/Excel/PowerPoint等)にログインできません 4 2022/07/24 15:18
- その他(コンピューター・テクノロジー) コントロール+Fキーについて 2 2022/10/03 16:59
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELでactivexコントロールを...
-
chr関数の呼び出しで「プロ...
-
カメラスクロールするのを動画...
-
ユーザーフォームで動的(Me.Con...
-
Labelコントロールの(左右)余...
-
ExcelVBAでListViewが使用できない
-
エクセル コントロールツール...
-
VB6でシリアルポートの制御
-
VB.NET 動的コントロールの存在...
-
Excel VBA で Richtextboxを使...
-
ASP.netのエラー 2005から2008...
-
vb.netで画面のコントロールId...
-
VB .net Panelコントロールにラ...
-
JavaScriptからVBAの関数を呼び...
-
VBAでオプションボタンを透過
-
変数をコントロール型で使用す...
-
質問です。 場面緘黙症で苦しん...
-
Excel2007 VBA ラジオボタン セ...
-
ListViewのチェックボックスに...
-
フォームがリサイズされた時の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル・VBA CheckBoxのオブ...
-
カメラスクロールするのを動画...
-
vb.netで画面のコントロールId...
-
C#,vb.netで業務用アプリ開発と...
-
EXCELでactivexコントロールを...
-
フォーム上の現在アクティブな...
-
ExcelVBAでListViewが使用できない
-
コンボボックスの文字によるif...
-
C#で角が丸いテキストボックス
-
エクセルVBAでオプションボタン...
-
ユーザーフォームで動的(Me.Con...
-
VBAのフォームでTextBoxがいっ...
-
アクセス特有の書き方?
-
エクセル コントロールツール...
-
間違えて配置してしまったコン...
-
変数をコントロール型で使用す...
-
(VBA)スピンボタンの大量...
-
Labelコントロールの(左右)余...
-
excelのリストボックスで選択し...
-
Excel VBA で Richtextboxを使...
おすすめ情報