2

この問題をオンラインで解決すると主張するチュートリアルをいくつか見ましたが、機能しません。TAB キーが押されたときに、複数行のTextBoxに TAB スペースを挿入したいと思います。

Microsoft からの反応は、設計上、TextBox 内で TAB を押すと、Metro アプリは次のコントロールにフォーカスを移すというものでした。単一行の TextBox で TAB を押していた場合、これは理にかなっています。しかし、複数行の TextBox では? ユーザーがTABを挿入したくなる可能性が高いと思いませんか?

はい、Ctrl+TAB を押すと、Metro TextBox に TAB スペースを挿入できます。しかし、私たちのほとんどは単に TAB を押すことに慣れており、古い習慣がうまくいかないことがあるため、これはエラーが発生しやすいものです。

これが私の問題です。ユーザーが大量のデータを入力する必要があるアプリのテキスト エディター機能があります。そして、人々がどのようなものであるかを知っています。彼らは、テキスト文書を読みやすくするために物事を分離するのが好きで、Ctrl + TAB を使用するのは非常に不快で面倒です。それで、誰かがこれの回避策を手伝ってくれるかどうか知りたいです(ただし、RichTextBoxを含めることはできません)?

また、回避策を見つけることができた場合、アプリのリリースがストアによって拒否される可能性が高くなりますか?

4

3 に答える 3

2

TextBox の KeyPress イベントをサブスクライブし、押されたキーの KeyCode を調べて Tab キーを取得し、KeyEventArgs の Handled プロパティを true に設定して、キーが他のコントロールに渡されないようにします。

あなたが言ったように、SendKeysを使用して「Tab」文字をTextBoxに送信し、「Ctrl + Tab」を押す動作を模倣します。

TextBox_KeyPress(object sender, System.Windows.Forms.KeyEventArgs e)
{
      if (e.KeyCode == Keys.Tab)
      {
          e.Handled = true;
          SendKeys(^{TAB});
      }
}

ニンジン (^) は CTRL キーを表します。

于 2013-01-16T16:16:12.580 に答える
0

テキストボックスコントロールのKeyPressイベントで。テキストボックスコントロールの複数行に対してプロパティがtrueに設定されていることを確認してくださいこれは、私が提案するRichTextコントロールを使用している場合に機能します

if (e.Key == Windows.System.VirtualKey.Tab) 
{
    e.Handled = true;
    string SelectionText = "";
    TextBox.Document.Selection.GetText(Windows.UI.Text.TextGetOptions.None, SelectionText);
    TextBox.Document.Selection.TypeText(char(9) + SelectionText);
}
于 2013-01-16T16:13:46.360 に答える