5

Altキーを押しながらマウスでスイープすることにより、テキストのボックスまたは長方形を選択できるアプリケーションはかなりあります。たとえば、Visual Studio 2010は、コードエディターでこれを実行します。Emacsはそれを行います。Winwordはそれを行います。私たちは皆それを見てきました。この振る舞いをエンコードするために従うべき標準的なパターンがなければならないようですが、私はそれを見つけることができないようです。

私が得ているのは長方形、Alt-Left、スイープ、選択などの誤ったヒットだけなので、正しいキーワードでグーグルしていないのではないかと思います。

私はそれをコード化できると確信していますが、それは、たとえば、RichTextBoxで使用される通常の選択コードを無効にすることを意味します。そして、それは醜く、エラーが発生しやすく、おそらくそれが価値があるよりも多くの作業に聞こえます。

誰かがこれを行う方法の提案(いいです!:-))またはそれがどのように行われるかの例を持っていますか?

更新:適用される可能性のあるCode Projectに関するこの記事を見つけました:列ベースの選択

4

1 に答える 1

4

RichTextBoxはしばしばエディターと間違えられます。技術的には可能です。多くのコードが必要になります。最初の仕事は、Courierのような固定幅フォントを選択することです。

主な問題は、選択機能を使用できないことです。選択機能は常に行にまたがっています。SelectionBackColorプロパティを使用して、偽造する必要があります。MouseDownイベントとMouseMoveイベントを実装し、Control.Modifiersプロパティをチェックして、ALTキーが押されているかどうかを確認します。GetCharIndexFromPositionを使用して、何が選択されているかを確認します。moveイベントで、SelectionStart、SelectionLength、およびSelectionBackColorプロパティを使用して文字に色を付け、選択解除/選択された列と行をループします。

これは安いモーテルのようにちらつきます。これを回避するために、SendMessage()を呼び出して、前後にWM_SETREDRAWメッセージを送信します。

選択で何かをするのは難しいです。WndProc()をオーバーライドして、WM_COPY、WM_CUT、WM_PASTEメッセージを検出できるように、RTBをサブクラス化する必要があります。その他のランダムな問題は、マウスがコントロールの上部または下部に近づくと自動スクロールし、別の選択が行われているときに選択を解除することです。

または、ScintillaNETなどの実際のエディターを使用することもできます。結局のところ、この回答が質問ほど多くの賛成票を獲得する可能性は低いです。

于 2010-06-03T20:16:25.017 に答える