Wie kann ich die Größe ein benutzerdefiniertes Steuerelement, ich habe gebaut
Ich bin Größenänderung mein benutzerdefiniertes Steuerelement, mit dem folgenden code:
private void Form1_Resize_1(object sender, EventArgs e)
{
textBox1.Text = this.Width.ToString();
textBox2.Text = (this.Height - 200).ToString();
canvas21.Size = new System.Drawing.Size(this.ClientSize.Width, this.ClientSize.Height - this.Top - 15);
canvas21.Invalidate();
}
Will ich nur die Obere linke Ecke des benutzerdefinierten Steuerelements(0, 105), um im Platz zu bleiben, und das Steuerelement zum ändern der Größe zusammen mit der form, aber aus irgendeinem Grund nicht funktioniert. Wenn ich die Größe des Steuerelements bleibt an Ort und Stelle, sondern passt automatisch die Größe, füllen Sie den rest des Formulars.
Gibt es eine Möglichkeit, um eine Liste der alles, was auf die Größe des ein Benutzersteuerelement. Um die Suche nach anderen Orten, die Größe habe ich eingestellt, die ich möglicherweise übersehen habe?
- Haben Sie untersucht die
Dock
undAnchor
Eigenschaften schon? Verwenden Sie einen oder beide von denen ist viel einfacher, als manuell die Umsetzung der Größenänderung Logik in derResize
Ereignis, wie wir zu tun hatten, für die Jahre vor. - ich habe versucht, diese beiden, aber ich kann nicht das Ergebnis bekommen, das ich will. Siehe meine Antwort auf ho1.
- Ziemlich unklar, was verlangt wird. Das code-snippet ist auf jeden Fall falsch, es sollte ClientSize und subtrahieren Sie die Left und Top-Eigenschaft die Werte der Kontrolle.
- Ich habe ein kleines Bild zu beschreiben mein problem, und änderte den code. Ich bin immer noch mit dem gleichen problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, dass ein Steuerelement immer die Größe mit der form, die Sie verwenden können, die Anker - Eigenschaft, um es zu verankern, um eine oder mehr Seiten der form, so dass Sie nicht haben, um Ihre eigenen resizing-code (unter der Annahme, dass die standard-Größenänderung Funktionalität erhalten Sie mit diesem Ihren Bedürfnissen passt).
Müssen Sie sicherstellen, dass die Dock Eigenschaft nicht gesetzt, obwohl, sonst kann es füllen Sie das gesamte Formular (oder einer Seite des Formulars je nach Einstellung).
Dock
- Eigenschaft nicht festgelegt ist?Dock
Eigenschaft überschreibt dieAnchor
Eigenschaft. Wenn das nicht in den Eigenschaften gesetzt, ich würde tun, eine Suche nach dem code, um sicherzustellen, dass es nicht eingestellt wird, irgendwo anders und ich würde auch vorschlagen, eine Suche durch den code für alle Instanzen, wo Sie alle Eigenschaften des Steuerelements (einschließlich in der Steuerung selbst!) um zu sehen, wenn Sie dieDock
oderSize
Eigenschaften irgendwo in Ihnen könnte der Grund dafür sein.Es gibt wirklich keinen Grund, warum die Einstellung der Höhe und dann die Verankerung zu jeder Seite (mit docking none) nicht funktionieren sollte.
Aber ich habe bemerkt, ein Fehler in der Logik werden die von Ihnen bereitgestellten code. Sie haben:
Als es eigentlich sein sollten:
Waren Sie gerade unter die Spitze der form, anstatt der oben canvas21, das ist, was Sie brauchen.
Dass scheint genau das zu tun, was Sie wollen, zumindest aus meiner Sicht. Wenn es nicht ganz so funktioniert, ist es einfach nicht die Größenänderung auf alle für Sie oder ist es die Größenänderung auf die falsche Größe?
Verwenden Sie die Anchor-Eigenschaft ist die bessere Weise zu gehen, wenn Sie es einrichten können. Diejenigen, die zu sperren sind
Anker hält Sie control-x-Einheiten bilden die Seite, die Sie gesperrt haben, so dass es immer den gleichen Abstand von den Seiten.
Wenn das nicht eine option, oder einfach nur, um Ihren code zu gehen, versuchen Sie, diese
Halten es
15 pixels in the bottom
ändern200
oben15
. Oder, bei 15 zur design-Zeit oder über den code, der Aktivierung derbottom
Anker.Für andere Steuerelemente als das benutzerdefinierte Steuerelement können Sie es erhalten, um die Größe richtig? Zum Beispiel, wenn Sie in einem richtextbox-Steuerelement, und legen Sie den Anker entsprechend (Alle) wird es die Größe richtig für Sie ist? Wenn es dann funktioniert, muss es etwas fischig mit der Dimensionierung Ihrer Kontrolle, ABER das könnte man vielleicht überlisten, indem dies zu tun...
Wenn natürlich dein panel nicht in der korrekten Größe angezeigt, die entweder dann dies nicht für Sie arbeiten. Zugegeben, ist das wahrscheinlich eine Lösung für einen zugrunde liegenden code-Problem, das in einer perfekten Welt wäre remidied auf die Steuerung selbst.
Ich freu mich auf die Größenänderung ein Benutzer-Steuerelement, und ich bin mit vielen verschiedenen Veranstaltungen zu handhaben (zB. OnSizeChanged, OnFontChanged, OnTextChanged)
Je nachdem, wie Sie Ihre text-Boxen passen in Ihrer Kontrolle wird einen Unterschied machen, aber wenn Ihre primäre container hat die Eigenschaft AutoScaleMode oder AutoSize dann können Sie feststellen, Sie sind nicht das abfangen aller relevanten Ereignisse.
Ich appologise im Voraus, wenn ich bin off-beam, wie ich bin neu in diese Art der Sache.
ps. Ich finde nicht dein post anfangs als ich war auf der Suche auf tags, die Windows-forms-designer und benutzerdefinierte-Steuerelement. Ich weiß wirklich nicht, welche tags ich verwenden soll und kann nicht alle die Möglichkeiten, als das limit von 5 übernimmt!
Dude, du gehst selbst kicken. Sie wollen nicht ClientSize.Höhe - Top - 15, Sie wollen ClientSize.Höhe - canvas21.Top - 15. Das ist es!