【问题标题】:Centered and scrolled PictureBox in WinFormsWinForms中居中和滚动的PictureBox
【发布时间】:2011-12-09 13:20:04
【问题描述】:

我正在开发 WinForms 应用程序,但不知道如何解决问题。 我需要在表单中显示图像。因为图像可以任意大,所以我需要包含图像的图片框上的滚动条,以便用户可以完整地看到它。 谷歌搜索我发现实现这一点的最佳方法是将 PictureBox 添加为面板的子控件,并使面板可自动调整大小和自动滚动。 由于使用设计器我无法将图片框作为面板的子控件插入,因此我以编程方式进行了操作。 我现在面临的问题是我似乎无法同时居中和滚动图片框。 如果我将图片框的锚点放在上、左、下、右,则不显示滚动条并且显示的图像很奇怪,如果我将锚点放回仅左上角,则图像不居中。

有没有办法同时做这两个? 这是我的面板和图片框的代码:

this.panelCapturedImage = new System.Windows.Forms.Panel();
this.panelCapturedImage.SuspendLayout();
this.panelCapturedImage.AutoScroll = true;
this.panelCapturedImage.AutoSize = true;
this.panelCapturedImage.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.panelCapturedImage.Controls.Add(this.pictureBoxCapturedImage);
this.panelCapturedImage.Location = new System.Drawing.Point(0, 49);
this.panelCapturedImage.Name = "panelCapturedImage";
this.panelCapturedImage.Size = new System.Drawing.Size(3, 3);
this.panelCapturedImage.TabIndex = 4;

this.pictureBoxCapturedImage.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pictureBoxCapturedImage.Location = new System.Drawing.Point(0, 0);
this.pictureBoxCapturedImage.Name = "pictureBoxCapturedImage";
this.pictureBoxCapturedImage.Size = new System.Drawing.Size(0, 0);
this.pictureBoxCapturedImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pictureBoxCapturedImage.TabIndex = 0;
this.pictureBoxCapturedImage.TabStop = false;

this.panelCapturedImage.Controls.Add(this.pictureBoxCapturedImage);

这是我设置图像的地方:

public Image CapturedImage
{
    set 
    { 
        pictureBoxCapturedImage.Image = value;
        pictureBoxCapturedImage.Size = value.Size;
    }
}

【问题讨论】:

    标签: c# .net winforms scrollbar picturebox


    【解决方案1】:

    根据之前的答案,我能够创建这个完整的示例:

    private void testShowPictureBox()
        {
            /* format form */
            Form frmShowPic = new Form();
            frmShowPic.Width = 234;
            frmShowPic.Height = 332;
            frmShowPic.MinimizeBox = false;
            frmShowPic.MaximizeBox = false;
            frmShowPic.ShowIcon = false;
            frmShowPic.StartPosition = FormStartPosition.CenterScreen;
    
            frmShowPic.Text = "Show Picture";
    
            /* add panel */
            Panel panPic = new Panel();
            panPic.AutoSize = false;
            panPic.AutoScroll = true;
            panPic.Dock = DockStyle.Fill;
    
            /* add picture box */
            PictureBox pbPic = new PictureBox();
            pbPic.SizeMode = PictureBoxSizeMode.AutoSize;
            pbPic.Location = new Point(0, 0);
    
            panPic.Controls.Add(pbPic);
            frmShowPic.Controls.Add(panPic);
    
            /* define image */
            pbPic.ImageLocation = @"c:\temp\pic.png";
    
            frmShowPic.ShowDialog();
       }
    

    【讨论】:

      【解决方案2】:

      对于PictureBox,将SizeMode = AutoSizeAnchor 设置为Top, Left,并将其Location 设置为0, 0

      Panel.AutSize 设置为False 并将Panel.AutoScroll 设置为True

      当您设置PictureBox.Image 属性时,它会自动调整为图像的大小。然后,您可以使用该大小来设置面板的 AutoScrollPosition 属性:

      public Image CapturedImage
      {
          set 
          { 
              pictureBoxCapturedImage.Image = value;
              panelCapturedImage.AutoScrollPosition = 
                  new Point { 
                      X = (pictureBoxCapturedImage.Width - panelCapturedImage.Width) / 2, 
                      Y = (pictureBoxCapturedImage.Height - panelCapturedImage.Height) / 2 
                  };
          }
      }
      

      如果图像小于面板的大小,它将保留在左上角。如果您希望它在面板中居中,则必须添加逻辑以适当地设置其 Location

      【讨论】:

      • 谢谢,我虽然有一种自动的方法可以做到这一点。我会采取你的方法!
      • 你知道这一切都可以通过设置控件的属性自动完成..
      【解决方案3】:

      必须将图片框设置为自动调整大小。锚定在中心(或边界)。

      您可以在设计器中管理所有这些,不要理解您的问题。

      面板必须设置为自动滚动为真。

      【讨论】:

      • 我不知道如何在设计器中将 PictureBox 添加为面板的子控件,当我将它放到面板上时,它会添加到表单中,而不是在面板内
      • 好的,是的,似乎控件已添加到面板内,但是,如果我将图片框设置为自动调整大小,则图像不会在面板内居中。我如何实现这一目标?我看不到将其锚定到中心的选项
      • 如果你不将它锚定到任何东西上,它将默认居中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多