3

C# でカスタム ユーザー コントロールを設計しました。このユーザー コントロールには、テキスト ボックス、チェック ボックス、ボタンが含まれます。

プロジェクトで設計されたユーザーコントロールを使用したいのですが、問題は、フォームでユーザーコントロールを使用するときにテキストボックス、チェックボックス、ボタンイベントにアクセスできず、ユーザーコントロールのイベントしかないことです.どうすればそれを可能にできますか設計されたユーザー コントロールを使用するときに、各オブジェクト イベントにアクセスできるようになりますか?

4

3 に答える 3

1

ユーザーコントロールで、このユーザー コントロールをフォームに追加するときに、"text-box"Modifiersプロパティのようなコントロールを.so に設定します。Publicテキストボックスイベントにアクセスできます:

public Form1()
        {
            InitializeComponent();
            userControl11.textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
        }

        void textBox1_TextChanged(object sender, EventArgs e)
        {
            MessageBox.Show("user control textbox.text changed");
        }
于 2013-04-06T05:11:31.897 に答える
0

外部からアクセスできるようにしたいコントロールのイベントのパブリック イベントを手動で作成する必要がある場合があります。

もう 1 つの方法は、ユーザー コントロールでこれらのコントロールを初期化するときに、(VS によって自動的に生成される) プライベートではなくパブリックを使用して、これらのコードを xxx.Designer.cs に配置することですprivate System.Windows.Forms.Button button1。その後、 からアクセスできますMyUserControl.button1。ただし、そうすると、ユーザー コントロールの外部からコントロール全体にアクセスできるようになり、個人的にはあまり気分が良くありません。

于 2013-04-06T04:51:30.660 に答える
0

カスタム コントロール クラスにパブリック イベントを追加し、そこで購読および購読解除する必要があると思います。そのように:

public event EventHandler ComboboxClick
{
   add { _combobox.Click += value; }
   remove { _combobox.Click -= value; }
}

詳細については、 http://msdn.microsoft.com/en-us/library/8627sbea( v=vs.71 ).aspx を参照してください。

編集: カプセル化の原則に違反しているため、カスタム コントロールの内部コントロールをパブリック プロパティとして設定することはお勧めしません。特定のジョブを実行する独自のコントロールを設計すると、コントロールのクライアントはその内部構成を認識しないようにする必要があります。将来、コントロールの内部構成を変更する必要がある場合 (たとえば、サード パーティのテキスト ボックス コントロールに切り替えるなど)、カスタム コントロール クラスを変更するだけでよく、そのクライアントは何も起こらなかったかのように適切に動作します。ここにカプセル化に関する良い公案があります =)

于 2013-04-06T04:52:03.543 に答える