Comment désélectionner le texte d'un combobox
j'ai une boîte bascule krypton que je lie aux données avec une liste de paires de valeurs clés. Ce qui se passe, c'est que lorsque je mets l'élément sélectionné dans le code, il met en évidence le texte. Comment puis-je empêcher cela ou désélectionner le texte?
j'ai essayé ce qui suit:
// 1
combo.Select(0,0);
// 2
combo.Focus();
anotherControl.Focus();
// 3
combo.SelectionStart = 0;
combo.SelectionLength = combo.Text.Length;
// 4
combo.SelectionStart = combo.Text.Length;
combo.SelectionLength = 0;
Rien ne semble fonctionner. Toute aide est appréciée.
13 réponses
j'ai réussi à accomplir cela en dépassant l'événement OnPaint de mon contrôle / fenêtre et en faisant
combobox1.SelectionLength = 0;
j'ai peut-être trouvé une solution qui fonctionne:
si vous utilisez un formulaire, abonnez-vous à L'événement affiché du formulaire.
OR
si vous utilisez un UserControl (comme je le suis), vous pouvez vous abonner à L'événement VisibleChanged.
Dans le cas, vous pouvez procéder de la façon suivante:
foreach (ComboBox cbo in (this.Controls.Cast<Control>().Where(c => c is ComboBox).Select(c => (ComboBox) c)))
{
cbo.SelectionLength = 0;
}
à part:
j'ai fini par avoir à le faire pour un contrôle de l'utilisateur dans lequel j'ai ajouté des ComboBoxes au contrôle et puis nécessaire pour plus tard régler dynamiquement leur taille. Le réglage de la taille a causé la mise en évidence que L'OP rencontrait.
Essayer
combo.SelectedText = String.Empty;
MSDN)
lorsque la boîte bascule perd de sa concentration, le point de sélection se déplace vers le début du texte et le texte sélectionné devient non sélectionnés
Si étrange, pourquoi est le suivant ne fonctionne pas:
anotherControl.Focus();
Pas sûr de ce que vous pourriez faire dans le contexte ie tiré d'événements, etc. Cependant, dans l'événement combox selectedindexchanged, vous pouvez ajouter un autre control.Sélectionner.)(
Qui devrait:)
je sais que cela fait longtemps que vous n'avez pas posé cette question. Mais voici ce que vous pouvez faire
combo.selectedindex = -1;
Voici ce que je fais:
private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
this.ActiveControl = cancelButton;
}
vous n'avez pas spécifié si l'utilisateur est supposé être capable d'éditer les valeurs de ComboBox ou non. Si non, alors DropDownStyle
de la zone de liste déroulante doit être fixé à ComboBoxStyle.DropDownList
. De cette façon, le ComboBox ne permettra de sélectionner que les valeurs existantes, les utilisateurs ne pourront pas taper de nouvelles valeurs et le texte ne sera jamais surligné.
ces 3 lignes m'ont aidé:
cbInstallationType.SelectionStart = 0;
cbInstallationType.SelectionLength = 0;
cbInstallationType.TabIndex = 99;
TabIndex doit pas être la première, de sorte qu'il n'est pas le premier élément de la forme
il vous suffit de placer ce code sur l'événement généré ou de cliquer sur le bouton où vous voulez désélectionner le texte d'une boîte bascule
ComboBox1.SelectedItem = null;
dans mon cas, sélectionner est apparu après redimensionner. Cette résolu:
textBox.Resize += (sender, args) =>
{
Control c = sender as Control;
if (c == null || c.Parent == null)
return;
c.Focus();
c.Parent.Focus();
};
on event SelectedIndexChanged ajoute la minuterie qui ne sera exécutée qu'une seule fois après 10 millisecondes.
new System.Threading.Timer((s) =>
{
comboBox1.Invoke(new Action(() =>
{
comboBox1.Select(0, 0);
}));
}, null, 10, System.Threading.Timeout.Infinite);
abonnez-vous à l'événement" SelectedIndexChanged", qui a la tâche de définir L'Objectif du ComboBox.
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox1.Focus();
}
abonnez-vous à L'événement" Paint " à partir du formulaire principal. L'éviction prend place dans ce gestionnaire d'événement:
private void MainForm_Paint(object sender, PaintEventArgs e)
{
comboBox1.SelectionLength = 0;
}
je ne se soucient pas comment les vieux c'est. Nous construisons une base de connaissances.
j'utilise D5 (et probablement les versions précédentes sont les mêmes). Vous devez utiliser:
Combobox.SelLength := 0;
aussi, si cela ne fonctionne pas, celui-ci le fait: éviter le Style par défaut (csDropDown). Et de le définir:
Combobox.Style := csDropDownList;
comme Alex l'a suggéré.
je vous Remercie. Fonctionne très bien!