Est-ce que quelqu'un sait quelle propriété définit la couleur du texte pour le contrôle désactivé? Je dois afficher du texte dans une variable TextBox
désactivée et je souhaite définir sa couleur sur le noir.
REMARQUE: voir la réponse de Cheetah ci-dessous, car elle identifie un préalable pour que cette solution fonctionne. Définition de la BackColor
de la TextBox
.
Je pense que ce que vous voulez vraiment faire est d’activer la variable TextBox
et de définir la propriété ReadOnly
sur true
.
Il est un peu difficile de changer la couleur du texte dans une variable TextBox
désactivée. Je pense que vous devrez probablement sous-classer et remplacer l’événement OnPaint
.
ReadOnly
devrait cependant vous donner le même résultat que !Enabled
et vous permettre de garder le contrôle de la couleur et du formatage de TextBox
. Je pense que cela permettra également de sélectionner et de copier le texte de la variable TextBox
, ce qui n’est pas possible avec une variable TextBox
désactivée.
Une autre solution simple consiste à utiliser Label
au lieu de TextBox
.
En outre, pour que ForeColor soit obéi sur une zone de texte marquée en lecture seule, vous devez définir explicitement le BackColor. Si vous voulez qu'il utilise toujours le BackColor par défaut, vous devez expliciter le jeu, car le concepteur est trop intelligent pour son bien. Il suffit de définir le BackColor à sa valeur actuelle. Je fais cela dans l'événement Load pour le formulaire, comme suit:
private void FormFoo_Load(...) {
txtFoo.BackColor = txtFoo.BackColor;
}
hi Définissez l'attribut readonly sur true à partir du code ou du temps d'exécution et non du moment de la conception.
txtFingerPrints.BackColor = System.Drawing.SystemColors.Info;
txtFingerPrints.ReadOnly = true;
Je viens de trouver un bon moyen de le faire. Dans mon exemple, j'utilise un RichTextBox mais cela devrait fonctionner avec n'importe quel Control:
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);
}
}
Vous pouvez définir en toute sécurité Enabled = true et ReadOnly = false, et cela agira comme une étiquette empêchant le focus, l'entrée utilisateur, le changement de curseur sans être réellement désactivé.
Voyez si cela fonctionne pour vous . Salutations
Vous pouvez essayer ceci . Remplacez l'événement OnPaint de la zone de texte.
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
}
définir les styles de contrôle sur "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
}
Ou vous pouvez essayer ce hack
En entrer événement définir le focus
int index=this.Controls.IndexOf(this.textBox1);
this.Controls[index-1].Focus();
Ainsi, votre contrôle ne sera pas concentré et se comportera comme un handicapé.
Il suffit de gérer Enable modifié et de le définir sur la couleur dont vous avez besoin
private void TextBoxName_EnabledChanged(System.Object sender, System.EventArgs e)
{
((TextBox)sender).ForeColor = Color.Black;
}
Si vous souhaitez afficher du texte qui ne peut pas être modifié ou sélectionné, vous pouvez simplement utiliser une étiquette.
En plus des réponses de @ spoon16 et @Cheetah, je règle toujours la propriété tabstop
sur False dans la zone de texte pour empêcher la sélection du texte par défaut.
Alternativement, vous pouvez aussi faire quelque chose comme ça:
private void FormFoo_Load(...) {
txtFoo.Select(0, 0);
}
ou
private void FormFoo_Load(...) {
txtFoo.SelectionLength = 0;
}