C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

コントロールの一覧を指定できるコンポーネントを作る


(過去ログ 119 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■69648 / inTopicNo.1)  コントロールの一覧を指定できるコンポーネントを作る
  
□投稿者/ C#研究者 (4回)-(2014/01/17(Fri) 00:03:54)

分類:[C#] 

Windows7 32bit VSC#2010

コントロールのリストを保持できるコンポーネントを作ろうとしたのですが、
エラーでControlはシリアライズ可能ではないというエラーが発生してしまいました。

巷ではコントロールの一覧を設定できるプロパティをもつコンポーネントを見かけますが、
あれはどのようにして作られているのでしょうか。

    /// <summary>
    /// イベントを視覚的に溜めておくリスト
    /// </summary>
    public partial class ControlStockList : Component
    {
        public List<Control> ControlList { set; get; }

        public ControlStockList()
        {
            ControlList = new List<Control>();
        }
    }

引用返信 編集キー/
■69662 / inTopicNo.2)  Re[1]: コントロールの一覧を指定できるコンポーネントを作る
□投稿者/ Jitta (127回)-(2014/01/17(Fri) 23:46:41)
Jitta さんの Web サイト
No69648 (C#研究者 さん) に返信
> Windows7 32bit VSC#2010
> 
> コントロールのリストを保持できるコンポーネントを作ろうとしたのですが、
> エラーでControlはシリアライズ可能ではないというエラーが発生してしまいました。
> 
> 巷ではコントロールの一覧を設定できるプロパティをもつコンポーネントを見かけますが、
> あれはどのようにして作られているのでしょうか。
> 
>     /// <summary>
>     /// イベントを視覚的に溜めておくリスト
>     /// </summary>
>     public partial class ControlStockList : Component
>     {
>         public List<Control> ControlList { set; get; }
> 
>         public ControlStockList()
>         {
>             ControlList = new List<Control>();
>         }
>     }

コードと、エラーの内容が結びつかないのですが。。。
まぁ、それはいいとして。
保持する必要があるのでしょうか。その都度参照ではいけないのでしょうか。

引用返信 編集キー/
■69664 / inTopicNo.3)  コントロールの一覧を指定できるコンポーネントを作る
□投稿者/ C#研究者 (6回)-(2014/01/18(Sat) 07:07:01)
2014/01/18(Sat) 07:08:01 編集(投稿者)


> Jitta 様
もちろんそれで動作はできるとおもいますけど、
UI上で操作できれば後で編集しやすいかと思いまして。
引用返信 編集キー/
■69666 / inTopicNo.4)  Re[3]: コントロールの一覧を指定できるコンポーネントを作る
□投稿者/ Jitta (128回)-(2014/01/18(Sat) 09:30:43)
Jitta さんの Web サイト
No69664 (C#研究者 さん) に返信
> 2014/01/18(Sat) 07:08:01 編集(投稿者)
>
>
>>Jitta 様
> もちろんそれで動作はできるとおもいますけど、
> UI上で操作できれば後で編集しやすいかと思いまして。

 「UI 上で操作できる」というのがイメージできません。

 問題を解決するためには、原因を知り、原因が発生した背景を知らなければなりません。
原因がわからずに対症療法を行うと、別の症状として発生します。
原因が発生した背景を理解せずに対応すると、対応が他の箇所に影響します。
経験が長い人ほど、「説明してください」と繰り返すことに注意してください。

 いったい、どんな要望があって、その要望を満たすためにどうすれば良いと考えて、
コントロールの一覧を、どこに保持しようとしているのでしょうか。
 たとえば、「UI 上で操作できれば」というのは、最初の投稿にはありませんでした。
また、「操作」というのは、どのようなことを意味しているのでしょうか。
つまり、Button というコントロールを、Button として操作しようとしている、
・・・難しいな。あるウィンドウに配置してあるコントロールの一覧を表示するウィンドウがあるとして、
別のウィンドウでも視覚的にボタンとして表示し、さらにクリックなどの操作ができるようにしたいと考えているのでしょうか。
引用返信 編集キー/
■69667 / inTopicNo.5)  Re[1]: コントロールの一覧を指定できるコンポーネントを作る
□投稿者/ ぽん (10回)-(2014/01/18(Sat) 10:31:08)
No69648 (C#研究者 さん) に返信

> 巷ではコントロールの一覧を設定できるプロパティをもつコンポーネントを見かけますが、
> あれはどのようにして作られているのでしょうか。

これがどんなものか想像できませんが、

This.Controls

の内容を表示ではダメなんですか?

で、選択されたものを
propertyGrid.SelectedObjectに突っ込めば変更出来ると思うのですが。

引用返信 編集キー/
■69669 / inTopicNo.6)  Re[2]: コントロールの一覧を指定できるコンポーネントを作る
□投稿者/ C#研究者 (7回)-(2014/01/18(Sat) 13:15:50)
みなさまご回答いただきありがとうございます。
確かにどのようなものであるかわかりづらかったと思いますので
もう一度整理しようと思います。

http://fast-uploader.com/file/6945573909570/

この一覧でフォームのコントロールのデータを選択して、リストを作成しようと思うのですが、
どこで追加するデータの一覧を設定すればよいかわかりません。

あまりリンクを載せるのは好ましくないかと思い自重したのですが、
このまま画像なしで説明できないのでどうかご容赦ください。


引用返信 編集キー/
■69670 / inTopicNo.7)  Re[3]: コントロールの一覧を指定できるコンポーネントを作る
□投稿者/ C#研究者 (8回)-(2014/01/18(Sat) 13:20:23)
No69669 (C#研究者 さん) に返信
> みなさまご回答いただきありがとうございます。
> 確かにどのようなものであるかわかりづらかったと思いますので
> もう一度整理しようと思います。
>
> http://fast-uploader.com/file/6945573909570/
>
> この一覧でフォームのコントロールのデータを選択させて、リストを作成しようと思うのですが、
> どこで追加するデータの一覧を設定すればよいかわかりません。
>
> あまりリンクを載せるのは好ましくないかと思い自重したのですが、
> このまま画像なしで説明できないのでどうかご容赦ください。
>
>
引用返信 編集キー/
■69671 / inTopicNo.8)  Re[3]: コントロールの一覧を指定できるコンポーネントを作る
□投稿者/ 魔界の仮面弁士 (502回)-(2014/01/18(Sat) 17:29:01)
No69648 (C#研究者 さん) に返信
> 巷ではコントロールの一覧を設定できるプロパティをもつコンポーネントを見かけますが、
それに相当する、具体的なコンポーネント名を挙げてみてください。
その方が手っ取り早いかと思います。

コンポーネント側でコレクション管理するものとしては、
・MenuStrip コンポーネントにとっては、ToolStripItem 継承クラス(ToolStripButton、ToolStripItem など)
・ShapeContainer コンポーネントにとっては、Shape 継承クラス(LineShape や OvalShape など)
などがありますが、これらは Control では無いですしね…。


> public ControlStockList()
この手のコンポーネントを作成する場合には、引数なしコンストラクタに加えて
IContainer を引数に持つコンストラクタを作成した方が良いかも知れません。
Timer がそうであるように。


> public List<Control> ControlList { set; get; }
コレクションのアイテムを追加/削除されるのであればともかくとして、
コレクションそのものを、外部から置き換えられてはまずいですよね?

ですからこういうものについて、
 private List<Control> controlList = new List<Control>();
 public List<Control> ControlList { get { return controlList; } }
のように、ReadOnly Property として管理されるべきです。
そうすればエラーにはならないと思います。

ただし実際には、List<> 型で公開するべきでは無いでしょうね。
http://msdn.microsoft.com/ja-jp/library/ms182142.aspx

また、コレクションクラス側で追加/削除/変更/クリアのためのメソッドに対して、
変更通知のイベントを挙げることも必要になってくるでしょう。そうしないと、
PropertyGrid などに対して、変更が直ちに反映させられないことになってしまいますから。



No69669 (C#研究者 さん) に返信
> この一覧でフォームのコントロールのデータを選択して、リストを作成しようと思うのですが、
まずその場合、コントロールの管理者はフォーム等の Controls であって、コンポーネント側ではありませんよね。
ですから、Component 側で Control をシリアライズするべきではありません。
コンポーネント側は、あくまでも既存のコントロールを参照するのみということになります。

たとえば、Button 型のプロパティを作れば、デザイン時には、フォーム上のボタンの中から
選択できるような UI となります。Control 型のプロパティにすれば、
フォーム上の全コントロールから一つを選べるようになっています。
(今回はそれを、複数のコントロールを管理するコレクションとして実装する必要があるわけですが)


> どこで追加するデータの一覧を設定すればよいかわかりません。
方向性を変えて、拡張プロバイダにする、という手も使えるかもしれません。
IExtenderProvider を実装して ProvidePropertyAttribute を指定してやれば、
いわゆる ToolTip クラスや ErrorProvider クラスのようなデザイン時指定が可能となります。
引用返信 編集キー/
■69672 / inTopicNo.9)   コントロールの一覧を指定できるコンポーネントを作る
□投稿者/ C#研究者 (9回)-(2014/01/18(Sat) 19:17:44)
2014/01/19(Sun) 22:09:13 編集(投稿者)

>魔界の仮面弁士様

なるほど。詳しく教えてくださってありがとうございます。
そのようなものがあるとは知りませんでした。
後は自分で詳しく調べてみます。ありがとうございます。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -