滚动面板时十个分量固定的控制位置(Mantain a control position fixed

2019-09-30 07:12发布

我在那是在父面板PANEL1滚动的大自定义面板是Panel2的中间偏左的一个标签Label1。

替代文字http://lh4.ggpht.com/_1TPOP7DzY1E/SzNN2g9Sv4I/AAAAAAAAC1U/A_LlLOoejX8/s800/formScroll.png

我将在是Panel2的可见光左中始终保持LABEL1,滚动时也是如此。

在实际的例子中,我的面板是,在它的左侧产生一些标签的用户控件。 面板春联,但我需要保持标签始终可见。

怎样才能实现?

这是我的代码:

public partial class Form1 : Form
{
    public Form1()
    {
        this.InitializeComponent();
    }

    protected Point clickPosition;
    protected Point scrollPosition;

    private void panel2_MouseDown(object sender, MouseEventArgs e)
    {
        this.clickPosition = e.Location;
    }

    private void panel2_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            this.SuspendLayout();
            this.scrollPosition += (Size)clickPosition - (Size)e.Location;
            this.panel1.AutoScrollPosition = scrollPosition;
            this.ResumeLayout(false);
        }
    }
}

Answer 1:

嗯,这在技术上是可行的,你只需要调整仓位的控制面板滚动时。 例如:

  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
      mPicturePos = pictureBox1.Location;
    }
    Point mPicturePos;
    private void panel1_Scroll(object sender, ScrollEventArgs e) {
      pictureBox1.Location = mPicturePos;
    }
  }

但是,你会看到该控件将开始做弹簧,当您滚动面板。 这里的问题是,Windows正在太大的帮助。 它滚动窗口本身具有快速块传送的内容,然后发送一个请求,油漆只需要进行窗口重绘的部分。

为此,它会执导名为“显示窗口内容的同时拖动”系统选项,在外观+效果对话框控制面板中显示的小程序可用。 你不能合理地关闭这个选项,它具有全系统的影响。 Win7上它甚至没有了曝光。

有没有好的办法解决这个,不是一个简单的另外一个:不要把在面板控制。 只要确保它位于面板的顶部。 这可以是一个有点棘手的设计师,把它放在旁边面板(如果必要的话置于顶层),并用手编辑位置属性。



Answer 2:

嗨serhio,

看看这是涉及到乌尔问题..但我不知道它是否会解决您的概率无论如何给一个尝试保持形式的大小和控制的位置

而这一次维护树视图的滚动位置



Answer 3:

    public Form1()
    {
        this.InitializeComponent();
        panel2.Paint += new PaintEventHandler(panel2_Paint);
    }

    void panel2_Paint(object sender, PaintEventArgs e)
    {
        label1.Location = 
            new Point(-panel1.AutoScrollPosition.X, label1.Location.Y);
    }


文章来源: Mantain a control position fixed when scrolling a panel