2015-09-03 1 views
3

MSDN de documentation pour les états de propriété ShortcutsEnabled de la zone de texte que:Pourquoi le raccourci CTRL + A est-il désactivé sur les contrôles TextBox multilingues en C#?

Le contrôle TextBox ne prend pas en charge les touches CTRL + touche de raccourci lorsque la valeur de la propriété multiligne est vrai.

... mais pourquoi? Kaitlyn a mentionné ci-dessous que le TextBox et le RichTextBox dérivent de la même classe de base TextBoxBase, et pourtant le contrôle RichTextBox supporte nativement le raccourci.

Il est assez facile d'ajouter de nouveau manuellement, et il y a beaucoup de questions répondre comment à faire, mais je ne peux pas penser à pourquoi ils vont sortir de leur façon de désactiver cette fonction dans cette circonstance spécifique.

Pour quelles raisons techniques?

+1

C'est en fait une question assez intrigante ... Il y a une question très semblable à la vôtre, à http://stackoverflow.com/questions/5885739/why-are-some-textboxes-not-accepting-control-a -shortcut-to-select-all-by-defau, mais très probablement la réponse n'est pas celle que vous cherchez. – Kaitlyn

+1

@Kaitlyn ouais, j'ai vu cette question aussi. C'est un peu ce qui a déclenché tout ce processus de réflexion lol. –

+2

Cela est arrivé il y a trop longtemps, vous ne pouvez que deviner. Il n'avait jamais l'habitude d'avoir ce raccourci, afaik il a été ajouté dans Win95. Bricoler avec le comportement des contrôles standards est très, très risqué. Ils l'ont probablement ignoré pour les contrôles EDIT multi-lignes car il y avait trop de programmes autour pour l'utiliser comme éditeur de texte. Et ayant déjà ses propres raccourcis clavier. Le bloc-notes étant l'exemple canonique. –

Répondre

3

Pour citer quelqu'un d'autre sur le SO, il est:

probablement parce que TextBox enveloppe le contrôle d'édition Windows natif, qui prend en charge uniquement un sous-ensemble des raccourcis.

Cité de Frédéric Hamidi à https://stackoverflow.com/a/5893879/3472690

Après quelques recherches, il semble que le contrôle d'édition Windows natif que Frédéric mentionne est this one, at MSDN, regarding Edit Controls.

Et comme Alan Macdonald dit dans un commentaire à cette même réponse ci-dessus ... liée

fonction Terrible des zones de texte multiligne

EDIT:

trouvé un autre raison potentielle. Comme cité de DMA57361 of SuperUser,

En tant que raccourci, Ctrl + A = Select All n'est pas quelque chose implémenté par Windows.

Cela fonctionnera uniquement dans les programmes qui implémentent ce raccourci eux-mêmes, pas universellement à travers le système.

Un commentaire supplémentaire à la réponse de DMA57361 par KCotreau de SuperUser correspond également à ce que xpda dit au sujet de la compatibilité (noms supprimés de la citation):

il n'est pas mis en œuvre dans XP ou Server 2003, mais est implémenté dans Windows 7 et Server 2008 (et probablement Vista), au moins pour la boîte Exécuter. Donc, votre système n'a pas de problème technique ... il manque juste une fonctionnalité.

Comme pour plus d'informations de MSDN eux-mêmes, et qui correspond avec les autres citations ci-dessus ...l'article "About Edit Controls" indique que:

Les contrôles d'édition étendus prennent en charge de nombreuses fonctionnalités non disponibles dans les contrôles d'édition du système. Pour plus d'informations, consultez Contrôles d'édition enrichis.

De plus, il y a des limites sur les contrôles d'édition, car ils sont, cité de this article, also from MSDN (mais la section Developer Network plutôt que Windows Dev Center, que je ne suis pas sûr de ce que la différence qui fait ...)

Les contrôles d'édition ont été conçus pour entrer, afficher et éditer de petites quantités de texte. Ils n'étaient pas destinés à être la base pour les éditeurs de texte à grande échelle.


Il a également, comme xpda dit, semble avoir été très bien destiné à agir comme si, or they simply didn't want to bother fixing it, as quoted by a reply to an issue regarding multiline textboxes not supporting the Select-All shortcut on the Visual Studio feedback section:

Nous avons évalué la question que vous avez rapporté et à ce stade le cycle de vie du produit, il ne répond pas aux critères à satisfaire. Cette évaluation est soigneusement effectuée et prend en compte de nombreux aspects, y compris le coût du correctif, les implications du changement et le nombre d'instances signalées du problème.

Enfin, pour expliquer davantage pourquoi est-ce par la conception ... et pourquoi ce serait pour « compatility » ... il y a cette citation d'un Shuja Ali on a certain CodeGuru forum, saying:

Il ne sert à travailler dans VB 6.0 et .NET 1.1

Pour "soutenir" la citation de Shuja Ali, le TextBoxBase.ShortcutEnabled Property is new for .NET Framework 2.0, and the Ctrl+A shortcut already doesn't work at that stage, as evident by the comment by a hemantpurkar to that article.


Par conséquent, pour condenser toutes les recherches ci-dessus en une seule phrase ...

L'incapacité à utiliser le raccourci « Ctrl + A » existe depuis la première version du .NET Cadre dans lequel les raccourcis sont supportés correctement (2.0), et Microsoft a été trop paresseux pour le réparer depuis, donc il est prétendu être "par conception" et laissé comme ça pour "compatibilité".

+0

Je suppose que cela aurait du sens si c'était simplement une méthode non implémentée, mais cela ne semble pas être la caractéristique de la bibliothèque .NET, qui semble penser à tout la plupart du temps. –

+0

@iAmMortos La réponse à pourquoi il semble inhabituel, je pense que les réponses de réponse de xpda que :) alias (en arrière) la compatibilité – Kaitlyn

+1

@iAmMortos je ne pouvais pas trouver la xpda exacte source mentionné, mais je crois que j'ai assez de recherches pour (presque) entièrement expliquer pourquoi ce raccourci est "désactivé" pour les boîtes de texte multilignes. – Kaitlyn

3

La réponse officielle est que c'est "par conception". Probablement cela a été fait pour maintenir la compatibilité une fois il y a longtemps. Vous pouvez utiliser un RichTextBox pour obtenir tous les raccourcis par défaut, y compris Ctrl-A.

+0

Avez-vous une source pour cela? –

+0

J'essaie également de trouver une source qui fait référence à cela, mais jusqu'à présent, rien. J'ai découvert que textbox et richtextbox dérivent tous les deux d'un contrôle commun, appelé "TextboxBase" (https://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase(v=vs.110) .aspx), cependant. Peut-être que cela a quelque chose à voir avec TextboxBase, ce qui fait que Textbox ne le supporte pas? – Kaitlyn

+0

Si tous les deux dérivent de la même classe de base, et qu'un seul supporte le raccourci, alors il est évident que _just_ a été une décision consciente prise ... Je juste ... Je ne comprends pas>. < –