En Visual C# Express Edition, ¿es posible hacer que algunos (pero no todos) elementos en un cuadro de lista en negrita? No puedo encontrar ningún tipo de opción para esto en la API.¿Cómo puedo hacer que algunos elementos en un ListBox sean negritas?
Respuesta
Debe cambiar el DrawMode de listbox a DrawMode.OwnerDrawFixed. Echa un vistazo a estos artículos en MSDN:
DrawMode Enumeration
ListBox.DrawItem Event
Graphics.DrawString Method
también un vistazo a esta pregunta en los foros de MSDN:
Question on ListBox items
Un ejemplo sencillo (ambos artículos - Negro-Arial-10-Bold):
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ListBox1.Items.AddRange(new Object[] { "First Item", "Second Item"});
ListBox1.DrawMode = DrawMode.OwnerDrawFixed;
}
private void ListBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.Graphics.DrawString(ListBox1.Items[e.Index].ToString(), new Font("Arial", 10, FontStyle.Bold), Brushes.Black, e.Bounds);
e.DrawFocusRectangle();
}
}
Gran ejemplo y enlaces. ¡Ojalá pudiera votar esto dos veces! –
A continuación se muestra el código que demuestra lo mismo.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
foreach (FontFamily fam in FontFamily.Families)
{
listBox1.Items.Add(fam.Name);
}
listBox1.DrawMode = DrawMode.OwnerDrawFixed; // 属性里设置
}
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), new Font(listBox1.Items[e.Index].ToString(), listBox1.Font.Size), Brushes.Black, e.Bounds);
//e.DrawFocusRectangle();
}
}
}
Para añadir a la solución de Mindaugas Mozūras, que tenía un problema donde mi e.Bounds
no era lo suficientemente grande y el texto se queden cortadas. Para resolver este problema (gracias a una publicación here), anula el evento OnMeasureItem
y cambia su DrawMode a DrawMode.OwnerDrawVariable
.
En diseñador:
listBox.DrawMode = DrawMode.OwnerDrawVariable;
En manejador:
void listBox_MeasureItem(object sender, MeasureItemEventArgs e)
{
e.ItemHeight = 18;
}
solucionado mis problemas de tener la altura cortó texto.
Solo agregué para decir que no tenía este problema en mi computadora de desarrollo, pero lo obtuve cuando lo enviaba a un servidor de terminal. Por lo tanto, recomiendo aplicar esto a su código para mayor seguridad. – Jonas
Un ejemplo más genérico que utiliza remitente y respeta el color de primer plano (si el elemento está seleccionado, por ejemplo, o el usuario usa otro conjunto de colores, donde el color de primer plano no es realmente legible) y la fuente ListBox actual:
private void listBoxDrawItem (object sender, DrawItemEventArgs e)
{
Font f = e.Font;
if (e.Index == 1) //TODO: Your condition to make text bold
f = new Font(e.Font, FontStyle.Bold);
e.DrawBackground();
e.Graphics.DrawString(((ListBox)(sender)).Items[e.Index].ToString(), f, new SolidBrush(e.ForeColor), e.Bounds);
e.DrawFocusRectangle();
}
Debe tener DrawMode establecido en OwnerDrawFixed (por ejemplo, en el diseñador).
hace el artículo seleccionado en negrita
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ListBox1.Items.AddRange(new Object[] { "me", "myself", "bob"});
// set the draw mode to fixed
ListBox1.DrawMode = DrawMode.OwnerDrawFixed;
}
private void ListBox1_DrawItem(object sender, DrawItemEventArgs e)
{
// draw the background
e.DrawBackground();
// get the font
Font font = new Font(e.Font, (e.State & DrawItemState.Selected) == DrawItemState.Selected ? FontStyle.Bold : FontStyle.Regular);
// draw the text
e.Graphics.DrawString(ListBox1.Items[e.Index].ToString(), font, new SolidBrush(ListBox1.ForeColor), e.Bounds);
e.DrawFocusRectangle();
}
}
- 1. ¿Cómo puedo hacer que los elementos HTML no sean resaltables?
- 2. ¿Cómo hacer que algunos filtros sean obligatorios en tastypie?
- 3. hacer elementos Listbox en WPF no seleccionables
- 4. Justificación de hacer que algunos operadores sean miembros
- 5. ¿Cómo puedo hacer que las texturas sean transparentes en OpenGL?
- 6. ¿Cómo hacer datatemplate para los elementos en listbox?
- 7. ¿Cómo puedo hacer que los enlaces sean blancos?
- 8. Esquema XML: ¿Puedo hacer que algunos de los valores de un atributo sean necesarios pero aún así permitir otros valores?
- 9. ¿Cómo hacer que las propiedades sean privadas?
- 10. Cómo hacer que un control DropDownList muestre algunos elementos en negrita ASP.NET
- 11. ¿Cómo puedo permitir que el usuario edite elementos en un ListBox?
- 12. ¿Cómo eliminar múltiples elementos seleccionados en ListBox?
- 13. ¿Cómo hacer que mis aplicaciones sean "personalizables"?
- 14. Hacer que los elementos de ListBox tengan un valor diferente que el texto del elemento
- 15. WPF ListBox que establece sus elementos horizontalmente
- 16. Impedir que se agreguen elementos duplicados a un ListBox
- 17. ¿Cómo puedo hacer que un ListBoxItem se alargue verticalmente
- 18. elementos largos ListBox indica
- 19. Shoulda + FactoryGirl: ¿Puedo hacer que mis pruebas sean más rápidas?
- 20. ¿Cómo puedo hacer que ciertas partes de mi html no sean seleccionables?
- 21. listbox; número de elementos seleccionados
- 22. ¿Cómo puedo hacer que las propiedades de los archivos de propiedades sean obligatorias en Spring?
- 23. ¿Cómo hacer que las páginas php/html sean seguras/https?
- 24. Java xstream - ¿Cómo hacer caso omiso de algunos elementos
- 25. ¿Cómo puedo encontrar caracteres que no sean ASCII en MySQL?
- 26. ¿Cómo puedo hacer que las etiquetas xtick de un diagrama sean dibujos simples usando matplotlib?
- 27. ¿Cómo hacer que los parámetros sean obligatorios en PowerShell?
- 28. ¿Eliminar elementos de ListBox en WPF?
- 29. Evite que WPF ListView o ListBox muestren elementos "medios"
- 30. ¿Cómo puedo hacer que las devoluciones de eventos en mis formularios de win sean seguras?
¿Está usted en WPF? En ese caso, es mucho más fácil – Gishu
Lo siento, soy un poco novato .NET, ni siquiera estoy seguro de qué es WPF. –