テキストボックスにおけるカーソル位置

解決


 2002-12-06 13:51:21  No: 76534  IP: [192.*.*.*]

テキストボックスにコマンドボタンを押したらHTMLタグを打てるような設定をしています。
その際、括弧(<B>_</B>など)の間にカーソルをセットしたい(_の位置に)のですがどのコードを使えばいいのでしょう?

編集 削除
魔界の仮面弁士  2002-12-06 16:33:27  No: 76535  IP: [192.*.*.*]

SelStartプロパティで、カーソル(キャレット)の位置を指定できます。

また、SelLengthプロパティを使って、範囲選択された文字列の長さを
取得/設定したり、その範囲選択されている文字列を、SelTextプロパティで
取得/設定するような事も可能です。


……ちなみに、「DHTML Edit Control」という、HTML編集用の
コントロールもありますので、こういった物を利用するのも手かも。

http://msdn.microsoft.com/archive/en-us/dnaredcom/html/edcomdownload.asp

編集 削除
 2002-12-06 16:55:20  No: 76536  IP: [192.*.*.*]

テキストボックスに文字を入れていって、一番最後の文字から何文字目にカーソルを置くということはできますか?
SelStartを使ってみたのですが、テキストボックスの一番頭から何文字目というようにしかできなかったのですが。
現在このようにしています(一部ですが)
Private Sub cmdCenter_Click()
    txtText.Text = txtText.Text+"<Center>"&" "&"</Center>"& vbCrLf
    txtText.SetFocus
    txtText.SelStart = 9
End Sub
どこかいけないところがあるのでしょうか?

編集 削除
YuO  2002-12-06 19:16:01  No: 76537  IP: [192.*.*.*]

> テキストボックスに文字を入れていって、一番最後の文字から何文字目にカーソルを置くということはできますか?

Len関数を使えば文字列の長さはわかります。
で,先頭からn文字目にカーソルを置くこともできます。
あとは,小学校レベルの算数が出来れば,
末尾からN文字目にカーソルを置くことが出来ます。

編集 削除
 2002-12-09 08:55:45  No: 76538  IP: [192.*.*.*]

Len関数を用いてうまくできました。
Private Sub cmdCenter_Click()
    txtText.Text = txtText.Text+"<Center>"&" "&"</Center>"& vbCrLf
    txtText.SetFocus
    txtText.SelStart = 13
End Sub

編集 削除
 2002-12-09 08:56:57  No: 76539  IP: [192.*.*.*]

Private Sub cmdCenter_Click()

    txtText.Text = txtText.Text + "<Center> " & " " & " </Center>" & vbCrLf
    txtText.SelStart = Len(txtText.Text) - 13
    txtText.SetFocus
    
End Sub
が解決時のコードでした。すいません。

編集 削除
SelTextプロパティを併用して  2002-12-09 10:56:24  No: 76540  IP: [192.*.*.*]

文字列の連結というのは比較的重い処理なので、文字列が長くなってくるにつれて、
  Text1.Text = Text1.Text & "追加させたい文字列"
という記述は、遅いと感じるようになってくるかも知れません。

その場合は、Textプロパティの替わりに、
    Dim Position As Long
    Position = Len(txtText.Text)
    txtText.SelStart = Position

    txtText.SelText = "<Center>   </Center>" & vbCrLf

    txtText.SelStart = Position + Len("<Center> ")
    txtText.SetFocus
のように、SelTextプロパティを使うようにすると、高速化が図れます。


また、「txtText.SelText = "<Center> " & txtText.SelText & " </Center>"」のようにすると、
「範囲選択(文字列を反転させている部分)を、<CENTER>タグで囲む」なんて事もできます。

編集 削除
 2002-12-09 12:05:11  No: 76541  IP: [192.*.*.*]

なるほど、さらに高速化を図ったやりかたですか。
一通り出来上がったら試しにやってみたいと思います。
アドバイスどうもです。

編集 削除
 2003-12-02 17:43:38  No: 76542  IP: [192.*.*.*]

超亀レス&横レスですいません。
似たような質問で解決できていないのでこちらにカキコさせていただきます。

今こんな感じの似たようなコードになってるんですけど

Label3 = "<DIV ALING=" + conbo5 + "></DIV>"
Form1.RichTextBox1.SelText = Label3
Form1.RichTextBox1.SelStart = Len(Form1.RichTextBox1.Text) - 6
Form1.RichTextBox1.SetFocus

これだと
『RichTextBoxの一番最後の文字から6番目の文字にカーソルを置く』
ってなってしまって、どうも都合が悪いんです。つまり・・・

<CENTER>ビジュアルベーシックの掲示板</CENTER>

っていうタグがあって

<CENTER>ビジュアルベーシックの掲示板</CENTER>☆

☆の部分にカーソルを合わせて別のタグの入力をするなら問題ないのですが
例えば

<CENTER>☆ビジュアルベーシックの掲示板</CENTER>

この☆の位置で上記のコードを使用してタグを挿入した場合、

<CENTER><DIV ALINK=LEFT></DIV>ビジュアルベーシックの掲示板</C★ENTER>

となって★の部分にカーソルが位置してしまうので困ってしまって・・・
なにかうまいやり方はないのでしょうか?
長文&読みにくくてすいません。

編集 削除