自己做的一个控件,继承了panel,其中有一个button可以在控件中自由拖动,拖过范围则可以出现滚动条,但是当最大化时,滚动条总是被拖到最底下,知道是autoscrollposition的问题,高手能否帮我解决一下,如何最大化以后滚动条仍然保持在原位。

解决方案 »

  1.   

    尝试在form_Resize中重新计算你的 pancel大小,然后再去设定滚动条的位置
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace WindowsApplication18
    {
        public partial class CustomControl1 : ScrollableControl
        {
            Point p;
            Point sp;
            Button b;
            public CustomControl1()
            {
                Button ti = new Button();
                ti.BackColor = Color.Red;
                this.Controls.Add(ti);
                b = new Button();
                b.Width = 200;
                b.MouseDown += new MouseEventHandler(b_MouseDown);
                b.MouseMove += new MouseEventHandler(b_MouseMove);
                this.Height = 400;
                this.Width = 400;
                this.Controls.Add(b);
                this.BackColor = Color.LemonChiffon;
                this.VScroll = true;
                this.HScroll = true;
                this.AutoScroll = true;
                this.AutoScrollPosition = new Point(10, 10);
                b.Location = new Point(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
                InitializeComponent();
            }        void CustomControl1_Scroll(object sender, ScrollEventArgs e)
            {        }        void b_MouseMove(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    Point ep = PointToClient(MousePosition);
                    Point cp = new Point(ep.X - p.X, ep.Y - p.Y);
                    b.Location = new Point(sp.X + cp.X + this.AutoScrollPosition.X, sp.Y + cp.Y + this.AutoScrollPosition.Y);
                }
            }        void b_MouseDown(object sender, MouseEventArgs e)
            {
                sp = new Point(b.Left, b.Top);
                p = PointToClient(MousePosition);
                if (e.Button == MouseButtons.Right)
                {
                    MessageBox.Show(this.AutoScrollPosition.X.ToString() + "," + this.AutoScrollPosition.Y.ToString());
                }        }        protected override void OnPaint(PaintEventArgs pe)
            {
                // TODO: 在此处添加自定义绘制代码            // 调用基类 OnPaint
                base.OnPaint(pe);
            }
        }
    }这是自定义控件的代码,大家帮忙看看了,多谢,注意最大化时滚动条的位置
      

  3.   

    你的定位penel的问题解决了吗?
    如果有,请告知是什么方法解决的,好吗?
    如果没有,你可否尝试一下以下的方法:
    因为在onresize时,会自动调用setcontrolinview(),
    把当前活动的控件设置到显示的工作区中,
    这样滚动条会自动的调整位置.所以,
    你需要在onresize方法中调用类似:
    protected override void OnResize(EventArgs e)
            {
                base.OnResize(e);
                foreach (Control c in this.Controls)
                {
                    if (c.Focused)
                    {
                        this.Focus();
                        break;
                    }
                }
            }
    的代码,来将焦点设置到控件本身.当然,你可以通过一个bool值来区分是拖动导致的onresize还是最大化最小化导致的.