回答
在windows窗體中,它不是完全可能的,但是您可以攔截導致組合框下拉並顯示面板或窗體的窗口消息。
作爲一個地方開始:
public class UserControlComboBox : ComboBox, IMessageFilter
{
public readonly MyControlClass UserControl = new MyControlClass();
protected override void WndProc(ref Message m)
{
if ((m.Msg == 0x0201) || (m.Msg == 0x0203))
{
if (DroppedDown)
HideUserControl();
else
ShowUserControl();
}
else
{
base.WndProc(ref m);
}
}
public bool PreFilterMessage(ref Message m)
{
// intercept mouse events
if ((m.Msg >= 0x0200) && (m.Msg <= 0x020A))
{
if (this.UserControl.RectangleToScreen(this.UserControl.DisplayRectangle).Contains(Cursor.Position))
{
// clicks inside the user control, handle normally
return false;
}
else
{
// clicks outside the user controlcollapse it.
if ((m.Msg == 0x0201) || (m.Msg == 0x0203))
this.HideUserControl();
return true;
}
}
else return false;
}
public new bool DroppedDown
{
get { return this.UserControl.Visible; }
}
protected void ShowUserControl()
{
if (!this.Visible)
return;
this.UserControl.Anchor = this.Anchor;
this.UserControl.BackColor = this.BackColor;
this.UserControl.Font = this.Font;
this.UserControl.ForeColor = this.ForeColor;
// you can be cleverer than this if you need to
this.UserControl.Top = this.Bottom;
this.UserControl.Left = this.Left;
this.UserControl.Width = Math.Max(this.UserControl.Width, this.Width);
this.Parent.Controls.Add(this.UserControl);
this.UserControl.Visible = true;
this.UserControl.BringToFront();
base.OnDropDown(EventArgs.Empty);
// start listening for clicks
Application.AddMessageFilter(this);
}
protected void HideUserControl()
{
Application.RemoveMessageFilter(this);
base.OnDropDownClosed(EventArgs.Empty);
this.UserControl.Visible = false;
this.Parent.Controls.Remove(this.UserControl);
// you probably want to replace this with something more sensible
this.Text = this.UserControl.Text;
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
this.UserControl.Dispose();
}
base.Dispose(disposing);
}
}
無法在Windows窗體,但在WPF,你可以把任何東西在組合框...
是的,如果你正在使用WPF。
是,例如WPF:
<Window x:Class="WpfApplication7.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<ComboBox Margin="49,61,75,0" Height="25" VerticalAlignment="Top">
<ComboBox.Items>
<ComboBoxItem>
<TextBox>TextBox</TextBox>
</ComboBoxItem>
<ComboBoxItem>
<TextBlock>TextBlock</TextBlock>
</ComboBoxItem>
<ComboBoxItem>
<Button>Button</Button>
</ComboBoxItem>
</ComboBox.Items>
</ComboBox>
</Grid>
</Window>
在Windows窗體ComboBox可能是一個麻煩。
太棒了! – 2010-02-03 09:40:22
<3 WPF,在WinForms中做這件事 – 2010-02-25 03:43:20
我可能會說明明顯的,但也有Silverlight。
如果你在談論ASP.NET,那麼如果你使用標準的ASP.NET控件,答案是否定的。但是,如果您使用HTML/JavaScript創建ComboBox樣式控件,那麼您可以。
我相信JMSA正在談論Windows Forms。
我不是.NET專家,但您可以創建自己的OwnerDrawn組合框。有ListBoxs和其他項目控件控件具有的方法,如OnDrawItem()和MeasureItem();可以重寫,你可以完全控制。
CheckBoxRenderer等是可以在線找到的類,它可以獲取圖形對象並可以繪製窗體。
這當然是一個非常漫長的過程:我會建議尋找一種更簡單的方式來完成您的任務。我也有時我有一個瘋狂的客戶誰想要華麗的超級組合框,好..接受挑戰!
- 1. C#.NET組合框控件
- 2. C#WPF組合框與文本框作爲作爲組合框
- 3. 組合框具有組合框項目和子項目
- 4. C#根據其他組合框添加項目到組合框
- 5. C# - 比較組合框和列表項目的組合框
- 6. C#:wpf將組合框項目添加到多個組合框
- 7. c#Windows 8:組合框選定項目
- 8. 組合框選定的項目WPF c#
- 9. 徵收項目組合框DataGrid中C#
- 10. C#組合框選擇新項目
- 11. C#組合框項目數乘法
- 12. .NET WinForms組合框,相同的項目和SelectedIndexChanged事件
- 13. 如何將.net ajax項目轉換爲控件或組件
- 14. 自定義組合框控件裏面的其他自定義組合框控件,如何綁定項目?
- 15. C# - 動態控件(組合框+標籤)
- 16. 組合框項目加載事件WPF?
- 17. 組合框項目重疊
- 18. 組合框項目預覽
- 19. 組合框項目左
- 20. 拆箱組合框項目
- 21. 填充組合框項目
- 22. 組合框選擇項目
- 23. 添加組合框項目
- 24. 在項目控件中綁定組合框
- 25. 添加組合框項目動態添加控件
- 26. 下拉式(列表)組合框控件字段選項C#
- 27. C++ MFC從組件框中添加組合框字符串項目
- 28. 組合框值作爲整數C#
- 29. 關於C#項目的項目合作
- 30. 組合框內的項目出現在組合框外
你應該更具體的...你說的是哪種技術? WPF,Windows窗體,ASP.NET? – 2009-07-03 19:07:04