development

비활성화 된 TextBox의 글꼴 색상을 변경하는 방법은 무엇입니까?

big-blog 2020. 12. 11. 19:06
반응형

비활성화 된 TextBox의 글꼴 색상을 변경하는 방법은 무엇입니까?


비활성화 된 컨트롤의 텍스트 색상을 설정하는 속성을 아는 사람이 있습니까? 비활성화 된 텍스트를 표시해야 TextBox하고 색상을 검정색으로 설정하고 싶습니다.


참고 : 이 솔루션이 작동하기위한 전제 조건을 식별하므로 아래 Cheetah의 답변을 참조하십시오. 설정 BackColor의를 TextBox.


나는 당신이 정말로하고 싶은 것은을 활성화 TextBox하고 ReadOnly속성을 true.

disabled에서 텍스트의 색상을 변경하는 것은 약간 까다 롭습니다 TextBox. 아마도 OnPaint이벤트 를 하위 클래스로 만들고 재정의해야 할 것 같습니다 .

ReadOnly그래도 동일한 결과를 제공 !Enabled하고 .NET Framework의 색상과 서식을 제어 할 수 있습니다 TextBox. 나는 그것은 또한 TextBox장애인으로 불가능한 텍스트 선택 및 복사를 지원할 것이라고 생각합니다 TextBox.

또 다른 간단한 대안은 사용하는 것입니다 Label대신을 TextBox.


또한 ReadOnly로 표시된 TextBox에서 ForeColor를 준수하려면 BackColor를 명시 적으로 설정해야합니다. 기본 BackColor를 계속 사용하려면 디자이너가 여기에서 자신의 이익을 위해 너무 똑똑하기 때문에 세트를 명시 적으로 만들어야합니다. BackColor를 현재 값으로 설정하는 것으로 충분합니다. 다음과 같이 양식의 Load 이벤트에서이 작업을 수행합니다.

private void FormFoo_Load(...) {
    txtFoo.BackColor = txtFoo.BackColor;
}

안녕하세요 디자인 타임이 아닌 코드 측 또는 런타임에서 readonly 속성을 true로 설정하십시오.

txtFingerPrints.BackColor = System.Drawing.SystemColors.Info;
txtFingerPrints.ReadOnly = true;

나는 그것을하는 좋은 방법을 방금 찾았습니다. 내 예에서는 RichTextBox를 사용하고 있지만 모든 컨트롤과 함께 작동해야합니다.

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);
    }
}

Enabled = true 및 ReadOnly = false로 안전하게 설정할 수 있으며 레이블처럼 작동하여 실제로 비활성화되지 않고 포커스, 사용자 입력, 커서 변경을 방지합니다.

그것이 당신을 위해 작동하는지 확인하십시오. 인사말


이것을 시도 할 수 있습니다. TextBox의 OnPaint 이벤트를 재정의합니다.

    protected override void OnPaint(PaintEventArgs e)
{
     SolidBrush drawBrush = new SolidBrush(ForeColor); //Use the ForeColor property
     // Draw string to screen.
     e.Graphics.DrawString(Text, Font, drawBrush, 0f,0f); //Use the Font property
}

ControlStyles를 "UserPaint"로 설정합니다.

public MyTextBox()//constructor
{
     // This call is required by the Windows.Forms Form Designer.
     this.SetStyle(ControlStyles.UserPaint,true);

     InitializeComponent();

     // TODO: Add any initialization after the InitForm call
}

굴절

또는이 해킹을 시도 할 수 있습니다.

Enter 이벤트에서 포커스를 설정합니다.

int index=this.Controls.IndexOf(this.textBox1);

this.Controls[index-1].Focus();

따라서 컨트롤이 집중되지 않고 비활성화 된 것처럼 작동합니다.


변경된 활성화를 처리하고 필요한 색상으로 설정하십시오.

private void TextBoxName_EnabledChanged(System.Object sender, System.EventArgs e)
{
    ((TextBox)sender).ForeColor = Color.Black;
}

편집하거나 선택할 수없는 텍스트를 표시하려면 레이블을 사용하면됩니다.


In addition to the answer by @spoon16 and @Cheetah, I always set the tabstop property to False on the textbox to prevent the text from being selected by default.

Alternatively, you can also do something like this:

private void FormFoo_Load(...) {
    txtFoo.Select(0, 0);
}

or

private void FormFoo_Load(...) {
    txtFoo.SelectionLength = 0;
}

Setting the 'Read Only' as 'True' is the easiest method.

참고URL : https://stackoverflow.com/questions/276179/how-to-change-the-font-color-of-a-disabled-textbox

반응형