如何創建一個超出其區域範圍的C#Winforms控件?如下拉框。有點像在小尺寸面板中使用DropDownBox。如何創建一個懸停的C#Winforms控件
7
A
回答
2
我最近做了類似的事情,我用了一個ListBox。酷想一個列表框,就是你可以在任何你想要的地方顯示它,甚至超出你的控制範圍。這樣,當您通過按鈕點擊或任何其他方式檢測到時,您需要顯示所需的DropDown,只需填充ListBox並將其顯示在您想要的任何位置。我的想法從這裏:
http://msdn.microsoft.com/en-us/library/aa480727.aspx
他們展示如何建立一個自定義的DataGridView與篩選,並顯示過濾器值,他們將一個列表框的標題單元格下。
7
Windows窗體不支持這樣的窗口,它與設計器基本上是不兼容的。這裏有一些代碼讓你開始。你不能在設計器中使用這個控件,它必須在運行時創建。你也必須自己調用它的Dispose()方法。
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;
}
}
}
0
有一個很好的文章在這裏:
http://www.vbaccelerator.com/home/NET/Code/Controls/Popup_Windows/Popup_Windows/article.asp
這有它處理一些得到這個棘手的問題才能正常工作,如保持應用程序窗口標題欄活躍的一類,處理Alt-Tab並用鼠標點擊取消。
相關問題
- 1. 如何爲一組控件創建懸停效果?
- 2. 如何創建jquery懸停
- 3. 如何創建懸停
- 4. C#winforms動態創建按鈕控件
- 5. 如何創建一個控件映射到Database DataRow列的UserControl。 C#Winforms
- 6. 創建一個與jQuery懸停的div?
- 7. 如何在Winforms C#中創建控件的疊加部分?
- 8. CSS圖標懸停創建一個框
- 9. 如何在winforms c#中創建Metro ui切換開關控件?
- 10. React Native - 如何創建一個可拖動的懸停元素
- 11. 如何創建一個懸停的工具欄
- 12. 在懸停控制上創建一個提示氣球?
- 13. 如何創建出來的div懸停
- 14. 動態創建控件或在側面窗體中創建控件? C#winforms
- 15. C#WinForms trayapp MenuItem鼠標懸停檢測
- 16. 如何在點擊或懸停時創建懸停菜單?
- 17. 如何在JavaScript懸停內創建一個顏色鍵?
- 18. jQuery:如何創建一個jQuery懸停功能?
- 19. 這是一個控件嗎? (C#Winforms)
- 20. 創建一個帶文字懸停的eclipse插件
- 21. 如何創建懸停彈出
- 22. 如何創建懸停在CSS下拉
- 23. 如何創建鼠標懸停菜單?
- 24. 如何創建懸停指令
- 25. 如何通過WinForms中的自制控件創建事件?
- 26. C#創建一個控件數組
- 27. 如何創建一個容器控件
- 28. 使用我的ASP.net菜單控件創建懸停效果
- 29. 如何創建鼠標懸停或懸停,這將觸發一個與三個鏈接的div彈出?
- 30. 如何創建像youtube一樣的懸停的jQuery UI按鈕
嘗試了它,它工作得很好,但不知何故它不會像DrawItem和SelectedIndexChanged一樣引發ListBox事件。你有什麼想法,爲什麼? – 2008-12-29 17:29:23