1

UserControl自分で作ったフォームと2つのカスタムがあります。1 つのコントロールにはいくつかのボタンがあり、これらの各ボタンのTagプロパティは の配列に設定されていPointFます。ObservableCollection<PointF[]>データが追加されている場合に線を描画するようにイベントハンドラーを設定した別の UserControl があります。データポイントを独自のクラスに配置すると、これは正常に機能します...動作することを確認してください。

この 2 つのコントロールを 1 つのフォームにまとめて、最初のコントロールのボタンのクリック イベントを設定して、2 番目のコントロールにデータ ポイントを追加するにはどうすればよいですか?

この 2 つのコントロールは、私のソリューションの 2 つの異なるプロジェクトにあります。そして、これらのコントロールが示されている形は、別のプロジェクトでもあります (solution の立ち上げプロジェクトです)。

4

2 に答える 2

2

最初のコントロールにイベントを追加します。

public event EventHandler<EventArgs> Control1ButtonClicked;
private void OnClicked()
{
    var handler = Control1ButtonClicked;
    if (handler != null)
    {
        handler(this, new EventArgs());
    }
}

private void Button1_Click(object sender, EventArgs e)
{
    OnClicked();     
}

2番目のコントロールにプロパティを追加します

public ObservableCollection<PointF[]> MyPoints{ get; set;};

次に、メインアプリケーションでリスナーを追加します

userControl1.Control1ButtonClicked += new EventHandler<EventArgs>(userControl1_Control1ButtonClicked);

void userControl1_Control1ButtonClicked()
{
    //Do Something to control 2
    userControl2.MyPoints.Add() = //Whatever
}
于 2012-07-17T20:41:27.720 に答える
2

PointF の配列を受け取る 2 番目のユーザー コントロールにパブリック メソッドを追加し、このメソッド内で PointF をコレクションに追加できます。

EDIT:最初のユーザーコントロール内でクリックイベントを処理するには

最初のユーザーコントロール内に、必要なイベントとデリゲートを追加します

public delegate void OnClickPointDataEvent(object sender, PointF[] data);
public event OnClickPointDataEvent ClickPointData;

次に、form_load イベントが usercontrol1 イベントにサブスクライブします

uc1.ClickPointData += new UserControl1.OnClickPointDataEvent(form_subscribe_event);

private void form_subscribe_event(object sender, PointF[] data)
{
    uc2.SomePublicMethod(data);
}

最後に、最初のユーザー コントロール ボタン クリック内で、フォーム内のイベントを処理するコードを呼び出します。

....
if(ClickPointData != null)
    ClickPointData(pointf_array);
...
于 2012-07-17T20:27:45.810 に答える