如何在Paint事件中,判断有其他控件拖过。
我的意思是,如果是控件本身大小改变了,那么就重绘,如果只是被其他控件因为拖放而暂时挡住了,则不重绘。

解决方案 »

  1.   

    在Resize事件中加入
    sender.refresh()
      

  2.   

    因为用resize事件重绘控件边框,边框会非常闪烁,用paint就不会。
     private void MyPaint(object sender, PaintEventArgs e)
            {
                Control ctrl = sender as Control;
                Rectangle rect = ctrl.ClientRectangle;
                rect.Inflate(0, 0);
                ctrl.SendToBack();
                         Graphics g = e.Graphics;
                         if (ctrl.Capture)
                         {
                             ControlPaint.DrawBorder(g, rect, Color.Red, ButtonBorderStyle.Solid);
                         }
                         else
                         if (ctrl.Cursor != Cursors.Arrow)
                         {
                             ControlPaint.DrawBorder(g, rect, Color.Red, ButtonBorderStyle.Dotted);
                         }
                                 }但由于控件拖动到另一个控件表面,并覆盖他时,另一个控件会重绘,但我不想要这样的效果。
      

  3.   

    应该是这样
     
    private void MyPaint(object sender, PaintEventArgs e)
            {
                Control ctrl = sender as Control;
                Rectangle rect = ctrl.ClientRectangle;
                rect.Inflate(0, 0);
                Graphics g = e.Graphics;
                ControlPaint.DrawBorder(g, rect, Color.Red, ButtonBorderStyle.Solid);
                                                     }
      

  4.   

    不是,是要象vs的设计界面一样,双击一个标签,就在form上添加一个标签。
    然后那个标签可以随意拖动,改变大小。
      

  5.   

    label,或者双击textbox,treeview等等vs左侧工具箱的任意控件。