7
votes

Arrêtez la surbrillance de la couleur de l'élément sélectionné sur Combobox?

J'utilise une boîte de liste déroulante dans WinForm mais quand j'ai été sélectionné n'importe quel article dans la liste déroulante, puis élément de fond de fond de fond est bleu. Je veux retirer cette couleur de fond bleue (en particulier sur la charge de formulaire, essayé de définir la mise au point sur une autre commande sous la forme, mais la mise en surbrillance de combo non supprimée) mais l'élément doit être sélectionné.

Quelqu'un peut-il aider sur ceci ...?


4 commentaires

À peu près sûr, vous pouvez simplement définir l'index sélectionné sur -1, mais cela fait un certain temps.


Mais l'article devrait être sélectionné ...


Utilisez-vous un thème de couleur spécial sur Windows ?? cela ne devrait pas arriver sur une combinaison commune. Essayez de supprimer ce combo et d'en ajouter un nouveau. @Sawyer qui effacera le combo, mais ce n'est pas ce que Pos demande;)


@Dhana je vois, désolé j'ai raté ça. Je suppose que vous pourriez toujours remplacer le rendu et peindre la chose vous-même. Ensuite, c'est une couleur que vous voulez.


7 Réponses :


3
votes

Il semble que le seul moyen de le faire est de sous-classer la commande ComboBox.

Voici un exemple où quelqu'un fait ça:

http: / /social.msdn.microsoft.com/forums/en-us/winforms/thread/e234c4a7-0cf7-4284-a072-8152f7593002/

Il y a probablement plus sur le Web pour vous guider.


1 commentaires

Le lien donné explique comment montrer la totalité de l'info-bulle lorsque la souris survole sur l'élément Combobox. Ce n'est pas une réponse à la question.



2
votes

J'ai trouvé quelque chose sur Ce site

Créer Une minuterie et activez-la dans votre événement sélectionnéExchanged, et dans la minuterie, ajoutez simplement Combobox1.select (0,0) code> Ceci devrait supprimer la pièce de sélection, puis désactiver la minuterie. Identifiez d'autres points d'entrée dans lesquels vous pouvez utiliser P> P>

Code Snippet P>

private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
    //Get the item selected in the combobox
    ComboBox cbx = (ComboBox)sender;
    int idx = cbx.SelectedIndex;    
    string s1 = cbx.SelectedItem.ToString();
    // Enable the time so that the Highlight can be removed
    timer1.Enabled = true;
}

private void timer1_Tick(object sender, EventArgs e)
{
    // Remove the Highlight
    comboBox1.Select(0, 0);
    // Disable timer
    timer1.Enabled = false;
}


2 commentaires

comboBox1.select (0, 0) - ne fonctionne pas car Combobox est "DropdownList" non modifiable de texte autorisé ..,


@Dhaana définit alors comboBox1.selectionlength = 0 travail?



1
votes

Il existe une solution facile pour vous xxx

espère qu'il aide :)


1 commentaires

cela ne prendrait-il pas la sélection?



2
votes

Je ne suis pas un gros utilisateur de VB et je ne joue qu'avec Excel, mais aussi eu ce problème lorsqu'une sélection a été faite dans mon ComboBox. J'ai finalement trouvé un moyen de me débarrasser du texte bleu sur la surbrillance.

J'ai une combinaison sur une formulaire user. En sélectionnant la combinaison de ComboBox et en affichant les propriétés, changez simplement la "HidesLection" sur TRUE a fonctionné pour moi. Vous pouvez également coder pour cela: Combobox1.Hideselection = true


5 commentaires

Ceci est la solution correcte. Bien que votre réponse soit à propos de VBA, c'est la même chose pour Winforms avec C # et VB.NET. Vous devez définir la propriété Hideselection sur true . Étrange, cependant; cela devrait être la valeur par défaut.


@Cody Grey - Je ne trouve pas de Hideselection Propriété pour une combinaison de comboBox sous Windows. Il existe pour Teintboxbase et les contrôles qui l'héritent, mais Combobox ne le fait pas. Qui est une honte, comme je l'aimerais vraiment un! (J'utilise Visual Studio 2013 avec .NET 4.5)


@jonp hmm, je ne sais pas ce que je pensais quand j'ai écrit ce commentaire il y a plusieurs années. Vraisemblablement, cela avait travaillé pour moi à l'époque. Je pensais que peut-être que ComboBox masque la méthode de la classe de base, mais un aspect rapide de la source de référence suggère qu'il n'a même pas la même hiérarchie que la zone de texte. Il hérite réellement de ListControl, qui hérite du contrôle. Donc, il n'y a pas de propriété cachée à définir. Peut-être que vous pouvez obtenir au contrôle de la zone de texte sous-jacent, bien que .NET ne fournisse aucune manière gérée de le faire. Vous devrez utiliser p / invoke pour obtenir la poignée. ...


Demandez une nouvelle question ou placez une prime sur celle-ci si vous avez besoin d'une solution complète. Bien que je me demande pourquoi quelqu'un aurait vraiment besoin de cela. Dans toutes les comboBoxes que j'ai vues, cacher la sélection est la valeur par défaut. Toute sélection qui a été faite disparaît lorsque la mise au point quitte la commande ComboBox. C'est tout la propriété de hache de haies Comme je l'ai dit auparavant, il s'agit de la valeur par défaut pour les commandes de Textbox et ComboBox. Si vous demandez une nouvelle question, assurez-vous de préciser ce qui rend votre situation différente. @jonp


@Cody je n'ai pas dit que je devais la définir. J'ai besoin de la définir faux! Ma fonction de recherche / remplacement Sélectionne le texte trouvé pour la mettre en surbrillance, puis affiche une boîte de dialogue vous demandant si vous souhaitez remplacer cette occurrence, ce qui perd la mise au point sur le ComboBox et la mise en évidence disparaît. Je vais poser une nouvelle question si je ne peux pas le résoudre d'une autre façon (je pense que les gens sont trop prompts à poser des questions sur ce forum, ils ont besoin d'essayer un peu plus fort en premier!)



4
votes

Pour résoudre la même chose que j'ai essayé presque tout:

  • Réglage du Dropdownstyle Propriété à Dropdownlist
  • this.begininvoke (nouvelle action ((() => {comboBox1.select (0, 0);}));
  • comboBox1.selectionLength = 0;
  • Changer Combobox.tabindex
  • pas essayé sendkeys.send ("{escicade"); car il n'est pas une solution fiable

    rien n'a aidé. Peut-être parce que je n'ai pas de texte dans mes articles Combobox, seules des images. La seule solution stable et de travail consistait à se concentrer sur une autre commande d'étiquette: xxx

    Vous pouvez également masquer cette étiquette.


0 commentaires

0
votes

Je suis tombé sur le même problème et, après avoir trouvé une solution de travail, j'ai eu la même idée que @vadim K.

Voici un court exemple. P>

première étape consiste à changer la mise au point l'événement UI_LOAD. P>

Private Sub comboExportDates_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comboExportDates.SelectedIndexChanged
        Me.lblTitle.Focus()
End Sub


0 commentaires

0
votes

simple manière tout simplement désactiver la combinaison de ComboBox, puis activez-le xxx

et même vous sélectionnez un élément à l'intérieur de celui-ci, l'élément sera toujours sélectionné mais que la surbrillance ira


0 commentaires