Combobox 将自定义控件添加到组合框
大家好 我创建了一个自定义用户控件,并希望将此自定义控件放置在组合框中。 我正在使用以下代码:Combobox 将自定义控件添加到组合框,combobox,controls,Combobox,Controls,大家好 我创建了一个自定义用户控件,并希望将此自定义控件放置在组合框中。 我正在使用以下代码: public class UserControlComboBox : ComboBox, IMessageFilter { public readonly NimaDatePickerUC.MiladiNimaDatePickerUC UserControl = new NimaDatePickerUC.MiladiNimaDatePickerUC(); protected over
public class UserControlComboBox : ComboBox, IMessageFilter
{
public readonly NimaDatePickerUC.MiladiNimaDatePickerUC UserControl = new NimaDatePickerUC.MiladiNimaDatePickerUC();
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.Parent.Controls[0].BringToFront();
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);
}
}
公共类UserControlComboBox:ComboBox,IMessageFilter
{
public readonly NimaDatePickerUC.MiladiNimaDatePickerUC UserControl=新的NimaDatePickerUC.MiladiNimaDatePickerUC();
受保护的覆盖无效WndProc(参考消息m)
{
如果((m.Msg==0x0201)| |(m.Msg==0x0203))
{
如果(下拉)
HideUserControl();
其他的
ShowUserControl();
}
其他的
{
基准WndProc(参考m);
}
}
公共bool预过滤器消息(参考消息m)
{
//拦截鼠标事件
如果((m.Msg>=0x0200)&&(m.Msg这似乎很直观,但您是否尝试过
[controlname].BringToFront();
还发现这是针对.NET 3.5的控件吗?您可能想查看如何使控件处于顶级。看起来这就是您要做的。