DOBON.NET DOBON.NETプログラミング掲示板過去ログ

複数行入力のテキストボックスでの行の移動は可能ですか

環境/言語:[VB.NET2003]
分類:[.NET]

初めまして、葵と申します。
VB.NET(2003)を始めたばかりの初心者です。

教えていただきたいのは複数行入力OKのテキストボックスの行単位での移動が可能かどうかです。

今私はテキストエディタを練習として作っています。
その中でテキストボックス内のカーソルを指定した行へ移動させたいのですが、行単位の移動方法がどうしてもわかりません。
それともやり方自体間違っているのかどうかも判断がつきません。

どなたかアドバイスの一つでも結構ですのでよろしくお願いします。
おはようございます。

■No5069に返信(葵さんの記事)
> 初めまして、葵と申します。
> VB.NET(2003)を始めたばかりの初心者です。
>
> 教えていただきたいのは複数行入力OKのテキストボックスの行単位での移動が可能かどうかです。
>
> 今私はテキストエディタを練習として作っています。
> その中でテキストボックス内のカーソルを指定した行へ移動させたいのですが、行単位の移動方法がどうしてもわかりません。
> それともやり方自体間違っているのかどうかも判断がつきません。
>
> どなたかアドバイスの一つでも結構ですのでよろしくお願いします。

RichTextBoxを使えば何とかならない?
葵さん、こんにちは

普通のTextBoxでやるならば、こんなんでどうでしょう?


if(textBox1.SelectionStart < textBox1.Text.Length)
{
int find = textBox1.Text.IndexOf("\r\n",textBox1.SelectionStart+1);
if(find >= 0)
{
textBox1.SelectionStart = textBox1.Text.IndexOf("\r\n",textBox1.SelectionStart+1)+2;
textBox1.SelectionLength = 0;
}
}
textBox1.Focus();
■No5069に返信(葵さんの記事)

 葵さん、こんばんは。深山と申します。

> どなたかアドバイスの一つでも結構ですのでよろしくお願いします。
ということなので少しだけ。
# 既に他の方からのレスもありますし、不要かも知れませんけど(^_^;)

 行いたいのは『行番号を指定してジャンプ』のような機能になるかと思います。
 以下の内容がヒントになるでしょうか?

・SelectionStart プロパティによってカーソル位置を制御できる
・特定の位置にカーソルを移動させたい場合、 SelectionStart プロパティには
 その直前までの文字数を設定すれば良い
・各行の文字列には Lines プロパティよりアクセス可能
・1 行辺りに含まれる文字数には、改行コードの 2 文字分を付加する必要がある


# 以下余談です。
 ところで
> それともやり方自体間違っているのかどうかも判断がつきません。
ということは、試行錯誤されてるものがあるのですよね? もしそうでしたら、それを
提示して頂きたかったと個人的には思います。
 恐らく SelectionStart 云々なんていうのはとっくにご存知だったのでしょうけども、
投稿された文章からは葵さんがどこまで調べられてたのか判断がつきませんから。
■No5081に返信(ゆさんの記事)
> 葵さん、こんにちは
>
> 普通のTextBoxでやるならば、こんなんでどうでしょう?
>
>
> if(textBox1.SelectionStart < textBox1.Text.Length)
> {
> int find = textBox1.Text.IndexOf("\r\n",textBox1.SelectionStart+1);
> if(find >= 0)
> {
> textBox1.SelectionStart = textBox1.Text.IndexOf("\r\n",textBox1.SelectionStart+1)+2;
> textBox1.SelectionLength = 0;
> }
> }
> textBox1.Focus();
>

ありがたい、お返事がありがとうございます。
ちょっとお聞きするのがかなり恥ずかしいのですが
このコードの記述方法がふつうのと書き方が違うのか、
WindowsFormではエラーがでてしまいます。
調べようとしたのですがよくわかりませんでした。
お恥ずかしいですが教えていただけますか?
C#だからね。
■No5110に返信(それはさんの記事)
> C#だからね。
C言語だったんですね。
教えて頂けてありがとうございます。

そこでVBコードに書き直したのですが、
きちんと動作していないようです。
どこが間違っているのでしょうか。
-------------------------------------------
Dim find As Integer

If (TextBox1.SelectionStart < TextBox1.Text.Length) Then
 find = TextBox1.Text.IndexOf("\r\n", TextBox1.SelectionStart + 1)
End If

If find >= 0 Then
 TextBox1.SelectionStart = TextBox1.Text.IndexOf("\r\n", TextBox1.SelectionStart + 1) + 2
 TextBox1.SelectionLength = 0
 TextBox1.Focus()
End If
-------------------------------------------
2004/07/25(Sun) 23:42:33 編集(投稿者)

■No5113に返信(葵さんの記事)
葵さんこんばんわ、NAMIと申します。
深山さんのおっしゃってる通りのコードでどうでしょう。

Dim i As Integer = TextBox2.Text - 1 '1行目はTxstBox1.Lines(0)から始まるので-1

Dim k As Integer 'i行の先頭直前までの文字数
Dim n As Integer 'カウンター

For n = 0 To i - 1 '指定行のひとつ手前の行までの文字数が知りたいので-1

k = k + TextBox1.Lines(n).Length + 2
                '各行の文字数に改行コードの2文字分を加える

Next n

TextBox1.SelectionStart = k
TextBox1.Focus()

もちろん、他にテキストボックスの行数以上の数値が入らないようにチェックを
かけてくださいね。
NAMI @さん
ありがとうございました。
訂正していただいたコードのおかげで動作致しました。
チェックもきちんと入れることが出来ました。

■No5101に返信(深山さんの記事)
> ■No5069に返信(葵さんの記事)
>
>  葵さん、こんばんは。深山と申します。
>
>>どなたかアドバイスの一つでも結構ですのでよろしくお願いします。
> ということなので少しだけ。
> # 既に他の方からのレスもありますし、不要かも知れませんけど(^_^;)
>
>  行いたいのは『行番号を指定してジャンプ』のような機能になるかと思います。
>  以下の内容がヒントになるでしょうか?
>
> ・SelectionStart プロパティによってカーソル位置を制御できる
> ・特定の位置にカーソルを移動させたい場合、 SelectionStart プロパティには
>  その直前までの文字数を設定すれば良い
> ・各行の文字列には Lines プロパティよりアクセス可能
> ・1 行辺りに含まれる文字数には、改行コードの 2 文字分を付加する必要がある
>
>
> # 以下余談です。
>  ところで
>>それともやり方自体間違っているのかどうかも判断がつきません。
> ということは、試行錯誤されてるものがあるのですよね? もしそうでしたら、それを
> 提示して頂きたかったと個人的には思います。
>  恐らく SelectionStart 云々なんていうのはとっくにご存知だったのでしょうけども、
> 投稿された文章からは葵さんがどこまで調べられてたのか判断がつきませんから。

深山様
ご助言の通りです、何度も四苦八苦していました。
そこで迷ってしまったためどう書くべきかわからない状態だったのです。
今度投稿する折りにはこのようなことがないよう精進したいと思います。

あとたくさんのご意見を頂いた皆様ありがとうございました。




エラー処理を入力したコードです。
----------------------------------------------------------------------
Dim h_retsu As Integer

h_retsu = InputBox("行番号を入力してください", "")

If h_retsu > TextBox1.Lines.Length Then
MsgBox("行番号が範囲外です", vbOKOnly, "メモ帳-行に移動")
Exit Sub
Else
TextBox2.Text = h_retsu

Dim i As Integer = TextBox2.Text - 1 '1行目はTxstBox1.Lines(0)から始まるので-1

Dim k As Integer 'i行の先頭直前までの文字数
Dim n As Integer 'カウンター

For n = 0 To i - 1 '指定行のひとつ手前の行までの文字数が知りたいので-1

k = k + TextBox1.Lines(n).Length + 2
'各行の文字数に改行コードの2文字分を加える

Next n

TextBox1.SelectionStart = k
TextBox1.Focus()

End If

----------------------------------------------------------------------
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板