Ich habe ein benutzerdefiniertes Formular mit 4 Feldern an den Rändern. Ich möchte ein weiteres Panel verankern, um Benutzersteuerelemente an den sichtbaren Rändern des Formulars zu enthalten. Sobald das geschehen ist, möchte ich dann eine unbestimmte Anzahl von Steuerelementen an das bereits verankerte Feld verankern. Ich bin ein ziemlicher Neuling auf diesem Gebiet und weiß nicht, ob dies der beste Weg ist, um mein Ziel zu erreichen, eine Liste von Objekten zu haben, deren Größe sich ändert, wenn die Größe des Formulars geändert wird. Der Grund, warum ich so vorgehe, ist, dass ich möchte, dass die Objekte anklickbar und verschiebbar sind, nicht nur Textzeilen.
Mein Gedanke ist in etwa so.
----------------------------------------
| Header Panel |
----------------------------------------
|| <--left panel right panel->||
|| [ user control object ]||
|| [ user control object ]||
|| [ user control object ]||
|| [ user control object ]||
----------------------------------------
| Bottom Panel |
----------------------------------------
Derzeit bin ich in der Lage, das Bedienfeld zu zeichnen, die die Benutzer-Steuerelement-Objekte wie gewünscht hält, aber es nicht mit der übergeordneten Größe ändern, und wenn ich versuche, es an der übergeordneten zu verankern, es an der falschen Stelle verankert. Ich habe auch versucht, die Benutzer-Steuerungsobjekte mit dem Benutzer-Steuerungsfeld zu verankern, aber sie ändern ihre Größe überhaupt nicht.
Hier ist also der Code für das Container-Panel
//This is called after InitializeComponent(), I would assume the anchor would go
//in here somewhere, but I need the anchor to be offset by the bounds of the
//other panels as listed below.
private static void SetQuestionContainerBounds(SessionReviewForm instance)
{
instance.pnlQuestionContainer.Top = instance.HeaderPanel.Bottom;
instance.pnlQuestionContainer.Left = instance.LeftPanel.Right;
instance.pnlQuestionContainer.Width = instance.RightPanel.Left - instance.pnlQuestionContainer.Left;
instance.pnlQuestionContainer.Height = instance.StatusPanel.Top - instance.pnlQuestionContainer.Top;
}
Nachdem ich das Formular erstellt und den pnlQuestionContainer positioniert habe, beginne ich mit der Erstellung von Benutzersteuerelementen, die Basisfrageobjekte genannt werden, verankere sie und füge sie dem pnlQuestionContainer hinzu
private void DisplayData()
{
// tracks the number of questions, used in placement of objects
int questionCount = 0;
// if the session question is marked for review
// generate a new question object and place it.
foreach (SessionQuestion sq in thisSessionPart.SessionQuestions)
{
if(sq.MarkForReview)
{
BaseQuestionObject bqo = new BaseQuestionObject(sq, parentSession);
BaseQuestionObject.FitAndPlaceObject(pnlQuestionContainer, bqo, questionCount);
bqo.Anchor = (AnchorStyles.Left | AnchorStyles.Right);
pnlQuestionContainer.Controls.Add(bqo);
questionCount++;
}
}
}
Ein Basisfrageobjekt besteht derzeit aus drei Teilen. Einem userControl, einem Gruppenfeld und einer Beschriftung. Alle diese Elemente sind auf autosize mit Anker von links, rechts mit Ausnahme der Benutzer-Steuerelement, wie ich kann nicht festgelegt, dass in der Eigenschaften-Fenster, aber ich denke, ich bin es in der obigen Methode eingestellt.
Die aktuellen Ergebnisse sind, dass der Container-Panel ist perfekt auf den ersten gezeichnet, aber es nie Größe ändern. Die Frageobjekte werden in der gleichen Größe gezeichnet, in der sie erstellt wurden, obwohl dies nicht die maximale oder minimale Größe ist.
[EDIT] Das Problem, das ich hatte, war, dass die Ankerstile nicht mit autosize zusammenspielten. Nach dem Ausschalten von autosize und der Bearbeitung der anchorStyles konnte ich die gewünschten Ergebnisse erzielen.