C# panel sürüklerken kayıyor

Katılım
5 Mart 2014
Mesajlar
5.701
Makaleler
12
Çözümler
44
C#:
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
    PanelClicked = true;
}

private void panel1_MouseUp(object sender, MouseEventArgs e)
{
    PanelClicked = false;
}

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
    if (PanelClicked)
    {
        panel1.Left = e.X - (panel1.Width / 2);
        panel1.Top = e.Y - (panel1.Height / 2);
    }
}
Bu kodu yazdığımda ve test ettiğimde paneli sürükleme işlemi sırasında sürekli yukarıya gidip aşağı iniyor. Yani şöyle anlatayım. Panel ortada diyelim. Ben ortadayken sürüklüyorum. Hem ortada hem de ekranın başlangıç pozisyonunda sürükleniyor.
 
C#:
Point PanelMouseDownLocation;

void Panel1MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        panel1.Left += e.X - PanelMouseDownLocation.X;
        panel1.Top += e.Y - PanelMouseDownLocation.Y;
    }
}

void Panel1MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        PanelMouseDownLocation = e.Location;
    }
}
 
C#:
Point PanelMouseDownLocation;

void Panel1MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        panel1.Left += e.X - PanelMouseDownLocation.X;
        panel1.Top += e.Y - PanelMouseDownLocation.Y;
    }
}

void Panel1MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        PanelMouseDownLocation = e.Location;
    }
}
Bu sorunu MousePosition ile çözdüm. Kısacası diyorsun ki "MouseDown" işleminde fare pozisyonunun sürekli yenilenmesi gerekiyor. Bir test edeyim, eğer çözüm olursa bilgi vereceğim.
 
Bu sorunu MousePosition ile çözdüm. Kısacası diyorsun ki "MouseDown" işleminde fare pozisyonunun sürekli yenilenmesi gerekiyor. Bir test edeyim, eğer çözüm olursa bilgi vereceğim.
MousePosition ile çözmek pek sağlıklı olmayacaktır. Burada e dediğimiz şey mouse değildir, mouse'un öğe içindeki işlevidir.
 
MousePosition ile çözmek pek sağlıklı olmayacaktır. Burada e dediğimiz şey mouse değildir, mouse'un öğe içindeki işlevidir.
C#:
if (Device == 0)
{
    panel1.Left = (MousePosition.X - Screen.AllScreens[1].Bounds.Width) - (panel1.Width / 2);
    panel1.Top = MousePosition.Y - (panel1.Height / 2);
}
else if (Device == 1)
{
    panel1.Left = MousePosition.X - (panel1.Width / 2);
    panel1.Top = MousePosition.Y - (panel1.Height / 2);
}
Bu doğru, zaten hem tam ekran olacak hem de çoklu ekranlarda sorun oluşturmasın diye bunu ekledim. Bu kod en fazla 2 ekrana kadar destekliyor olsa da benim için yeterli.
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Geri
Yukarı