2010-03-10 10 views
6

Je suis implémentant une application qui doit glisser et déposer des zones d'image dans un panneau. Les zones d'image sont ajoutées dynamiquement à partir du programme et j'ai donc défini la propriété autoscroll sur true dans le panneau. J'ai fait glisser les boîtes en bas dans le panneau la taille du panneau a été réduite. J'ai mis la propriété autosize false dans le panneau. Le panneau est ancré dans un autre panneau. Je veux définir la taille du panneau au moment de l'exécution. ce.Modifier la taille du panneau dynamiquement

public form1(int[,] dummy, int columnSize, int rowSize) 
    { 
     this.dummy= dummy; 
     numOfColumns = columnSize; 
     numOfRows = rowSize; 
     getData(); 
     addIds = addIdArray; 
     data = mylist; 
     InitializeComponent(); 
     //panel1.MinimumSize = new Size(columnSize * 40, rowSize * 40); 
     //panel1.Height = rowSize * 40; 
     //panel1.Width = columnSize * 40; 
     //panel4.Height = rowSize * 40; 
     //panel4.Width = columnSize * 40; 
     int x, y; 
     Structures.EmptyRectSpace space = new Structures.EmptyRectSpace(); 
     for (int i = 0; i < data.Count; i++)// set picture boxes 
     { 
      space = (Structures.EmptyRectSpace)data[i]; 
      x = space.startingJ; 
      y = space.startingI; 
      int h, w; 
      h = space.length; 
      w = space.width; 

      p = new PictureBox(); 
       p.Width = w * 40; 
       p.Height = h * 40; 
       p.BackColor = Color.DarkGreen; 
       p.Image = Properties.Resources.v; 
       p.BorderStyle = BorderStyle.FixedSingle; 
       p.Name = addIdArray[i].ToString(); 
       p.Location = new Point((x + 1 - w) * 40, (y + 1 - h) * 40); 

       this.panel1.Controls.Add(p); 
     } 

     foreach (Control c in this.panel1.Controls) 
     { 
      if (c is PictureBox) 
      { 
       c.MouseDown += new MouseEventHandler(pictureBox1_MouseDown); 
      } 
     } 
     this.panel1.DragOver += new System.Windows.Forms.DragEventHandler(this.panel1_DragOver); 
     panel1.DragOver += new DragEventHandler(panel1_DragOver); 
     panel1.DragDrop += new DragEventHandler(panel1_DragDrop); 
     panel1.AllowDrop = true; 
     panel2.AllowDrop = true; 
     foreach (Control c in this.panel2.Controls) 
     { 
      c.MouseDown += new MouseEventHandler(pictureBox1_MouseDown); 
     } 
     this.panel2.DragOver += new System.Windows.Forms.DragEventHandler(this.panel2_DragOver); 
     panel2.DragOver += new DragEventHandler(panel2_DragOver); 
     panel2.DragDrop += new DragEventHandler(panel2_DragDrop); 
    } 

Ceci est le constructeur de la forme qui contient le panneau. Quand il a chargé les cadres d'image doivent être ajoutés au panneau et là les événements de baisse de traînée de panneau sont mis en application.

S'il vous plaît me donner un coup de main ..

+2

S'agit-il de Web, WinForm ou WCF/Silverlight? Quelle est la classe de contrôle réelle que vous utilisez? Voulez-vous dire que vous voulez définir la taille une seule fois? – Blanthor

+0

Question très appropriée! J'ai supposé que c'était dans Windows Form ... –

+0

Quelques suggestions: Déplacez vos éléments initiaux (* int [,] factice, int columnSize, int rowSize *) en dehors de votre constructeur d'application et faites tout votre initialisation et travail * après * 'InitializeComponent()' - sinon, certaines de vos données pourraient être initialisées avec des données invalides. – jp2code

Répondre

2

ne pouvez pas vous y parvenir par les propriétés Panel.Height et Panel.Width?

Sinon, si vous souhaitez spécifier dynamiquement une taille minimale pour votre panneau, vous pouvez le faire via la méthode SetMinimumSize, si je ne me trompe pas. Est-ce ce que vous cherchez?

+0

Je me suis fatigué en définissant Panel.Height et Panel.Width mais sa taille est réduite car j'ai enlevé des images à la ligne du bas. Que puis-je faire d'autre? – Dinu

+0

J'utilise la forme de Windows et les contrôles sont des boîtes d'image. Je veux définir la taille du panneau une fois à l'exécution – Dinu

+0

Je ne comprends pas ce que vous souhaitez réaliser alors. Avez-vous essayé de l'ancrer dans les limites de votre formulaire, puis de définir une taille minimale pour cela? –

6

Je ne pouvais pas obtenir ce travail à moins que je mette la largeur maximale par programmation dans le code. Peu importe la largeur maximale du concepteur (ou si la largeur maximale était définie).

int newWidth = 200; 
panel.MaximumSize = new Size(newWidth, panel.Height); 
panel.Size = new Size(newWidth, panel.Height); 
Questions connexes