Hoe verander ik de letterkleur van een uitgeschakelde TextBox?

Weet iemand welke eigenschap de tekstkleur instelt voor uitgeschakelde controle?
Ik moet wat tekst weergeven in een uitgeschakelde TextBoxen ik wil de kleur op zwart zetten.


Antwoord 1, autoriteit 100%

OPMERKING:zie het antwoord van Cheetah hieronder omdat het een voorwaarde identificeert om deze oplossing te laten werken. De BackColorvan de TextBoxinstellen.


Ik denk dat je echt de TextBoxwilt inschakelen en de eigenschap ReadOnlyop truewilt zetten.

Het is een beetje lastig om de kleur van de tekst in een uitgeschakelde TextBoxte wijzigen. Ik denk dat je waarschijnlijk de gebeurtenis OnPaintmoet subclasseren en overschrijven.

ReadOnlyzou u echter hetzelfde resultaat moeten geven als !Enableden u in staat stellen controle te houden over de kleur en opmaak van de TextBox. Ik denk dat het ook nog steeds ondersteuning biedt voor het selecteren en kopiëren van tekst uit de TextBox, wat niet mogelijk is met een uitgeschakelde TextBox.

Een ander eenvoudig alternatief is om een ​​Labelte gebruiken in plaats van een TextBox.


Antwoord 2, autoriteit 87%

Bovendien moet u, om ervoor te zorgen dat ForeColor wordt uitgevoerd op een TextBox die is gemarkeerd met ReadOnly, expliciet de BackColor instellen. Als je wilt dat het nog steeds de standaard BackColor gebruikt, moet je de set expliciet maken, want de ontwerper is hier te slim voor zijn eigen bestwil. Het is voldoende om de BackColor op de huidige waarde in te stellen. Ik doe dit in de Load-gebeurtenis voor het formulier, zoals:

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

Antwoord 3, autoriteit 9%

Ik heb zojuist een geweldige manier gevonden om dat te doen. In mijn voorbeeld gebruik ik een RichTextBox, maar het zou moeten werken met elk besturingselement:

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

Je kunt Enabled = true en ReadOnly = false veilig instellen, en het zal zich gedragen als een label dat focus, gebruikersinvoer, cursorverandering verhindert, zonder dat het daadwerkelijk wordt uitgeschakeld.

Kijk of het voor jou werkt.
Groeten


Antwoord 4, autoriteit 7%

hi
stel het alleen-lezen attribuut in op true vanaf de codekant of runtime niet vanaf de ontwerptijd

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

Antwoord 5, autoriteit 3%

Je kunt dit proberen.
Overschrijf de OnPaint-gebeurtenis van de TextBox.

   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
}

zet de ControlStyles op “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
}

Referentie

Of je kunt deze hack proberen

Stel in Gebeurtenis invoeren de focus

int index=this.Controls.IndexOf(this.textBox1);
this.Controls[index-1].Focus();

Dus je besturing is niet gefocust en gedraagt ​​​​zich als uitgeschakeld.


Antwoord 6

Naast het antwoord van @spoon16 en @Cheetah, stel ik de eigenschap tabstopaltijd in op False in het tekstvak om te voorkomen dat de tekst standaard wordt geselecteerd.

U kunt ook zoiets als dit doen:

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

of

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

Antwoord 7

Gewoon inschakelen wijzigen en instellen op de gewenste kleur

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

Antwoord 8

Als u tekst wilt weergeven die niet kan worden bewerkt of geselecteerd, kunt u eenvoudig een label gebruiken


Antwoord 9

Het instellen van ‘Alleen lezen’ als ‘True’ is de gemakkelijkste methode.

Other episodes