2009/02/17

Visual C# でカスタムコントロールを作る

@Visual C# 2008 Express Edition

Visual C# でアプリケーションを作っていると、独自のコントロールを作りたくなってくる。
.Net はカスタムコントロールを作るのが超簡単。

以下、その手順。

  • [ファイル] - [新しいプロジェクト] - [クラスライブラリ]
  • Class1.cs を削除(しなくても良いけど、いらないので)
  • [プロジェクト] - [ユーザーコントロールの追加]
  • ユーザーコントロール MyControl.csを追加
  • Windowsフォームアプリケーションと同様にコントロールを作成する
  • ビルドすると bin/Release/***.dll が出来る
Tips:デバッグするには新しいWindowsフォームアプリケーションプロジェクトを追加する必要があります

ボタンを押すたびに label1.text が1ずつインクリメントするというサンプルを作ってみました。(再利用性ゼロだな…)
あらかじめ、デザイナで label1 という名前の Lablel を作っておきます。

MyControl.cs
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ClassLibrary1
{
    
public partial class MyControl : UserControl    
{
    private int i = 1;
    public MyControl()        
    {
        InitializeComponent();
        button1_Click(this, new EventArgs());
    }
        
    private void button1_Click(object sender, EventArgs e)
    {
        label1.Text = i.ToString();
        i++;
    }
}
}

4 件のコメント:

匿名 さんのコメント...

とても役に立った。「自作カスタムコントロールをツールボックスに加える」の記事と併用で、私のやりたいことができました。

ずっと、これをやりたくてググッてここをみつけました。情報感謝します。

Yusuke Miura さんのコメント...

お役に立てたようでなによりです。
最近は Android ばかりなのですが、C# でやりたいこともいっぱいあるんですよねー。
またネタができたら書こうと思います。

匿名 さんのコメント...

参考になりました!C#2008Expressのフォームアプリケーションでユーザーコントロールを追加して、そのフォームで新しく作ったユーザーコントロールを使おうとしたところ使えず、ググってここにたどり着きました。同じプロジェクトでユーザーコントロールは作ることができないのか、単に方法が悪いのか・・・orz 
クラスライブラリで作成してやればdllができるんですね!!ありがとうございます!!

ちなみにフォームアプリケーションでビルトしたところ、bin/Release/には、WindowsFormsApplication1.exeができてしまいました。

Yusuke Miura さんのコメント...

Visual C# 2010 Express で確認したところ、アプリケーション内のユーザーコントロールは自動的にツールボックスに表示されました。
手元に 2010 しかなかったので、断言できないのですが、2008 でも同じ動作だったと記憶しています。
もしかしたら、階層の作り方や名前によって出来ないとかあるのかもしれません。
フォーム+ユーザーコントロールのシンプルなプロジェクトを作ってみてテストしてみるのはどうでしょうか?