0

ここで記事を見つけました:

Winforms Textbox - Ctrl-Backspace を使用して単語全体を削除する

Ctrl + バックスペースを押しながらテキスト ボックス内の単語全体を削除するには、次のように app.config の変更を実装しないと気付きました。

<configuration>
  <appSettings>
    <add key="SendKeys" value="SendInput" />
  </appSettings>
</configuration>

現在の単語のみが削除され、バックスペースのプロセスが中断されます。たとえば、「Tim tom」と入力してから ctrl + バックスペース トリックを使用すると、「tom」が削除され、バックスペース操作が中断され、「Tom」が残ります。

ただし、app.config の変更を使用すると、"tom" は正常に削除され、バックスペース操作は続行されますが、バックスペース ボタンを押しているかのように単語全体を削除し続けることはありません。

これの原因や修正方法を知っている人はいますか?

4

1 に答える 1

0

アプリケーションは、キープレスに相当するものをアプリケーションに送信するという別の動作を選択しています。

2 つのプロトコルが存在する理由の歴史的な説明は、次のとおりです

SendKeys クラスが .NET Framework 3.0 用に更新され、Windows Vista で実行されるアプリケーションで使用できるようになりました。Windows Vista の強化されたセキュリティ (ユーザー アカウント制御または UAC と呼ばれます) により、以前の実装が期待どおりに機能しなくなります。SendKeys クラスはタイミングの問題の影響を受けやすく、一部の開発者は回避する必要がありました。更新された実装はまだタイミングの問題の影響を受けやすいですが、わずかに高速であり、回避策の変更が必要になる場合があります。SendKeys クラスは最初に以前の実装を使用しようとし、それが失敗した場合は新しい実装を使用します。その結果、SendKeys クラスはオペレーティング システムによって動作が異なる場合があります。さらに、SendKeys クラスが新しい実装を使用する場合、

ここで言及されているタイミングの問題は、一度に 1 文字だけでなく、特に文字によるアプリケーションの継続的な制御に関係しています。それらには以下が含まれます

  • タイピング速度を同期することの難しさ
  • アプリがダイアログを開いているときに、正しいウィンドウが入力を受け取るようにする
  • ユーザーが閉じるボタンをいじった場合でも、適切なアプリが入力を受け取るようにする

ただし、SendKeys動作が変更された本当の理由は、プログラマーの使いやすさ (大幅に改善されなかった) ではなく、セキュリティです。

SendKeysパラメータを設定して目的の動作を指定することをお勧めします。UAC がオンまたはオフになったという理由だけで、アプリケーションが不思議なことに異なる動作を開始することは望ましくありません。

于 2012-07-03T06:23:45.330 に答える