TextBoxの行と列の取得 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 流れ者  (社会人)
投稿日時
2010/6/21 23:23:09
こんばんは。
XPMAX2008さん
>>現在、"HomePageEditor"というソフトを作っています。どんなソフトかは・・・、名前のとおりです。
>なら魔界の仮面弁士さんもおっしゃってますが、やっぱり
>>TextBox の代わりに RichTextBox
>でしょ。
私も同意見です。確かに既存のコントロールの機能を組み合わせて自分の要求を実現することは、プログラマにとって必要なスキルですが、もっと便利な機能を利用するという、良い意味で”手を抜く”技術も必要です。
私見ですが「行と列の表示」は、貴方が作ろうとしているソフトの機能としては、重要度の低い機能と思われます。そういった機能にPCのメモリやCPUの力を割くのではなく、もっと重要度の高い機能を充実させるべきだと思います。
XPMAX2008さん
>>現在、"HomePageEditor"というソフトを作っています。どんなソフトかは・・・、名前のとおりです。
>なら魔界の仮面弁士さんもおっしゃってますが、やっぱり
>>TextBox の代わりに RichTextBox
>でしょ。
私も同意見です。確かに既存のコントロールの機能を組み合わせて自分の要求を実現することは、プログラマにとって必要なスキルですが、もっと便利な機能を利用するという、良い意味で”手を抜く”技術も必要です。
私見ですが「行と列の表示」は、貴方が作ろうとしているソフトの機能としては、重要度の低い機能と思われます。そういった機能にPCのメモリやCPUの力を割くのではなく、もっと重要度の高い機能を充実させるべきだと思います。
投稿者 neptune  (社会人)
投稿日時
2010/6/21 17:01:37
>現在、"HomePageEditor"というソフトを作っています。どんなソフトかは・・・、名前のとおりです。
なら魔界の仮面弁士さんもおっしゃってますが、やっぱり
>TextBox の代わりに RichTextBox
でしょ。
なら魔界の仮面弁士さんもおっしゃってますが、やっぱり
>TextBox の代わりに RichTextBox
でしょ。
投稿者 XPMAX2008  (社会人)
投稿日時
2010/6/21 15:41:54
僕はてっきりメモ帳はVBだと思ってました。
(メモ帳がC言語なら他のソフトもそうだと思います。)
皆さん、資料ありがとうございます。
>間隔は100ミリ秒くらいの方が…。
>あまり短くするとCPU喰いますよ。
50ミリ秒が、一番スムーズでした。
>その方法でも取得できますが、API を使わずとも標準機能だけで取得できますよ。
TextBoxでタイマーを使ってできました。
現在、"HomePageEditor"というソフトを作っています。どんなソフトかは・・・、名前のとおりです。
それに使ってみます。
ありがとうございました。
(メモ帳がC言語なら他のソフトもそうだと思います。)
皆さん、資料ありがとうございます。
>間隔は100ミリ秒くらいの方が…。
>あまり短くするとCPU喰いますよ。
50ミリ秒が、一番スムーズでした。
>その方法でも取得できますが、API を使わずとも標準機能だけで取得できますよ。
TextBoxでタイマーを使ってできました。
現在、"HomePageEditor"というソフトを作っています。どんなソフトかは・・・、名前のとおりです。
それに使ってみます。
ありがとうございました。
投稿者 neptune  (社会人)
投稿日時
2010/6/21 15:06:48
>Me.Text = String.Format("{0}行{1}列", row + 1, col + 1)
おっ、そうですね。この方法がありますね。思いつきませんでした。
そりゃこちらの方が楽チンです。こちらにすべきですね。
失礼しました。
おっ、そうですね。この方法がありますね。思いつきませんでした。
そりゃこちらの方が楽チンです。こちらにすべきですね。
失礼しました。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2010/6/21 09:45:26
> で、本題ですが、EM_GETSELってのを調べてみてください。
> これでいけるならsendmessage API関数も必要ですね。
その方法でも取得できますが、API を使わずとも標準機能だけで取得できますよ。
なお、TextBox の代わりに RichTextBox を使うようにすれば、Timer も不要となります。
(Timer の Tick イベントではなく、RichTextBox の SelectionChanged イベントに記述する)
> これでいけるならsendmessage API関数も必要ですね。
その方法でも取得できますが、API を使わずとも標準機能だけで取得できますよ。
Dim pos As Integer = TextBox1.SelectionStart
Dim row As Integer = TextBox1.GetLineFromCharIndex(pos)
Dim col As Integer = pos - TextBox1.GetFirstCharIndexOfCurrentLine()
Me.Text = String.Format("{0}行{1}列", row + 1, col + 1)
なお、TextBox の代わりに RichTextBox を使うようにすれば、Timer も不要となります。
(Timer の Tick イベントではなく、RichTextBox の SelectionChanged イベントに記述する)
投稿者 (削除されました)  ()
投稿日時
2010/6/21 09:37:02
(削除されました)
投稿者 neptune  (社会人)
投稿日時
2010/6/20 23:01:09
メモ帳ってC言語で書かれているんですよね。昔、VS6のころにはサンプルソースが付属してました。
で、本題ですが、EM_GETSELってのを調べてみてください。
多分ですが、これでいけるような気がします。
あっこれでいけるならsendmessage API関数も必要ですね。
で、本題ですが、EM_GETSELってのを調べてみてください。
多分ですが、これでいけるような気がします。
あっこれでいけるならsendmessage API関数も必要ですね。
投稿者 トマト  (中学生)
投稿日時
2010/6/20 19:32:28
間隔は100ミリ秒くらいの方が…。
あまり短くするとCPU喰いますよ。
あまり短くするとCPU喰いますよ。
投稿者 あにす  (社会人)
投稿日時
2010/6/20 18:32:01
System.Windows.Forms.TextBoxで検索して下さい。
投稿者 XPMAX2008  (中学生)
投稿日時
2010/6/20 17:26:53
で、メモ帳のようなソフトを作っています。
メモ帳では、ステータスバーの右側に、「 X 行、Y 列」とありますが、
取得するには、どうすればよいですか?
<オブジェクト(ステータスバー)>
オブジェクト:StatusBar
オブジェクト名:StatusBar1
メモ帳みたいにするため、メニューは、MenuStripではなくMainMenu。
ステータスバーは、StatusStripでなく、StatusBarにしています。
上記の通り、Timerを使っています。間隔は、1ミリ秒です。
これを実行した結果、
(TextBox.1Text = "ABC")
BC間にカーソル
なぜか、"何文字目?"という結果になってしまいます。
どうすればよいですか?
あと、絵が見づらくてすみません。
メモ帳では、ステータスバーの右側に、「 X 行、Y 列」とありますが、
取得するには、どうすればよいですか?
<オブジェクト(ステータスバー)>
オブジェクト:StatusBar
オブジェクト名:StatusBar1
メモ帳みたいにするため、メニューは、MenuStripではなくMainMenu。
ステータスバーは、StatusStripでなく、StatusBarにしています。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Timer1.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
StatusBarPanel3.Text = (TextBox1.Focus) & " 行、" & (TextBox1.SelectionLength) & " 列"
End Sub
上記の通り、Timerを使っています。間隔は、1ミリ秒です。
これを実行した結果、
(TextBox.1Text = "ABC")
BC間にカーソル
_______________________________________________________________
| |
| AB|C |
| |
|_______________________________________________________________|
| | 2行、0列 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| AB|C |
| |
|_______________________________________________________________|
| | 2行、0列 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
なぜか、"何文字目?"という結果になってしまいます。
どうすればよいですか?
あと、絵が見づらくてすみません。
VBの場合、実行のために、(昔なら)ランタイムをインストールしなければならないし、VB.NETの場合、.NetFrameworkをインストールしなきゃならん。
Windows2000以前で、.NetFrameworkもVBランタイムも入っていないデフォルトのWindowsで、普通にメモ帳が実行できていたことを考えると、VBで出来ていると考えるのは違うと思う。
>>現在、"HomePageEditor"というソフトを作っています。どんなソフトかは・・・、名前のとおりです。
>なら魔界の仮面弁士さんもおっしゃってますが、やっぱり
>>TextBox の代わりに RichTextBox
>でしょ。
一票。