6 Ağustos 2015 Perşembe

Fare

Giriş
.Net Global Hook'ları desteklemediği için eski Win32 numaralarını çevirmek biraz daha zor.

Cursor Sınıfı
Position Özelliği
Ekranın başlangıç noktasına göre farenin konumunu verir.
void button1_Click(object sender, EventArgs e)
{
  Point coordinates = Cursor.Position;
  MessageBox.Show("Coordinates are: " + coordinates);
}
Eğer herhangi bir kontrole göre cursor konumunu almak istersek şöyle yaparız.
var relativePoint = myControl.PointToClient(Cursor.Position);


MouseEventArgs sınıfı
MouseUp, MouseDown, MouseMove olayları bu sınıfı parametre olarak gönderir.  Bu sınıfa OnClick ile erişmek te mümkün. Sadece cast etmek gerekiyor.

OnClick ile almak
Örnek
void button1_Click(object sender, EventArgs e)
{
  MouseEventArgs me = (MouseEventArgs)e;
  Point coordinates = me.Location;
  MessageBox.Show("Coordinates are: " + coordinates);

}
Location Özelliği
Tıklanan noktanın X,Y değerini bildirir. Tıklanan noktaya bir TextBox yerleştirme kodu şöyledir.
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
  TextBox tb = new TextBox();
  tb.Text = "Sample Stuff";

  tb.Location = e.Location;

  this.Controls.Add(tb);
}

Button Özelliği
Hangi düğmenin tıklandığını bildirir. MouseDown ile kullanılır. Örnekte Client Area'ya tıklanınca Caption alanına tıklanmış gibi davranana kod var. Böylece borderless bir form hareket ettirilebilir.
protected override void OnMouseDown(MouseEventArgs e)
{
  base.OnMouseDown(e);
  if (e.Button == System.Windows.Forms.MouseButtons.Left)
  {
    this.Capture = false;
    Message msg = Message.Create(this.Handle, 0XA1, new IntPtr(2), IntPtr.Zero);
    this.WndProc(ref msg);
  }
}

Button özelliği tüm fare olaylarında gelmez. Mesela fare hareket ederken gelmez. Daha önce hangi tuşun basıldığını saklamak gerekebilir. Fare hareket ederken sol tuş basılı kontrolü şöyledir.
bool draw = false;
void MouseMove(object sender, MouseEventArgs e){
 if (draw) {...}
}
void MouseDown(object sender, MouseEventArgs e){
    draw = true;
}
void MouseUp(object sender, MouseEventArgs e){
    draw = false;
}




Hiç yorum yok:

Yorum Gönder