Quiero ser capaz de utilizar un panel o similar para dibujar gráficos en un Winform. Yo no puedo ver nada con respecto a la adición de barras de desplazamiento si los gráficos son más grandes que la de control?

Es posible hacer esto con un panel o hay un control similar que le permita?

Gracias.

  • ¿Por qué alguien downvote esto? Es una pregunta perfectamente razonable?
InformationsquelleAutor Darren Young | 2010-11-29

2 Comentarios

  1. 19

    Establezca la propiedad AutoScroll a la verdad y la AutoScrollMinSize de la propiedad para el tamaño de la imagen. Las barras de desplazamiento ahora aparecen automáticamente cuando la imagen es demasiado grande.

    Te quieren heredar su propia clase desde el Panel de manera que se puede establecer la DoubleBuffered propiedad a true en el constructor. Parpadeo sería perceptible de otro modo. El código de ejemplo:

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    class ImageBox : Panel {
        public ImageBox() {
            this.AutoScroll = true;
            this.DoubleBuffered = true;
        }
        private Image mImage;
        public Image Image {
            get { return mImage; }
            set {
                mImage = value;
                if (value == null) this.AutoScrollMinSize = new Size(0, 0);
                else {
                    var size = value.Size;
                    using (var gr = this.CreateGraphics()) {
                        size.Width = (int)(size.Width * gr.DpiX / value.HorizontalResolution);
                        size.Height = (int)(size.Height * gr.DpiY / value.VerticalResolution);
                    }
                    this.AutoScrollMinSize = size;
                }
                this.Invalidate();
            }
        }
        protected override void OnPaint(PaintEventArgs e) {
            e.Graphics.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
            if (mImage != null) e.Graphics.DrawImage(mImage, 0, 0);
            base.OnPaint(e);
        }
    }
    • Gracias Hans. Voy a dar a este un ir ahora.
    • Lo Siento Hans….la imagen que se ajuste en el panel se crea de forma dinámica en tiempo de ejecución. Los gráficos se crean en función de ciertos parámetros. Que esto todavía funciona?
    • Yah, asignar las propiedades de la Imagen. Funciona igual de bien en tiempo de diseño como en tiempo de ejecución.
    • La forma en que puedo crear la imagen es mediante el uso de gráficos para dibujar círculos en un panel. Iba yo a guardar este panel como una imagen? Lo siento, quizás preguntas tontas – estoy totalmente nuevo para gráficos/imagen de programación. Gracias de nuevo.
    • Acaba de hacer el dibujo en el OnPaint() método. La TranslateTransform llamar allí se asegura de que su dibujo se desplaza correctamente. No obstante, usted tendrá que establecer el AutoScaleMinSize de la propiedad a sí mismo.
    • Sólo quería decir que este funciona a la perfección…gracias de nuevo!
    • Tal vez algo ha cambiado entre el momento en que esta pregunta se la hicieron y ahora, ¿pero cómo incluso el Panel de la base objeto no tiene la DoubleBuffered de la propiedad para que me de acceso en el Intellisense de Visual Studio? Estoy usando VS2012 y .NET 4.5 si que importa, y yo todavía conjunto de desplazamiento automático.
    • Muestra bien cuando lo intento. Claramente debes hacer clic en la Pregunta de botón y documentar su pregunta correctamente.
    • Tengo un problema: estoy tratando de pantalla de 1024 x 768 jpg usando su código en el panel de 512×512, por desgracia, cuando me desplazo yo no puede desplazarse hasta el final de la imagen (horizontal y vertical). Alguna idea?

  2. 0

    No estoy 100% seguro de lo que estamos tratando de lograr, pero aquí es similar ASÍ, pregunta que podrían ser de ayuda.

    También puede intentar usar un PictureBox que iba a cambiar manualmente su tamaño como los gráficos se hacen más grandes. A continuación, establezca su forma de desplazamiento automático a la verdad.

    • Yo no usaría la picturebox como un lienzo de dibujo. El control picturebox es sólo para la visualización de las imágenes. Consulte decir, Bob Powell artículo sobre este problema exacto.

Dejar respuesta

Please enter your comment!
Please enter your name here