2

Panel コントロール内で動的に Label コントロールを作成しました。マウス イベントを使用してラベル コントロールを移動しています。そのとき、ラベル コントロールはパネル コントロールの外に移動します。どうすれば制限できますか?

4

3 に答える 3

3

要件に合わせて利用できます(ただし、イベント ハンドラーCursor.Clipで手動で処理できます)。MouseMove

    Point downPoint;
    //MouseDown event handler for your label1
    private void label1_MouseDown(object sender, MouseEventArgs e){
        downPoint = e.Location;
        //this is the most important code to make it works
        Cursor.Clip = yourPanel.RectangleToScreen(new Rectangle(e.X, e.Y, yourPanel.ClientSize.Width - label1.Width, yourPanel.ClientSize.Height - label1.Height));
    }
    //MouseMove event handler for your label1
    private void label1_MouseMove(object sender, MouseEventArgs e) {
        if (e.Button == MouseButtons.Left) {
            label1.Left += e.X - downPoint.X;
            label1.Top += e.Y - downPoint.Y;
        }
    }
    //MouseUp event handler for your label1
    private void label1_MouseUp(object sender, MouseEventArgs e){
        Cursor.Clip = Rectangle.Empty;
    }
于 2013-08-26T06:22:31.430 に答える
1

ラベルをパネルに動的に追加する場合は、次のことを行う必要があります。

this.panel1.Controls.Add(this.button1);

そうしないと、それは間違いです。その上、ラベルを移動するときは、新しい値がパネルの範囲内にあることを確認してください。

panel1.Location.X
panel1.Location.Y

必要に応じてコードを共有して、より多くの助けを得る

于 2013-08-26T04:43:52.453 に答える
1

カーソルが存在しなければならない長方形を定義することで、動きを制限できます。Cursor.Clipメソッドを使用します。

ドラッグ時の設定:

Cursor.Clip = panel1.ClientRectangle;

次に、mouseUp イベントを使用します。

Cursor.Clip = null;
于 2013-08-26T04:44:58.023 に答える