0

イベントとプロパティを継承する必要があります。たとえば、フォーム内で画像を移動する必要があります。1 つの画像を移動するこのコードがありますが、同じ動作で複数の画像を作成する必要があります。

private void pictureBox_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
         x = e.X;
         y = e.Y;
     }
 }

private void pictureBox_MouseMove(object sender, MouseEventArgs e)  
{
    if (e.Button == MouseButtons.Left)
    {
        pictureBox.Left += (e.X -x);
        pictureBox.Top += (e.Y - y);
    }
 }
4

2 に答える 2

3

カスタム コントロールを作成します。

public class MovablePictureBox : PictureBox
{
    private int x;
    private int y;

    protected override void OnMouseDown(MouseEventArgs e)
    {
        base.OnMouseDown(e);

        if (e.Button == MouseButtons.Left)
        {
            x = e.X;
            y = e.Y;
        }
    }

    protected override void OnMouseMove(MouseEventArgs e)
    {
        base.OnMouseMove(e);

        if (e.Button == MouseButtons.Left)
        {
            Left += (e.X - x);
            Top += (e.Y - y);
        }
    }
}

更新: Microsoft がここで推奨しているように、デリゲートをアタッチする代わりに、継承されたイベント機能をオーバーライドする必要があります。このコントロールを作成したら、プログラムをコンパイルして MovablePictureBoxes をツールボックスからフォームにドラッグします。それらはすべてドラッグ可能です (または、必要に応じて移動可能です)。

于 2012-04-05T23:11:11.440 に答える
1

本当にやりたいことは、複数のPictureBoxに同じイベントハンドラーを共有させることです。

private void pictureBox_MouseMove(object sender, MouseEventArgs e)   
{ 
    if (e.Button == MouseButtons.Left) 
    { 
        // the "sender" of this event will be the picture box who fired this event
        PictureBox thisBox = sender as PictureBox;            

        thisBox.Left += (e.X -x); 
        thisBox.Top += (e.Y - y); 
    } 
 }

フォーム上に作成する各PictureBoxは、作成済みの同じイベントに接続し続けます。上記のコードを見ると、どのPictureBoxがそれを呼び出したかを決定し、その画像ボックスだけに影響を与えることがわかります。

于 2012-04-05T23:07:22.400 に答える