質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

1371閲覧

サーチ文字列を強調

k_mail

総合スコア90

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

1クリップ

投稿2017/02/03 01:29

編集2017/02/03 01:56

textbox1にある文字列から、
textbox2に記入された文字を探し、フォーカスを当てます。

コードの中で使われているpの立ち位置がわかりません

質問としては、

  1. p = -Len(TextBox2.Text) + 1

↑これは何をしているのか?(特に"-(マイナス)"がつく理由)

  1. p = InStr(p + Len(TextBox2.Text), TextBox1.Text, TextBox2.Text)

↑第1引数は何をしているのか?

です。
ご教授お願いします。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Static p As Integer p = -Len(TextBox2.Text) + 1 p = InStr(p + Len(TextBox2.Text), TextBox1.Text, TextBox2.Text) If p <> 0 Then TextBox1.HideSelection = False TextBox1.Select(p - 1, Len(TextBox2.Text)) Else p = -Len(TextBox2.Text) + 1 End If End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2017/02/03 01:43

参考書かなんかのコードですか?
k_mail

2017/02/03 01:50

その通りです。Clickイベントの中のコードです。
ozwk

2017/02/03 01:51

何という参考書でしょう?
k_mail

2017/02/03 01:54

vb.net Bible 270例題で学ぶプログラミングの散歩道 著 河西朝雄 技術評論社  です。
ozwk

2017/02/03 02:16

"aaaa"に対して"a"をサーチしようとしたら、何回クリックしてもフォーカス当たるのは最初の一文字だけですか?
ozwk

2017/02/03 02:23

あとpがStaticで宣言されている理由とか書いてありますか?
k_mail

2017/02/03 02:49 編集

>"aaaa"に対して"a"をサーチしようとしたら、何回クリックしてもフォーカス当たるのは最初の一文字だけですか? →その通りです。 また、pがStaticで宣言されている理由は明記されていませんでした。
ozwk

2017/02/03 02:58 編集

なんか後々のページに出てくるとかもなく?だとすればその本投げ捨てたほうがいいかもです。
guest

回答2

0

ここ(Strings.InStr)にある通り、第一引数は検索を開始する文字数となります。

p = -Len(TextBox2.Text) + 1
に関してですが、変数pがStaticで宣言してあったり、検索文字列が見つからなかった場合に再計算していたりと、開示されていないコードで他の使い方等があるように見受けられ、この計算がどのような意図を持つのか判断できません。
textbox1にある文字列から、textbox2に記入された文字を探し、フォーカスを当てるという仕様を満たすだけであれば、必要ありません。

想像ですが、Button1をクリックしていくことにより、選択位置を次の該当文字へと移動させるようなロジックを作成しようとしているのでしょうか?
(それでもこの計算の意図は不明ですが)

投稿2017/02/03 02:38

YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k_mail

2017/02/03 02:53

開示されていないコードはありません。 問題集に書かれているコードなのですが、これだけで完結しています。 (個人的には、”選択位置を次の該当文字へと移動させるようなロジックを作成”したいですが。。。)
guest

0

ベストアンサー

  1. InStrの第一引数

リファレンスの記載にありますが、検索開始位置です。

  1. これは何をしているのか?(特に"-(マイナス)"がつく理由)

上のコードを見た限りでは意味不明ですね...
p = -Len(TextBox2.Text) + 1
無駄な計算に見えてもそこに何かの意図があるならそれがくみ取れると思うのですがご質問のコードの断片だけをみるとそこには大した意味はくみ取れない気がします。
教科書の前後にあるコード、説明などをよくみると何か手がかりがあるかも知れません。

例えばInStrを使ってs1の中から連続してs2を探すループ処理があったとします。pを最後に見つかった位置と考えると次の位置からs2を探すならこのようなコードになります。
p = InStr(p + Len(s2), s1, s2)
これでInStrを繰り返し呼び出すと、次々にpにs2が見つかった位置が入るわけですが、そのループを開始する際に一番最初の検索位置の初期値を与えるとすると
p = -Len(s2) + 1
で与えればよいことになります。しかし上のコードではループしてないのでこんなコードを書いても冗長なだけです。

ひょっとしたらこのコードを最初に提示して次のサンプルでループを使って何かするようなものが書いてありそのベースとするためにわざわざこんなコードにしてあるのでしょうか・・・


追記:
VB.NETのstaticの意味がわからないのですが、staticといってるぐらいなのでこのサブルーチンの局所変数ではなく大域的に「p=-Len(s2)+1 の初期化だけが行われている」と解釈すべきなら上の述べたようにサブルーチンが呼び出される度にあらたな検索位置に対してフォーカスを充てるというような処理になるのだと思います。スミマセン自分はstaticの意味を正確に知らないので自信ありません。

投稿2017/02/03 02:34

編集2017/02/03 02:41
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k_mail

2017/02/03 02:59 編集

参考書から断片的に抜き出したのではなく、これですべてで、完結しているのです。(泣) 前後に続きがあるわけではありません。 参考書は意味不明なのですが、 KSwordOfHasteさんのご説明が私が知りたいことでわかりやすかったです。 (参考書は無視することにします)
ozwk

2017/02/03 03:02

VB.NETのstaticはCのstaticとだいたい同じ意味で、 C#で言えばプライベートメンバに相当します。 static宣言と同時に代入すれば、それが一度だけ行われるのですが、 このコードだとstaticである意味ないです。
KSwordOfHaste

2017/02/03 03:09 編集

> static宣言と同時に代入すれば、それが一度だけ行われるのですが、このコードだとstaticである意味ないです。 やはりそうですか・・・ Static p As Integer = -Len(TextBox2.Text) + 1 となっていれば意味があるということなんでしょうか? (一言たりませんでした。またも回答しつつ勉強させていただきました。コメントありがとうございます。>ozwkさん)
ozwk

2017/02/03 03:16

そうなってるとクリックの度に順番に移動しますね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問