2010-03-10 26 views
6

Ich bin eine Anwendung implementieren, die Bildfelder in einem Panel ziehen und ablegen müssen. Bildfelder werden dynamisch aus dem Programm hinzugefügt, und ich habe die Autoscroll-Eigenschaft im Panel auf True festgelegt Ich habe die Boxen unten im Panel ziehen die Panel-Größe wurde reduziert. Ich habe Autosize-Eigenschaft false in Panel.The Panel ist in einem anderen Panel angedockt.Ich möchte die Größe der Panel zur Laufzeit einstellen.Wie kann ich erreichen Dies.Ändern Sie die Größe des Bedienfelds dynamisch

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); 
    } 

Dies ist der Konstruktor des Formulars, das Panel enthält. Wenn es geladen wird, müssen die Bildfelder zum Panel hinzugefügt werden und dort Drag-Drop-Ereignisse des Panels implementiert werden.

Bitte geben Sie mir eine helfende Hand ..

+2

Ist dieses Web, WinForm oder WCF/Silverlight? Was ist die tatsächliche Kontrollklasse, die Sie verwenden? Wollen Sie sagen, dass Sie die Größe nur einmal einstellen wollen? – Blanthor

+0

Sehr angemessene Frage! Ich nahm an, dass dies in Windows Form war ... –

+0

Ein paar Vorschläge: Verschieben Sie Ihre ursprünglichen Elemente (* int [,] Dummy, int columnSize, int rowSize *) außerhalb Ihrer Anwendung Konstruktor und machen Sie alle Ihre Initialisierung und Arbeit * nach * 'InitializeComponent()' - Anderenfalls könnten einige Ihrer Daten mit ungültigen Daten initialisiert werden. – jp2code

Antwort

2

Können Sie nicht dies erreichen durch die Panel.Height und Panel.Width Eigenschaften?

Andernfalls, wenn Sie eine Mindestgröße für Ihr Panel dynamisch angeben möchten, können Sie dies über die SetMinimumSize-Methode tun, wenn ich mich nicht irre. Ist das wonach Sie suchen?

+0

Ich habe müde durch Einstellung von Panel.Height und Panel.Width aber seine Größe reduziert sich, wie ich Bilder in der unteren Zeile entfernt habe.Was kann ich noch tun? – Dinu

+0

Ich benutze Windows-Formular und Steuerelemente sind Bildfelder.Ich möchte die Größe des Panels einmal zur Laufzeit – Dinu

+0

Ich bekomme nicht, was Sie dann erreichen möchten. Haben Sie versucht, es an die Grenzen Ihres Formulars anzudocken und dann eine Mindestgröße dafür festzulegen? –

6

Ich konnte das nicht funktionieren, wenn ich die maximale Breite programmgesteuert im Code festlegte. Es war egal, wie groß die maximale Breite im Designer war (oder ob die maximale Breite festgelegt wurde).

int newWidth = 200; 
panel.MaximumSize = new Size(newWidth, panel.Height); 
panel.Size = new Size(newWidth, panel.Height); 
Verwandte Themen