Wie können Sie ein C# Winforms-Steuerelement erstellen, das außerhalb der Grenzen seiner Region geht? Wie eine Dropdown-Box. So ähnlich, wenn Sie eine DropDownBox in einem Small-Size-Panel hätten.Wie erstellt man ein C# Winforms Steuerelement, das
Antwort
Ich habe vor kurzem etwas Ähnliches gemacht, und ich habe eine ListBox verwendet. Der coole Gedanke an eine Listbox ist, dass man sie überall anzeigen kann, auch außerhalb der Kontrolle. Auf diese Weise, wenn Sie über einen Knopfklick oder was auch immer erkennen, dass Sie das gewünschte DropDown anzeigen müssen, füllen Sie einfach die ListBox und zeigen Sie sie überall an. Ich habe die Idee von hier:
http://msdn.microsoft.com/en-us/library/aa480727.aspx
Sie zeigen, wie eine benutzerdefinierte Datagridview mit Filtern zu bauen, und die Filterwerte angezeigt werden, stellen sie eine List-Box unter dem Header-Zelle.
Windows Forms unterstützt Windows nicht so gut, es ist ziemlich grundsätzlich mit dem Designer nicht kompatibel. Hier ist ein Code, mit dem Sie beginnen können. Sie können dieses Steuerelement nicht im Designer verwenden, es muss zur Laufzeit erstellt werden. Sie müssen auch die Dispose() -Methode selbst aufrufen.
using System;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
public class MyListBox : ListBox {
private Control mParent;
private Point mPos;
private bool mInitialized;
public MyListBox(Control parent) {
mParent = parent;
mInitialized = true;
this.SetTopLevel(true);
parent.LocationChanged += new EventHandler(parent_LocationChanged);
mPos = mParent.Location;
}
public new Point Location {
get { return mParent.PointToClient(this.Location); }
set {
Point zero = mParent.PointToScreen(Point.Empty);
base.Location = new Point(zero.X + value.X, zero.Y + value.Y);
}
}
protected override Size DefaultSize {
get {
return mInitialized ? base.DefaultSize : Size.Empty;
}
}
protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) {
if (this.mInitialized)
base.SetBoundsCore(x, y, width, height, specified);
}
void parent_LocationChanged(object sender, EventArgs e) {
base.Location = new Point(base.Left + mParent.Left - mPos.X, base.Top + mParent.Top - mPos.Y);
mPos = mParent.Location;
}
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
if (mParent != null && !DesignMode) {
cp.Style = (int)(((long)cp.Style & 0xffff) | 0x90200000);
cp.Parent = mParent.Handle;
Point pos = mParent.PointToScreen(Point.Empty);
cp.X = pos.X;
cp.Y = pos.Y;
cp.Width = base.DefaultSize.Width;
cp.Height = base.DefaultSize.Height;
}
return cp;
}
}
}
Es ist ein guter Artikel hier:
http://www.vbaccelerator.com/home/NET/Code/Controls/Popup_Windows/Popup_Windows/article.asp
Diese eine Klasse hat, die einige der kniffligen Aspekte behandelt dies immer richtig funktioniert, wie halten Sie das Anwendungsfenster titlebar aktiv , Umgang mit Alt-Tab und Abbrechen mit einem Mausklick.
- 1. Ist das ein Steuerelement? (C# Winforms)
- 2. C# WinForms ErrorProvider Steuerelement
- 3. C# WinForms benutzerdefinierte Steuerelement Standardeigenschaften
- 4. Wie erstellt man ein Explorer-ähnliches Ordner-Browser-Steuerelement?
- 5. Sperren Sie ein Winforms-Steuerelement
- 6. IE8, Flash und das WinForms WebBrowser Steuerelement
- 7. Was ist das "leichteste" winforms Steuerelement?
- 8. .NET (C#) winforms "tweet" UI-Steuerelement Frage
- 9. WinForms Registerkarte Steuerelement Frage
- 10. Winforms: Wie erstellt man eine Listbox mit variabler Artikelhöhe
- 11. Wie erstellt man eine Abhängigkeitseigenschaft für ein vorhandenes Steuerelement?
- 12. Wie erstellt man eine WinForms Combobox mit Label und Value?
- 13. Wie erstellt man ein Prüfungsprogramm in C++?
- 14. Wie erstellt man ein Singleton in C?
- 15. Wie erstellt man ein Benutzersteuerelement, das Sie andere Steuerelemente darin löschen können?
- 16. Winforms-Steuerelement nach vorne bringen
- 17. Fügen Sie eine Hyperlinkspalte für ein Winforms DataGrid-Steuerelement hinzu
- 18. Wie erstellt man ein Programm, das das Konsolenfenster nicht anzeigt?
- 19. Steuerelement vs UserControl in WinForms?
- 20. Ein Steuerelement in eine QuickInfo in WinForms einbetten
- 21. Wie erstellt man in C# ein Mix-In-Architektur-Framework?
- 22. C# WinForms Panel Problem
- 23. C# Winforms - Hinzufügen von Formularen zu einem FlowPanel-Steuerelement
- 24. Registerkarte Steuerelement + DataGridView in WinForms
- 25. Gibt es ein WinForms-Steuerelement zum Ein- und Ausblenden eines anderen WinForms-Steuerelements?
- 26. Winforms-Steuerelement, das angibt, ob einzelner Prozess ausgeführt wird
- 27. WinForms: Was ist das beste Steuerelement für GDI + Zeichenoberfläche?
- 28. Wie erstellt man ein UserControl mit WinForms basierend auf einem anderen UserControl?
- 29. Wie erstellt man ein Pipelineskript?
- 30. Wie erstellt man ein Dateifeld?
Versucht es und es funktioniert gut, aber irgendwie löst es keine ListBox Ereignisse wie DrawItem und SelectedIndexChanged. Hast du eine Ahnung warum? –
Siehe meine Antwort hier: http://stackoverflow.com/questions/398176/listbox-with-overriden-createparams-doesnt-raise-item-events#398694 –