Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как можно оформить ComboBox для отображение заданий в WindowsForms С#?

Gg Ученик (12), на голосовании 3 месяца назад
Привет! У меня есть приложение где на форме у меня есть combobox и при открытие я выбираю задания от 1 до 4 и далее в DataGrid выводятся данные по этим таблицам. Но как можно сделать так что бы в ComboBox были именно текст заданий, но в ComboBox из засунуть будет тупо т.к текст заданий могут быть большие. Как можно по другому это сделать?
Голосование за лучший ответ
Татьяна Просветленный (36197) 4 месяца назад
Для отображения заданий с большим объемом текста в ComboBox в Windows Forms можно использовать несколько подходов:

1. Использование DataGridView для выбора задания
Вместо использования ComboBox, вы можете использовать DataGridView для отображения списка заданий. DataGridView позволяет легко отображать длинные строки текста и обеспечивает больше возможностей для форматирования.

2. ToolTip для отображения полного текста
Если вам нужно использовать ComboBox, можно настроить ToolTip для отображения полного текста задания при наведении курсора на элемент ComboBox.
 using System; 
using System.Collections.Generic;
using System.Windows.Forms;

public class MainForm : Form
{
private ComboBox comboBox1;
private ToolTip toolTip1;
private Dictionary tasks;

public MainForm()
{
InitializeComponent();

tasks = new Dictionary
{
{"Task 1", "Описание задания 1..."},
{"Task 2", "Описание задания 2..."},
{"Task 3", "Описание задания 3..."},
{"Task 4", "Описание задания 4..."}
};

comboBox1.DataSource = new BindingSource(tasks, null);
comboBox1.DisplayMember = "Key";
comboBox1.ValueMember = "Value";
comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
comboBox1.DrawItem += comboBox1_DrawItem;

comboBox1.MouseMove += new MouseEventHandler(comboBox1_MouseMove);
}

private void InitializeComponent()
{
this.comboBox1 = new ComboBox();
this.toolTip1 = new ToolTip();
this.SuspendLayout();

this.comboBox1.FormattingEnabled = true;
this.comboBox1.Location = new System.Drawing.Point(12, 12);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(260, 21);
this.comboBox1.TabIndex = 0;

this.ClientSize = new System.Drawing.Size(284, 61);
this.Controls.Add(this.comboBox1);
this.Name = "MainForm";
this.Text = "Task Selector";
this.ResumeLayout(false);
}

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index < 0) return;

string text = ((KeyValuePair)comboBox1.Items[e.Index]).Key;
e.DrawBackground();
e.Graphics.DrawString(text, e.Font, System.Drawing.Brushes.Black, e.Bounds);
e.DrawFocusRectangle();
}

private void comboBox1_MouseMove(object sender, MouseEventArgs e)
{
int index = comboBox1.IndexFromPoint(e.Location);
if (index >= 0 && index < comboBox1.Items.Count)
{
string text = ((KeyValuePair)comboBox1.Items[index]).Value;
toolTip1.SetToolTip(comboBox1, text);
}
}
}

[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
3. ListBox в отдельном окне
Вы можете использовать отдельное окно или панель с ListBox для отображения длинных описаний заданий. При выборе элемента в ListBox можно обновить DataGridView на основной форме.

4. Использование DropDownList с текстовыми ячейками фиксированной высоты
Также можно использовать DropDownList с фиксированной высотой текстовых ячеек, где весь текст будет виден при выборе элемента. Это может потребовать ручного рисования элементов, чтобы настроить их внешний вид.
Похожие вопросы