C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
Re[2]: GetPositionFromCharIndexについて
(過去ログ 52 を表示中)
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法/規約
トピック表示
ランキング
記事検索
過去ログ
[トピック内 5 記事 (1 - 5 表示)] <<
0
>>
■28854
/ inTopicNo.1)
GetPositionFromCharIndexについて
▼
■
□投稿者/ DS
(1回)-(2008/12/02(Tue) 10:28:40)
分類:[C#]
.NET Framework2.0を使用しています。
GetPositionFromCharIndexをつかってTextBox内の位置を取得しようとして、
Point p = TextBox.GetPositionFromCharIndex(TextBox.Text.Length);
としてもpには(0,0)しか入りません。しかし、RichTextBoxで作るとうまくいきます。
なぜTextBoxではできないのでしょうか?
宜しくお願いいたします。
引用返信
編集キー/
編集
■28856
/ inTopicNo.2)
Re[1]: GetPositionFromCharIndexについて
▲
▼
■
□投稿者/ よねKEN
(211回)-(2008/12/02(Tue) 10:45:45)
■
No28854
(DS さん) に返信
> .NET Framework2.0を使用しています。
> GetPositionFromCharIndexをつかってTextBox内の位置を取得しようとして、
>
> Point p = TextBox.GetPositionFromCharIndex(TextBox.Text.Length);
Point p = TextBox.GetPositionFromCharIndex(TextBox.Text.Length - 1);
ならうまく行きますよ。
TextBox.Text.Lengthはテキストの範囲外のため、うまくいかないのではないかと予想されます。
(正確なところはEM_POSFROMCHARメッセージに対する各コントロールがどう応答するのかの
仕様を確認しないとわかりませんが)
> としてもpには(0,0)しか入りません。しかし、RichTextBoxで作るとうまくいきます。
> なぜTextBoxではできないのでしょうか?
たぶん単純に仕様が違うからだと思いますが、明確な根拠は今のところわかりません。
#理由は上記に書いた括弧書きかなと思ってますが。
引用返信
編集キー/
編集
■28858
/ inTopicNo.3)
Re[2]: GetPositionFromCharIndexについて
▲
▼
■
□投稿者/ DS
(2回)-(2008/12/02(Tue) 10:58:19)
■
No28856
(よねKEN さん) に返信
よねKENさん返信ありがとうございます。
> Point p = TextBox.GetPositionFromCharIndex(TextBox.Text.Length - 1);
> ならうまく行きますよ。
>
いわれたとおりPoint p = TextBox.GetPositionFromCharIndex(TextBox.Text.Length - 1);とするとうまくいきました!
おっしゃった通りTextBox.Text.Lengthはテキストの範囲外のためのようでした。本当にありがとうございます。
> たぶん単純に仕様が違うからだと思いますが、明確な根拠は今のところわかりません。
> #理由は上記に書いた括弧書きかなと思ってますが。
RichTextBoxでできてしまったのでTextBoxでもできるかと思って、そのままのコードを使ってしまったことが原因ですね。
使用が違っていたんですね。ありがとうございます。
引用返信
編集キー/
編集
■28859
/ inTopicNo.4)
Re[2]: GetPositionFromCharIndexについて
▲
▼
■
□投稿者/ よねKEN
(212回)-(2008/12/02(Tue) 11:06:30)
2008/12/02(Tue) 11:07:36 編集(投稿者)
その動作になる理由をTextBoxBase、TextBox、RichTextBoxのソースコードを読んで調べてきました。
> (正確なところはEM_POSFROMCHARメッセージに対する各コントロールがどう応答するのかの
> 仕様を確認しないとわかりませんが)
EM_POSFROMCHARメッセージといったWindowsAPIレベルの部分以前の話で、
それぞれのコントロールでのindexの範囲チェックによる動作でした。
TextBoxBase → index < 0 || index >= Text.Length だったら Point.Emptyを返す
TextBox → TextBoxBaseと同じ
RichTextBox → RichEditのメジャーバージョンが2だったら、TextBoxBaseと同じ
それ以外なら、index < 0 || index > Text.Length だったら Point.Emptyを返す
RichTextBoxでRichEditのメジャーバージョンが2以外のときだけ、テキストの末尾+1までOKなようです。
ちなみに以下のサイトのRichEditのバージョンについての情報を参照する限りでは、
.NET Framework2.0のサポート環境だとWin98の場合だけ注意が必要そうですね。
http://www.river.sannet.ne.jp/yuui/richedit.html
.NET Framework2.0のサポート環境は以下のシステム要件から
http://www.microsoft.com/downloads/details.aspx?familyid=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=ja
引用返信
編集キー/
編集
■28860
/ inTopicNo.5)
Re[3]: GetPositionFromCharIndexについて
▲
▼
■
□投稿者/ DS
(3回)-(2008/12/02(Tue) 11:18:17)
2008/12/02(Tue) 11:52:04 編集(投稿者)
2008/12/02(Tue) 11:52:01 編集(投稿者)
■
No28859
(よねKEN さん) に返信
よねKEN さん とても詳しくわかりやすい説明ありがとうございます。
> TextBoxBase → index < 0 || index >= Text.Length だったら Point.Emptyを返す
完全にこれが原因のようですね。RichTextで成功した理由まで教えて頂きありがとうございました。
解決済み
引用返信
編集キー/
編集
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
過去ログには書き込み不可
管理者用
-
Child Tree
-