是否可以使用C#格式化ComboBox項目?例如,我如何使項目變爲粗體,改變文本的顏色等?更改ComboBox項目的格式
10
A
回答
7
您可以通過設置DrawMode到OwnerDrawFixed
它允許你手動繪製使用DrawItem事件的項目做到這一點。
comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
comboBox1.DrawItem += new DrawItemEventHandler(comboBox1_DrawItem);
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) {
Font font = comboBox1.Font;
Brush brush = Brushes.Black;
string text = comboBox1.Items[e.Index];
if (you want bold)
font = new Font(font, FontStyle.Bold);
if (you want green)
brush = Brushes.Green;
e.Graphics.DrawString(text, font, brush, e.Bounds);
}
0
是的,但與自定義繪製創建自己的組合框 See here on MSDN
0
不,沒有內置的屬性來做到這一點。您必須構建自己的控件並覆蓋渲染。
11
就像這篇文章一樣,我發現它有用作爲搜索的起點,但使用@Paul顯示的方法here有更好的結果。
這裏是我用來有條件地使組合框中的項目顯示爲粗體的代碼,我發現對於此問題標記正確的答案具有奇怪的行爲 - 當您將鼠標懸停在項目上時會稍微大膽,如果它正在重繪。該代碼產生一個更自然的外觀:
private void ComboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index == -1)
return;
ComboBox combo = ((ComboBox)sender);
using (SolidBrush brush = new SolidBrush(e.ForeColor))
{
Font font = e.Font;
if (/*Condition Specifying That Text Must Be Bold*/)
font = new System.Drawing.Font(font, FontStyle.Bold);
e.DrawBackground();
e.Graphics.DrawString(combo.Items[e.Index].ToString(), font, brush, e.Bounds);
e.DrawFocusRectangle();
}
}
2
只需添加到丹提供的答案,不要忘了,如果你已經綁定列表到數據源,而不是僅僅具有簡單的字符串組合框,您將無法使用combo.Items[e.Index].ToString()
重新繪製條目。
例如,如果您已將ComboBox綁定到DataTable,並嘗試使用Dan的答案中的代碼,那麼您最終將得到一個包含System.Data.DataRowView
的ComboBox,因爲列表中的每個項目都不是字符串,它是一個DataRowView。
在這種情況下,代碼將是類似以下內容:
private void ComboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index == -1)
return;
ComboBox combo = ((ComboBox)sender);
using (SolidBrush brush = new SolidBrush(e.ForeColor))
{
Font font = e.Font;
DataRowView item = (DataRowView)combo.Items[e.Index];
if (/*Condition Specifying That Text Must Be Bold*/) {
font = new System.Drawing.Font(font, FontStyle.Bold);
}
else {
font = new System.Drawing.Font(font, FontStyle.Regular);
}
e.DrawBackground();
e.Graphics.DrawString(item.Row.Field<String>("DisplayMember"), font, brush, e.Bounds);
e.DrawFocusRectangle();
}
}
哪裏"DisplayMember"
是要顯示在列表中(在ComboBox1.DisplayMember
屬性設置)的字段的名稱。
相關問題
- 1. 如何更改ComboBox項目的文本?
- 2. Combobox:更改項目名稱,保留值
- 3. Combobox項目樣式
- 4. 更改動態組合框中ComboBox項目的文本樣式
- 5. 改變ComboBox中選定的項目
- 6. Combobox - 更新並選擇新項目後,itemssource更改
- 7. 如何更改Kendo Combobox的css風格
- 8. JavaFX/CSS:更改ComboBox所選項目的文本顏色
- 9. 更改combobox中第一個滾動中可見的項目數
- 10. ComboBox格式化
- 11. 從Combobox中刪除項目而未觸發更改事件
- 12. 在Combobox中選擇項目後更改文本值
- 13. ComboBox中選定項目沒有更新
- 14. Combobox顯示項目
- 15. 如何更改VSTO項目中Excel的格式?
- 16. 雙擊更改項目樣式的JList
- 17. HTML:更好的關鍵項目格式
- 18. 更改項目
- 19. 更改項目
- 20. Extjs ComboBox - 更改CSS?
- 21. 基於ComboBox值更改公式內容
- 22. 檢測其他類ComboBox更改形式
- 23. ComboBox中的只讀項目
- 24. 更改COMBOBOX的高度
- 25. JavaFX更新ComboBox項目列表以禁用基於可更改輸入的一些項目
- 26. 將嵌套列表項目更改爲整數格式
- 27. 更改格式
- 28. 更改格式
- 29. 更改格式
- 30. 更改格式