簡體   English   中英

通過控件和MouseEventArgs拖放表單

[英]Drag/Drop Form via control and MouseEventArgs

我正在使用上面提到的代碼在單擊並在特定控件上移動鼠標時移動我的表單(在本例中為toolStrip)。

private void toolStrip1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left) //Wenn die linke Maustaste gedrückt wurde,
            FormMouseDownLocation = e.Location; //wird die Position der Maus gespeichert
    }

    private void toolStrip1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left) //Wird die Linke taste gedrückt und bewegt,
        {
            this.Left += e.X - FormMouseDownLocation.X; //so verschiebt sich das Fenster bei jeder Bewegung um die Positionänderung der Maus (hier die X Pos)

            this.Top += e.Y - FormMouseDownLocation.Y; //so verschiebt sich das Fenster bei jeder Bewegung um die Positionänderung der Maus (hier die Y Pos)
        }
    }

現在我有一個問題。 光標移動得比窗體快,因此光標經常離開toolStrip並且窗體停止移動。 只有在我將此代碼與主窗體以外的控件結合使用時才會發生這種情況。

有沒有解決這種行為的方法,或者是在點擊另一個控件時更改表單位置的更好方法?

提前致謝

附加信息:我正在使用winforms,FormBorderStyle:無

這是一個常見問題,您必須捕獲鼠標以確保在光標移動到工具條窗口之外時仍然獲得MouseMove事件。 任何窗口的問題,但更可能使用工具條,因為它們往往是苗條的。 固定:

private void toolStrip1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left) {
        FormMouseDownLocation = e.Location;
        toolStrip1.Capture = true;
    }
}

private void toolStrip1_MouseUp(object sender, MouseEventArgs e)
{
    toolStrip1.Capture = false;
}

請選擇更好的變量名稱。 “FormMouseDownLocation”非常不准確,該位置與表單完全無關。

你可以參考這個 例如,您可以使用面板甚至任何可用作標題的對象。 請檢查鏈接。 不是他們使用WndProc的部分

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM