كيفية نقل التسمية على winform في وقت التشغيل
سؤال
واستخدام هذا الحدث التسمية يختفي تماما، وكيف ينبغي أن أفعل هذا؟
private void label4_MouseMove(object sender, MouseEventArgs e)
{
label4.Location = new Point(Cursor.Position.X, Cursor.Position.Y);
}
المحلول
وموقع label4
نسبة إلى الحاوية (Form
أو سيطرة الوالدين)، قد يكون موقف المؤشر النسبي على الشاشة.
وتحتاج إلى ضبط الموقع. على سبيل المثال، إذا الحاوية هي Form
يمكنك أن تجد موقعها في الشاشة وحساب به موقع المؤشر نسبة إلى الشاشة.
هذا هو احتمال واحد فقط من أجل القضية، ولكن هذا هو واحد يحدث كثيرا:) م>
نصائح أخرى
handle these three event ...
Control actcontrol;
Point preloc;
void label1_Mousedown(object sender, MouseEventArgs e)
{
actcontrol = sender as Control;
preloc = e.Location;
Cursor = Cursors.Default;
}
void label1_MouseMove(object sender, MouseEventArgs e)
{
if (actcontrol == null || actcontrol != sender)
return;
var location = actcontrol.Location;
location.Offset(e.Location.X - preloc.X, e.Location.Y - preloc.Y);
actcontrol.Location = location;
}
void label1_MouseUp(object sender, MouseEventArgs e)
{
actcontrol = null;
Cursor = Cursors.Default;
}
<الإضراب> استخدم وظيفة PointToClient النموذج () لترجمة X الماوس / Y إحداثيات إلى النقاط التي هي بالنسبة إلى النموذج الخاص بك، وينبغي أن تفعل ذلك. إضراب>
وتحرير: استخدام الماوس كائن وسائط الحدث الخصائص بدلا من ذلك:
Label1.Location = New Point(e.X, e.Y)
وPS بالعفو عن VB، لا C # على هذا الكمبيوتر
وموقع عنصر نسبة إلى الأم. في هذه الحالة لو كنت تستخدم الماوس موقف المطلق موقعه.
وأنت بحاجة إلى ترجمة الموقف الماوس في نظام الإحداثيات من العنصر الأصلي.
واستخدم PointToClient
الطريقة على العنصر الأصل في التسمية.