Можем ли мы разместить элементы управления C# textBox в выпадающем списке C#?C# - .net элементы управления как элементы ComboBox
То есть, когда комбо опускается, каждый из его элементов отобразит текстовое поле.
Можем ли мы разместить элементы управления C# textBox в выпадающем списке C#?C# - .net элементы управления как элементы ComboBox
То есть, когда комбо опускается, каждый из его элементов отобразит текстовое поле.
В формах окон это не совсем возможно, но вы можете перехватить сообщение окна, которое вызывает выпадающее поле со списком, и вместо этого отображает панель или форму.
В качестве места для начала:
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);
}
}
Ничего себе, подробная информация о том, как сделать WinForms ComboBox с настраиваемым выпадающим списком. Большое спасибо за ваш отзыв! –
Не в Windows Forms, но в WPF вы можете положить что-нибудь в ComboBox ...
Да, если вы используете 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 Forms выпадающий может быть хлопот.
Это потрясающе! –
<3 WPF, что делать в WinForms –
Возможно, я укажу очевидное, но с Silverlight.
Если вы говорите об ASP.NET, тогда ответ будет «Нет», если вы используете стандартные элементы управления ASP.NET. Однако, если вы создаете элемент управления ComboBox с помощью HTML/JavaScript, тогда да, вы можете.
Я считаю, что JMSA говорит о Windows Forms.
Я не эксперт .NET, но вы могли бы создать собственный собственный блок OwnerDrawn. Существуют такие методы, как OnDrawItem() и MeasureItem(), которые имеют ListBoxs и другие элементы управления хранением элементов; которые можно переоценить, и вы можете иметь полный контроль.
CheckBoxRenderer и т. Д. - это классы, которые можно найти в Интернете, которые принимают графический объект и могут рисовать окна.
Это, конечно, очень длительный процесс: я бы рекомендовал искать более простой способ выполнить вашу задачу. У меня тоже иногда у меня сумасшедший клиент, который хочет роскошные суперболочки, ну ... возьмите вызов!
Вы должны быть более конкретными ... какие технологии вы говорите? WPF, Windows Forms, ASP.NET? –