كيفية نقل التسمية على winform في وقت التشغيل

StackOverflow https://stackoverflow.com/questions/1803331

  •  05-07-2019
  •  | 
  •  

سؤال

واستخدام هذا الحدث التسمية يختفي تماما، وكيف ينبغي أن أفعل هذا؟

    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 الطريقة على العنصر الأصل في التسمية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top