Trong Visual C# Express Edition, có thể làm cho một số (nhưng không phải tất cả) các mục trong một ListBox đậm? Tôi không thể tìm thấy bất kỳ loại tùy chọn nào cho điều này trong API.Làm cách nào để tôi có thể tạo một số mục trong một ListBox đậm?
Trả lời
Bạn cần thay đổi DrawMode của ListBox thành DrawMode.OwnerDrawFixed. Hãy kiểm tra những bài viết này trên MSDN:
DrawMode Enumeration
ListBox.DrawItem Event
Graphics.DrawString Method
Ngoài ra nhìn vào câu hỏi này trên các diễn đàn MSDN:
Question on ListBox items
Một ví dụ đơn giản (cả mặt hàng - Black-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();
}
}
Ví dụ và liên kết tuyệt vời. Ước gì tôi có thể bỏ phiếu này hai lần! –
Sau đây là mã chứng minh tương tự.
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();
}
}
}
Bổ sung vào giải pháp Mindaugas Mozūras, tôi có một vấn đề mà e.Bounds
của tôi không đủ lớn và văn bản đã bị cắt đứt. Để giải quyết vấn đề này (nhờ một bài đăng here), bạn ghi đè sự kiện OnMeasureItem
và thay đổi DrawMode thành DrawMode.OwnerDrawVariable
.
Trong nhà thiết kế:
listBox.DrawMode = DrawMode.OwnerDrawVariable;
Trong handler:
void listBox_MeasureItem(object sender, MeasureItemEventArgs e)
{
e.ItemHeight = 18;
}
Giải Quyết vấn đề của tôi có chiều cao cắt đứt văn bản.
Chỉ cần thêm vào để nói rằng tôi đã không có vấn đề này trên máy tính phát triển của tôi, nhưng chúng tôi đã nhận được nó khi vận chuyển đến một máy chủ đầu cuối. Vì vậy, tôi khuyên bạn nên áp dụng mã này cho mã của bạn để đảm bảo an toàn. – Jonas
Ví dụ chung hơn sử dụng người gửi và thực sự tôn trọng màu nền trước (nếu mục được chọn, ví dụ hoặc người dùng sử dụng một số bộ màu khác, nơi màu nền trước màu đen không thực sự đọc được) và phông chữ ListBox hiện tại:
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();
}
Bạn cần phải có DrawMode được đặt thành OwnerDrawFixed (ví dụ: trong trình thiết kế).
Make mục đã chọn đậm
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. Làm thế nào tôi có thể cho một phong cách đậm trong android?
- 2. Làm thế nào tôi có thể thêm một mục bổ sung vào một ListBox WPF bằng cách sử dụng ItemSource?
- 3. WPF: làm thế nào để tôi xử lý một nhấp chuột vào một mục ListBox?
- 4. Tôi làm cách nào để in đậm và gạch dưới một chuỗi động trong mã Android?
- 5. Làm thế nào bạn có thể in đậm một từ trong một nhãn UILabel?
- 6. Làm thế nào tôi có thể tạo một nhóm các mục menu radio trong WPF?
- 7. Làm cách nào để tôi làm cho ListBox làm mới văn bản mục của nó?
- 8. Làm cách nào để tôi có thể đóng gói một số trang trí thành một?
- 9. Làm cách nào để tôi có thể chọn một picturebox?
- 10. Làm cách nào để dữ liệu có thể gắn một danh sách các chuỗi vào một ListBox trong WPF/WP7?
- 11. Làm cách nào để xóa tất cả các mục ListBox?
- 12. Màu nền của một mục ListBox (winforms)
- 13. Trong JavaScript, làm thế nào tôi có thể tạo một hàm với tham số tùy chọn?
- 14. Làm cách nào để tạo một lớp trong C# mà tôi có thể khởi tạo giống như một chuỗi?
- 15. Làm cách nào để biết khi nào một ListBox đã hoàn tất hiển thị trong Silverlight?
- 16. Tôi làm cách nào để tạo một cái lọ có thể phân phối cho javadocs?
- 17. PHPExcel - Cách tạo một phần của văn bản đậm
- 18. Làm cách nào để kiểm tra xem một ListView của tôi có số lượng mục có thể cuộn không?
- 19. TeamCity - Làm cách nào tôi có thể tạo tham số cho bản dựng để không chạy một trong các bước?
- 20. Làm cách nào để tạo một ListBoxItem theo chiều dọc
- 21. Làm thế nào tôi có thể tự động tạo (và xóa) một thư mục tạm thời trong một Makefile?
- 22. Làm thế nào tôi có thể sử dụng một NSArray như một hằng số toàn cầu?
- 23. Làm cách nào để tôi có thể tạo một nhóm hộp kiểm loại trừ lẫn nhau?
- 24. Làm thế nào để làm cho một số văn bản in đậm trong một hộp văn bản giàu C#
- 25. Làm cách nào để tạo một biến số biến?
- 26. Làm thế nào tôi có thể đúc một số nguyên với một id trong iOS
- 27. Làm cách nào tôi có thể truy xuất hiệu quả số lượng tệp trong một thư mục?
- 28. Làm cách nào để tạo các mục trong một ListView có màu khác?
- 29. PHPWord in đậm một số từ trên một dòng
- 30. Làm thế nào để thực hiện điều khiển DropDownList hiển thị một số mục in đậm ASP.NET
Bạn có trên WPF? Trong trường hợp đó, nó dễ dàng hơn nhiều – Gishu
Tôi xin lỗi tôi là một chút của một newbie NET., Tôi thậm chí không chắc chắn những gì WPF được. –