常用屬性速查
| 屬性 | 功能 | 建議值 |
AllowFullOpen | 允許使用者點擊「自訂顏色」展開面板 | true |
FullOpen | 啟動時直接展開自訂面板 | false(視需求) |
AnyColor | 允許選擇非調色盤顏色 | true |
SolidColorOnly | 僅顯示純色,隱藏漸層/系統色 | false |
ShowHelp | 顯示說明按鈕 | true |
Color | 預設/回傳選取顏色 | 綁定 RichTextBox.SelectionColor |
CustomColors | 自訂顏色陣列(int[],Win32 COLORREF 格式) | 持久化使用者偏好 |
基礎範例:套用至 RichTextBox 選取文字
private void btnColor_Click(object sender, EventArgs e)
{
using (var dlg = new ColorDialog())
{
dlg.Color = richTextBox.SelectionColor;
dlg.AllowFullOpen = true;
dlg.AnyColor = true;
dlg.ShowHelp = true;
if (dlg.ShowDialog() == DialogResult.OK)
richTextBox.SelectionColor = dlg.Color;
}
}
進階:持久化自訂顏色
// 設定檔儲存 int[] (Properties.Settings.Default.CustomColors)
private void btnColor_Click(object sender, EventArgs e)
{
using (var dlg = new ColorDialog())
{
dlg.Color = richTextBox.SelectionColor;
dlg.CustomColors = Properties.Settings.Default.CustomColors ?? new int[16];
dlg.AllowFullOpen = true;
if (dlg.ShowDialog() == DialogResult.OK)
{
richTextBox.SelectionColor = dlg.Color;
Properties.Settings.Default.CustomColors = dlg.CustomColors;
Properties.Settings.Default.Save();
}
}
}
WPF 專案呼叫 WinForms ColorDialog
// 參考 System.Windows.Forms, System.Drawing
using System.Windows.Forms;
var dlg = new ColorDialog { Color = (System.Drawing.Color)ColorConverter.ConvertFromString("#FF0000") };
if (dlg.ShowDialog() == DialogResult.OK)
{
var wpfColor = System.Windows.Media.Color.FromArgb(dlg.Color.A, dlg.Color.R, dlg.Color.G, dlg.Color.B);
// 使用 wpfColor...
}
常見問題
- ColorDialog 為 Modal:會阻塞呼叫執行緒,UI 執行緒上呼叫安全。
- CustomColors 長度固定 16:陣列長度不足會拋例外,初始化時請
new int[16]。
- 顏色格式:WinForms
Color 為 ARGB(Color.ToArgb()),WPF Color 為 ScRGB,互轉需注意 Alpha 通道。