Fare olaylarında, windows form denetiminde fare hareket hızını nasıl bulabilirim. Fare hareket hızına dayanarak kontrolü hareket ettirmem gerekiyor. Farenin sol fare tuşuyla hareket etmesi gibi, fare hızına dayanarak kontrolümü hareket ettirmem gerekiyor mu?Windows formunda fare hareket hızı nasıl bulunur?
cevap
Bunu şöyle yaparım:
, fare ilk kez hareket ettirildiğinde bir zamanlayıcı başlatır ve başlangıç konumunu kaydeder. Hareket etmeye devam ederse, hareket düz bir çizgide olup olmadığına bakın, eğer değilse, zamanlayıcıyı durdurun ve sonra seyahat edilen toplam mesafeyi hesaplamak için bir formül uygulayın ve bu süreye göre bölün. Birden fazla "düz çizgi" varsa, bir ortalama (toplam/yok) kullanabilirsiniz.
Belki Microsoft'tan bu kod örneği size yardımcı olabilir:
using System;
using System.Windows.Forms;
using System.Reflection;
namespace SystemInfoBrowser
{
public partial class SystemInfoBrowserForm : System.Windows.Forms.Form
{
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.TextBox textBox1;
public SystemInfoBrowserForm()
{
this.SuspendLayout();
InitForm();
// Add each property of the SystemInformation class to the list box.
Type t = typeof(System.Windows.Forms.SystemInformation);
PropertyInfo[] pi = t.GetProperties();
for (int i = 0; i < pi.Length; i++)
listBox1.Items.Add(pi[i].Name);
textBox1.Text = "The SystemInformation class has " + pi.Length.ToString() + " properties.\r\n";
// Configure the list item selected handler for the list box to invoke a
// method that displays the value of each property.
listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);
this.ResumeLayout(false);
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// Return if no list item is selected.
if (listBox1.SelectedIndex == -1) return;
// Get the property name from the list item.
string propname = listBox1.Text;
if (propname == "PowerStatus")
{
// Cycle and display the values of each property of the PowerStatus property.
textBox1.Text += "\r\nThe value of the PowerStatus property is:";
Type t = typeof(System.Windows.Forms.PowerStatus);
PropertyInfo[] pi = t.GetProperties();
for (int i = 0; i < pi.Length; i++)
{
object propval = pi[i].GetValue(SystemInformation.PowerStatus, null);
textBox1.Text += "\r\n PowerStatus." + pi[i].Name + " is: " + propval.ToString();
}
}
else
{
// Display the value of the selected property of the SystemInformation type.
Type t = typeof(System.Windows.Forms.SystemInformation);
PropertyInfo[] pi = t.GetProperties();
PropertyInfo prop = null;
for (int i = 0; i < pi.Length; i++)
if (pi[i].Name == propname)
{
prop = pi[i];
break;
}
object propval = prop.GetValue(null, null);
textBox1.Text += "\r\nThe value of the " + propname + " property is: " + propval.ToString();
}
}
private void InitForm()
{
// Initialize the form settings
this.listBox1 = new System.Windows.Forms.ListBox();
this.textBox1 = new System.Windows.Forms.TextBox();
this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
this.listBox1.Location = new System.Drawing.Point(8, 16);
this.listBox1.Size = new System.Drawing.Size(172, 496);
this.listBox1.TabIndex = 0;
this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Right)));
this.textBox1.Location = new System.Drawing.Point(188, 16);
this.textBox1.Multiline = true;
this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.textBox1.Size = new System.Drawing.Size(420, 496);
this.textBox1.TabIndex = 1;
this.ClientSize = new System.Drawing.Size(616, 525);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.listBox1);
this.Text = "Select a SystemInformation property to get the value of";
}
}
}
O Microsoft gelen ve bazı özelliklerini göstermek için Sistem bilgisi sınıfını kullanır, o da size ulaşır MouseSpeed gösterir 1 - 20 arası ve varsayılan olarak 10'a ayarlanmalıdır. Sadece bu özellik için kod parçalarını çıkarmanız gerekiyor ve ayarlanmanız gerekiyor. sadece yeni fare konuma göre yeniden konumlandırmak zaman
OnMouseMove geçersiz kılma yönteminde fare hareket hızına ihtiyacım var, bunu nasıl bulabilirim? – Jagadeesan
Sen Sadece gerekli değildir güvenilir bu işi yapamaz, hiç hız umurumda değil. Bir süreliğine yeni bir güncelleme almadıysanız, her ne sebeple olursa olsun, hala doğru şekilde çalışıyor. –
Basit bir hareket için: Fare hızını kullanmayın. Pozisyonunu kullanın. – PMBjornerud
MouseDown, MouseMove ve MouseUp gibi fare olaylarını kullanarak dokunarak Kaydırma işlemini uyguladı. Sizin önerinize göre mükemmel çalışan Panning işlemi, ben fare pozisyonunu kullanıyorum. Ama aynı zamanda, aynı kaydırma olaylarında kaydırma kaydırma desteğini uygulamam gerekiyor. Bunu nasıl başarabilirim? – Jagadeesan