小弟最近使用Flowlayoutpanel这样的控件来显示我从本地文件上传的图片。因为可以多次上传,所以没个图片放在一个Picture控件里面,然后加载到Flowlayoutpanel中去。Flowlayoutpanel我设置的是横向排列。图片一次上传很多的话,那么Flowlayoutpanel会出现滚动条。现在我首先向实现在图片很多的时候水平滚动条我要隐藏,因为它不好看。
但是呢我隐藏了水平滚动条之后呢,我有2个按钮本来是实现Flowlayoutpanel中图片滚动的效果却消失了。很郁闷啊,希望大牛来帮忙解决下,万分感谢。
             整个页面就是一个Flowlayoutpanel,3个Button按钮。button1,button2,button3.//button3实现图片上传。
button1控制Flowlayoutpanel中的图片左滚。button2实现Flowlayoutpanel中的图片右滚。
             下面是实现代码。上传我就不写了,太白痴了。写下我滚动的代码。希望大牛帮忙修改下代码或者帮忙给点思路。这个问题其实对我来说还是有难度的。(矛盾就是我如果让flowLayoutPanel1的水平滚动条不显示那么就不能实现里面图片的滚动了。不信大家可以测试一下。)
               private void button1_Click(object sender, EventArgs e)
        {
            int ScrollWidth = 0;//定义位置变量            if (this.flowLayoutPanel1.HorizontalScroll.Value > 100)
                ScrollWidth = this.flowLayoutPanel1.HorizontalScroll.Value - 100;
            else
                ScrollWidth = this.flowLayoutPanel1.HorizontalScroll.Minimum;            this.flowLayoutPanel1.AutoScrollPosition = new Point(ScrollWidth, 0);
        }        private void button2_Click(object sender, EventArgs e)
        {
            int ScrollWidth = 0;            if (this.flowLayoutPanel1.HorizontalScroll.Value < this.flowLayoutPanel1.HorizontalScroll.Maximum)
                ScrollWidth += 100;
            else
                ScrollWidth = this.flowLayoutPanel1.HorizontalScroll.Maximum;            this.flowLayoutPanel1.AutoScrollPosition = new Point(ScrollWidth -   flowLayoutPanel1.AutoScrollPosition.X, 0);
        }
                  
               

解决方案 »

  1.   

    不清楚你的PictureBox是添加图片时动态生成还是固定的多少个。
    不管哪种情况,都应该控制HorizontalScroll.Value值。
    假设Flowlayoutpanel一次正好显示一个PictureBox,事先已至少有1个子控件。
    在Form_Load时设置水平滚动的Maximum值。如下:
    //设置最大值为控件数量*(控件长度+控件间距)
    flowLayoutPanel1.HorizontalScroll.Maximum = flowLayoutPanel1.Controls.Count * (pictureBox1.Width + pictureBox1.Margin.Left);//向右滚动
    int hsValue;//水平滚动条的位置
    private void button3_Click(object sender, EventArgs e)
    {
    if (flowLayoutPanel1.Controls.Count > 0)
    {
    Control c = flowLayoutPanel1.Controls[0];
    hsValue += c.Width + c.Margin.Left * 2;
    if (hsValue > flowLayoutPanel1.HorizontalScroll.Maximum)
    {
    hsValue = flowLayoutPanel1.HorizontalScroll.Maximum;
    }
    flowLayoutPanel1.HorizontalScroll.Value = hsValue;
    }
    }
    //向左的操作类似如果pictureBox动态生成,flowLayoutPanel1注册ControlAdd、ControlRemoved事件,重新计算HorizontalScroll.Maximum值。
      

  2.   

    谢谢你对我的回答。其实这个问题呢,我不是不知道怎么实现滚动。我主要是要不显示flowLayoutPanel1的滚动条!
    后来我自己panel来实现了滚动和不显示滚动条的效果了。图片的话。我是存在数据库里面的2进制的数组。