0

イベントやデリゲートの操作に関して問題があります。私は非常によく似た質問を見ましたが、それでも実際の実装は私にはわかりません。ですから、私が知っているコードでそれを行うことによって、公開/カスタムイベントの作成/処理がどのように機能するかを最終的に理解できるように、より具体的に答えるときにお願いします。

私が持っているのは、User Control単なるテキストボックスと、テキストボックスの値を使用してデータベースのレコードを変更するために必要なボタンです。私はこのコントロールを多くのフォームで使用しているので、使用しているエンティティを正確に把握し、それ自体のsaveメソッドを呼び出すことができるようにする必要があります。click自分のボタンのイベントを使用して、現在のフォームのメソッドをUser Control呼び出すことができれば、これらすべてを簡単に実行できます。Save()

これは私のユーザーコントロールです:

namespace UserControls.CommonControls
{
    public delegate void ClickMe(string message);

    public partial class ChangeCode : UserControl
    {
        public event ClickMe CustomControlClickMe;
        public ChangeCode()
        {
            InitializeComponent();
        }

        private void btnChange_Click(object sender, EventArgs e)
        {
            if (CustomControlClickMe != null)
                CustomControlClickMe("Hello");
           //ToDo fill
            //MessageBox.Show("To Do: Write the busieness logic.");
        }

        public void SetTextBoxMask(MaskedTextBox txtBox)
        {
            txtChange.Mask = txtBox.Mask;
        }
    }
}

必要なものを実装するために最後に試みたものを投稿します。

Clickこれは、からのイベントを使用する必要があるフォームの1つでありUser Control、より具体的にはConstructor、私が正しく理解していれば、イベントをサブスクライブする必要がある場所があるためです。

public MaterialEdit()
        {
            InitializeComponent();
            UserControls.CommonControls.ChangeCode. += new ClickMe(button2_Click);
        }

UserControls.CommonControls.ChangeCode-これは私が私User Controlの名前に到達する方法ChangeCodeです。

4

1 に答える 1

1

ChangeCode貼り付けた内容から、フォームにコントロールを追加したかどうかは明らかではありません。コントロールとそのイベントおよびプロパティを使用するには、最初に新しいインスタンスを作成してフォームに追加する必要があります。これは行われます:

  • Designerで、コントロールをツールボックスからフォームにドラッグする
  • コードエディタで、コントロールコンストラクタを呼び出し、コントロールコレクションに新しいオブジェクトを追加する

そうして初めて、そのオブジェクトのイベントを処理できます。ChangeCodeコントロールをフォームにドロップし、VisualStudioがその名前を付けたとしChangeCode1ます。CustomControlClickMe次のように、handledtoイベントを添付します。

ChangeCode1.CustomControlClickMe += new ClickMe(button2_Click);

貼り付けたコード(UserControls.CommonControls.ChangeCode. += new ClickMe(button2_Click);)は、いくつかの理由で正しくありません。

  1. 構文的には、左側の式がで終わるため、.代入ターゲットが正しくありません(UserControls.CommonControls.ChangeCode.
  2. イベント名は指定されておらず、コントロール名のみが指定されています(割り当ての左側を割り当てたいもので終了する必要があります- .CustomControlClickMe
  3. オブジェクトではなくクラスにハンドラーをアタッチしようとしています
于 2013-03-20T09:11:39.213 に答える