每当将RichTextBox.Enabled
属性设置为false时,它的背景颜色会自动设置为灰色,因为它被设置为在控制面板中设置的系统颜色的颜色。即使将其设置为禁用,我如何将其颜色更改为黑色?如何在禁用时更改富文本框的背景颜色?
回答
参见:How to change the font color of a disabled TextBox?
[编辑 - 添加的代码示例]
richTextBox.TabStop = false;
richTextBox.ReadOnly = true;
richTextBox.BackColor = Color.DimGray;
richTextBox.Cursor = Cursors.Arrow;
richTextBox.Enter += richTextBox_Enter;
private void richTextBox_Enter(object sender, EventArgs e)
{
// you need to set the focus somewhere else. Eg a label.
SomeOtherControl.Focus();
}
或连接扩展方法(我意识到你没有把它放在只读因为Enter事件捕获任何输入):
public static class MyExtensions
{
public static void Disable(this Control control, Control focusTarget)
{
control.TabStop = false;
control.BackColor = Color.DimGray;
control.Cursor = Cursors.Arrow;
control.Enter += delegate { focusTarget.Focus(); };
}
}
看看DrawStringDisabled Method。您将不得不重写OnPaint方法,然后使用DrawStringDisabled方法。但是,如果我在你的地方,那么我会用Mikael Svenson's回答。
创建如下的自定义Richtextbox 这将生成一个带有透明Backcolor的Richtextbox。 然后,您可以将此控件放置在适当颜色的面板上。
Public Class MyRichTextBox
Inherits RichTextBox
<DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _
Shared Function LoadLibrary(ByVal lpFileName As String) As IntPtr
End Function
Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim prams As CreateParams = MyBase.CreateParams
If LoadLibrary("msftedit.dll") <> IntPtr.Zero Then
prams.ExStyle = prams.ExStyle Or &H20 'Makes Transparent
prams.ClassName = "RICHEDIT50W"
End If
Return prams
End Get
End Property
其晚,但它不是一个坏的方式,
private void richTextBox1_ReadOnlyChanged(object sender, EventArgs e)
{
//just here instead of White select your color
richTextBox1.BackColor = Color.White;
}
private void Form1_Load(object sender, EventArgs e)
{
richTextBox1.ReadOnly = true;
}
的背景色属性设置为你想要的颜色,然后设置RichTextBox的只读到。
例:
richTextBox.BackColor = Color.White;
richTextBox.ReadOnly = true;
不完全相同,readonly仍然允许选择,滚动等。 – 2013-03-13 21:18:50
+1因为在我的情况下,当ShowSelectionMargin设置为True时,启用/禁用行为显得不可靠。 – 2014-01-25 23:02:34
我只是发现这样做的一个很好的方式。它应该与任何控制工作:
public class DisabledRichTextBox : System.Windows.Forms.RichTextBox
{
// See: http://wiki.winehq.org/List_Of_Windows_Messages
private const int WM_SETFOCUS = 0x07;
private const int WM_ENABLE = 0x0A;
private const int WM_SETCURSOR = 0x20;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (!(m.Msg == WM_SETFOCUS || m.Msg == WM_ENABLE || m.Msg == WM_SETCURSOR))
base.WndProc(ref m);
}
}
您可以安全地设置启用=真,只读=假,它会像一个标签,防止焦点,用户输入,光标变化,而不会真正关闭。
看看它是否适合你。 问候
- 1. 更改文本框的背景颜色
- 2. 更改文本框的背景颜色
- 3. 如何在onfocus时更改文本框的背景颜色?
- 4. 更改此文本框的文本更改时文本框的背景颜色?
- 5. 如何设置富文本框的背景颜色?
- 6. 禁用时,可以更改asp.net文本框的背景颜色吗?
- 7. 在C中单击文本框时更改背景颜色#
- 8. 如何通过JavaScript更改文本框的背景颜色?
- 9. 如何更改getFocus上的文本框背景颜色
- 10. 更改禁用文本框的颜色
- 11. 当文本框焦点时更改容器的背景颜色
- 12. 更改背景颜色更改边框
- 13. 文本视图,更改背景颜色
- 14. 更改文本颜色或背景
- 15. 在etherpad中更改颜色代替文本的背景颜色
- 16. 如果背景渐变,如何将边框颜色更改为背景颜色?
- 17. WPF在禁用窗口时更改按钮的背景颜色
- 18. 如何更改Notepad ++背景颜色以更改文本行?
- 19. 如何改变文本框的禁用背景色WPF
- 20. 使用JavaScript更改文本框背景颜色使用JavaScript
- 21. 如何在发生错误时更改文本框背景颜色?
- 22. jQuery在更改时动态更改颜色/背景颜色
- 23. 使用jquery将文本颜色更改为背景颜色
- 24. 更改列表框的背景颜色
- 25. 如何在ReadOnly文本框中更改背景/前景色?
- 26. C#更改gridview上的文本框的背景颜色
- 27. 更改文本框的自动完成DropDownList的背景颜色
- 28. 根据输入的值更改文本框的背景颜色
- 29. 在悬停时更改背景颜色
- 30. 在运行时更改背景颜色
它不是我要求的东西! – Badr 2009-12-22 13:26:49
@moon:是的。 – 2009-12-22 13:47:12
@moon:是的,您必须将控件设置为只读,并手动设置颜色而不是禁用它。禁用控件将使用操作系统设置来呈现它。 – 2009-12-22 17:15:20